Есть один вариант, как правило, быстрее, чем другой?
Вариант A: $var = $_GET['param'];
, а затем ссылка $var
через сценарий.
Вариант B: Ссылка на $_GET['param']
в каждом случае через скрипт.
Спасибо!
ответ
Разница в производительности, если таковая имеется, будет незначительной и не стоит усилий - настолько, что даже если вы попытаетесь выполнить микропроцессор, разница будет потребляться случайными факторами.
Однако вариант A лучше с точки зрения создания более устойчивого кода. например Если вы хотите изменить значение $var
, вы можете сделать это с одной позиции в своем коде.
Проще говоря это никогда не станет узким местом в вашей программе.
+1, но «Также увеличивать глобальную переменную в 2 раза медленнее ...». Можем ли мы это проверить? –
Спасибо за ответ! – Mooseman
@czarpino Указано [здесь] (http://stackoverflow.com/questions/2216340/the-advantage-disadvantage-between-global-variables-and-function-parameters-in#answer-2216350) и [здесь] (http://www.mdproductions.ca/guides/50-best-practices-to-optimize-php-code-performance) и [здесь] (http://my.opera.com/KenyLieou/blog/speed- up-your-php-code-site), однако я просто провел несколько тестов, и иногда это было примерно в два раза медленнее, а другие - с той же скоростью. Поэтому я удалю оператор, поскольку он не является окончательным. –
Используйте $ _GET ['param'], когда сможете. PHP должен помнить $ _GET ['param']. Сделав переменную, равную $ _GET ['param'], PHP теперь должен запомнить две переменные, которые являются точно такими же.
Если вы не собираетесь менять значение новой переменной, быстрее использовать $ _GET ['param']. (Имейте в виду, что некоторые люди хотели бы сделать новые переменные просто для удобства чтения)
Если ваша системная память достаточно мала, чтобы это было проблемой, я думаю, что пришло время для обновления. –
PHP использует «copy on write», поэтому две переменные, имеющие одно и то же значение, являются указателями на одно и то же значение. – IMSoP
@kormoc Как я сказал ниже, это не имеет никакого отношения к неизменяемости строк, что, по моему мнению, даже не относится к PHP. – IMSoP
протестированные с 10000000
петель
$var = "bleh";
for ($i=0; $i<10000000; $i++) {
strlen($var);
}
и
$array = array();
$array['blah'] = "bleh";
for ($i=0; $i<10000000; $i++) {
strlen($array['blah']);
}
Результаты:
- Var: 8,563 с - 856,3 наносекунды на петлю
- Массив: 8,699 с - 869,9 наносекунд на петлю
1,6% разница в скорости.
Является ли эта разница последовательной? Чтобы получить действительный контрольный показатель, вам нужно будет запустить этот тест сам по себе много раз и усреднить производительность каждого подхода. Также обратите внимание, что это не совсем то же самое, что вопрос, который использовал суперглобал, который может вести себя по-разному. – IMSoP
Этот вид микро-оптимизации редко стоит о чем подумать. Как правило, лучше подумать о том, как лучше всего создать ваш код, и оставить такие проблемы людям, которые записывают время выполнения этого языка.
Есть много факторов, которые будут иметь значение, если мы действительно хотим, чтобы выработать который был более эффективным:
- как доступ к массиву работает, чтобы выполнить
['param']
один или несколько раз - как Суперглобальные, такие как
$_GET
реализованы - Как выполняется реализация (в PHP используется «copy on write»)
- как вы проходите
$var
вокруг вашего кода (например,в качестве параметра функции) и как что реализуется - как часто вам нужно прочитать из переменной
- как часто вы пишете переменной
я уверен, что есть еще много; и, конечно, как ваша программа, так и исполняемая среда PHP, в которой он работает, могут быть изменены во всех этих точках.
Не забывайте о проблемах нижнего уровня, таких как компилятор, используемый для сборки PHP, локальность кэша, прерывания, текущие процессы ... :) Это довольно глубокая кроличья нора ... – cHao
A:
$var = $_GET['param']; // and then referencing $var through the script.
Требует постоянное время, которое равно нулю в информатике.
B: Реферирование
$_GET['param']; // in each occurrence through the script.
некрасивый подход и делается только "небрежный" программистов.
Предположим, что вы должны использовать $_GET['param']
10 раз на одной странице или на нескольких страницах, а затем вы решите, что хотите изменить параметр «param» на «p» или «параметр», тогда вы отсутствуете удачи.
Вы хотите инициализировать «магические числа» и «магические значения» переменной (или константе), которую вы можете редактировать позже, и программист (независимо от того, является ли это вашим или кем-то еще) не должен знать точно, что это такое.
Представьте себе, если бы программисты используют
if($number == 3.1415)
вместо
if($number == $pi)
сводится к той же основе.
Итак, нет, ни один вариант, как правило, не теоретически быстрее, но вариант B даст вам ад позже и уродлив.
Согласен с теми, кто говорит, что вы беспокоитесь о неправильном уровне оптимизации. (Хотя, если вы действительно хотите зацикливаться на подобных вещах, ознакомьтесь с http://www.phpbench.com/)
Ваш первый уровень оптимизации должен оптимизировать читаемость и ремонтопригодность кода. Циклы человеческих часов гораздо более ценны и дороги (вообще говоря), чем компьютерные тактовые циклы. В качестве дополнительного бонуса вы будете приятно удивлены, как часто оптимизация циклов человеческих часов также сделает код значительно быстрее.
Я настоятельно рекомендую Роберту К. Мартину Clean Code отличное руководство по стилю кодирования.
- 1. PHP $ _GET и подчеркивает
- 2. PHP $ _GET вопрос
- 3. PHP-проблема с $ _GET
- 4. PHP MySql $ _GET проблемы
- 5. mod_rewrite PHP $ _GET пустой
- 6. Использование переменной PHP $ _GET
- 7. PHP с помощью $ _GET
- 8. PHP ошибка $ _GET
- 9. php $ _get не работает
- 10. PHP $ _GET URL-адрес
- 11. JavaScript PHP $ _Get issue
- 12. php $ _GET пусто
- 13. php установка $ _GET значение
- 14. PHP $ _GET ['action']
- 15. PHP $ _GET апостроф
- 16. PHP $ _GET возвращает index.php
- 17. PHP проблема $ _GET рода
- 18. PHP htaccess вместо $ _GET
- 19. PHP $ _GET .htaccess переписать
- 20. PHP $ _GET с HTML
- 21. Ручка $ _GET безопасно PHP
- 22. php и $ _GET array
- 23. $ _GET в PHP и &
- 24. PHP $ _GET скрыть url
- 25. _GET method php
- 26. $ _GET PHP не работает
- 27. PHP $ _GET Trouble
- 28. .htaccess PHP $ _GET
- 29. Несколько параметров $ _GET php
- 30. PHP | $ _GET & $ _POST issue
Честно говоря, вы не будете писать достаточно большие сценарии, чтобы это имело значение в любом случае. Мы говорим о дополнительной паре миллисекунд, максимум, в течение нетривиального сценария. Выберите, какой из них более понятным и поддерживаемым. (Подсказка: вариант A: P) – cHao
В основном вы спрашиваете, сколько накладных расходов связано с поиском соответствующего массива. Вы должны просто выполнить быстрый тест. Напишите скрипт php, чтобы использовать ключевой поиск, чтобы что-то сделать, и запустить его несколько сотен тысяч раз и время, сделайте то же самое с прямой переменной и запустите его в одно и то же время и время. Проверьте время, и вы увидите накладные расходы – kormoc
@cHao Мы говорим о 2-3 мс? Или это меньше? – Mooseman