В разделе Поддерживаемые устройства на странице консоли разработчика вы можете просмотреть список всех устройств. Это загружает более 2000 ползунков, которые первоначально настроены на включение. К сожалению, в интерфейсе не существует опции «отключить / включить все» ...
... Вместо этого я использовал инструмент инспектора Firebug, чтобы получить имя класса для этих объектов ползунка (возможно, t вспомнить, что это было сейчас - два случайных аббревиатуры в верхнем регистре), затем выполнил выражение в консоли Javascript, которое переключило состояние каждого слайдера. Что-то вроде:
switches = document.getElementsByClassName("ABC DEF"); for(i = 0; i < switches.length; i++) switches[i].click();
Это заморозило браузер в течение минуты или двух, но впоследствии каждый телефон был отмечен как неподдерживаемый. Затем вы можете включить телефон (ы), который вам нужно поддерживать.
Ну, поскольку вы говорите, что уверены, что это имеет значение, вам следует просто написать тестовую программу и измерить, чтобы найти разницу.
Сравнение может быть быстрее, если этот код выполняется на нескольких переменные, размещенные по разрозненным адресам в памяти. При сравнении вы будете только читать данные из памяти в кеш процессора, и если вы не измените значение переменной, когда кеш решит очистить строку, он увидит, что строка не была изменена и нет необходимости записывать ее обратно в память. Это может ускорить выполнение.
Это не просто преждевременная оптимизация , это микрооптимизация , которая не имеет отношения к делу.
Изменить: я написал сценарий на PHP. Я только заметил, что в нем была явная ошибка, означающая, что время выполнения в лучшем случае вычислялось неправильно (страшно, что никто другой не заметил!)
В лучшем случае просто превосходит прямое назначение, но в худшем случае - намного хуже , чем простое задание. Присвоение, вероятно, является самым быстрым с точки зрения реальных данных.
Вывод:
Код:
<?php
$arr = array();
$mtime = explode(" ", microtime());
$starttime = $mtime[1] + $mtime[0];
reset_arr($arr);
for ($i=0;$i<10000;$i++)
$arr[i] = true;
$mtime = explode(" ", microtime());
$firsttime = $mtime[1] + $mtime[0];
$totaltime = ($firsttime - $starttime);
echo "assignment in ".$totaltime." seconds<br />";
reset_arr($arr);
for ($i=0;$i<10000;$i++)
if ($arr[i])
$arr[i] = true;
$mtime = explode(" ", microtime());
$secondtime = $mtime[1] + $mtime[0];
$totaltime = ($secondtime - $firsttime);
echo "worst case comparison in ".$totaltime." seconds<br />";
reset_arr($arr);
for ($i=0;$i<10000;$i++)
if (!$arr[i])
$arr[i] = false;
$mtime = explode(" ", microtime());
$thirdtime = $mtime[1] + $mtime[0];
$totaltime = ($thirdtime - $secondtime);
echo "best case comparison in ".$totaltime." seconds<br />";
function reset_arr($arr) {
for ($i=0;$i<10000;$i++)
$arr[$i] = false;
}
Я действительно не ожидал, что будет какая-то заметная разница в производительности для чего-то столь тривиального, как это, так что, конечно же, все сводится к тому, что дает вам ясный, более читаемый код. Я считаю, что это всегда было бы верно.
Можно попробовать:
if(!array[i])
array[i]=true;
Но на самом деле единственный способ узнать наверняка - это профилировать, я уверен, что почти любой компилятор посчитает сравнение с false ненужным и оптимизирует
Все зависит от типа данных. Назначение логических значений выполняется быстрее, чем их первое сравнение. Но это может быть неверно для больших типов данных, основанных на значениях.
Как отмечали другие, это микрооптимизация .
(В политике или журналистике это называется пристальным вниманием; -)
Достаточно ли велика программа, чтобы иметь более пары уровней вызовов функций / методов / подпрограмм?
Если да, то она вероятно, было несколько звонков, которых можно было избежать, и они могут потратить сотни столько же времени, сколько и низкоуровневая неэффективность.
Если предположить, что вы удалили те (что делают немногие), то непременно запустите его. 10 ^ 9 раз по секундомеру и посмотрите, что быстрее.
Если вы просто хотите перевернуть значения, выполните:
array[i] = !array[i];
Производительность при использовании этого параметра на самом деле хуже, поскольку вместо того, чтобы выполнять только единственную проверку на истинное ложное значение, а затем установить , он проверяет дважды.
Если вы объявляете массив элементов из 1000000 истинных, ложных, истинных, ложных, сравнение образца происходит медленнее. (var b =! b) по сути выполняет проверку дважды, а не один раз