Я решил вспомнить некоторые особенности PHP, связанные с производительностью.
Замечу, что в свой шорт-лист я включил только те вещи, которые обычно вызывают удивление у младших разработчиков, с которыми я работал.
Думаю, все знают о банальных вещах типа «одинарные кавычки вместо двойных», поэтому попробую кого-нибудь удивить.
Результаты и выводы основаны на нескольких версиях PHP, которые работают на известных мне серверах, а именно 5.2.6 от Debian Lenny, 5.3.2 от Ubuntu и 5.2.14 от dotdeb. На других платформах могут быть различия.
file_get_contents Ни для кого не секрет, что file_get_contents использует ( отображение памяти ), прирост от которого особенно заметен на больших файлах.
Следствие этого: simplexml_load_string( file_get_contents ('file.xml') )
работает быстрее, чем: simplexml_load_file('file.xml')
Похоже, что такие функции, как simplexml_load_file, основаны на обычном fopen/fread, что приводит к разнице в скорости.
NB: Также неплохо ускоряется DOM-> loadFile и некоторые другие функции с похожим поведением.
Если вы анализируете файл с разделителями \n (или CSV, TSV или что-то подобное), я рекомендую заменить file() на explode(PHP_EOL, file_get_contents('file.xml'));
Спасибо за совет с PHP_EOL Одинокий кот
Прирост будет даже больше, чем в случае с xml.
Судя по всему, file() реализован не очень хорошо.
count() и sizeof() UPD: sizeof() — синоним count(), работает быстрее, спасибо меркушин для исправления.
Уведомления и т. д. Да, разрешать уведомления — это ужасно.
Но если ваш младший разработчик не хочет признавать их важность, скажите ему, что создание одного уведомления в PHP требует времени, за которое вы можете обойти и увеличить массив примерно из 30 элементов.
для каждого Цикл foreach является анафемой почти в каждой статье о производительности PHP. На практике все не так уж и страшно.
Жуткие конструкции, такие как: while (list($key, $value) = each($item))
в реальных условиях они зачастую медленнее.
Если пропустить $key, то эта конструкция проигрывает foreach примерно на 30-40%.
JSON против XML Скажу только, что перейдя на json-файлы для настройки, я выиграл 20-30% на инициализации ядра.
JSON приятен для глаз, иерархичен и быстр.
Кроме того, json_decode работает быстрее без второго аргумента (генерируя объект, а не массив), но незначительно.
mb_ereg против preg_match POSIX — выражения медленные, опять же это общеизвестно.
А вот движок Oniguruma, который используется в функции mb_ereg и ее собратьях mb, с этим не согласен и примерно в двух третях случаев превосходит хваленый preg_match. IGBinary для сериализации.
Это очень быстрое расширение , с очень компактным выходным значением.
file_exists и включите Проверка file_exists() с последующим включением обходится дешевле, чем проверка возврата include(), если вы, например, не уверены, что файл существует. включить снова Не знаю почему, но include_once часто работает медленнее, чем конструкция с принудительной проверкой (все включаемые файлы записываем в массив).
Статические переменные Переменная статического класса, лучшее место для быстрого получения глобальных данных, выросла в 5–10 раз.
Напоследок пара советов Покажите себе время выполнения в миллисекундах, а не в долях секунды.
Это отличная мотивация (сравните «100 миллисекунд» и «0,1 секунды»), и ее легче читать.
Очень важно собирать информацию не только об абсолютной скорости, но и анализировать вклад отдельных подсистем: ядра, интерфейса данных, рендеринга и т. д. Я настроил свой профилировщик (на тестовой машине) на выдачу исключений, когда какие-либо участки кода работают аномально медленно (пример: «Ахтунг! 30% времени подключается к MySQL»).
Все выводы получены в результате личных наблюдений и тестов.
Вполне возможно, что в вашей системе результаты будут другими.
Замечу, что многое зависит от вашей архитектуры, и практически любые советы следует проверять на собственном коде, не доверяя полностью чужому опыту.
Поэтому я намеренно не указал абсолютные цифры, которые вы можете найти самостоятельно, например, на http://phpbench.com/ (не мой) Удачи и быстрого кода! Теги: #php #производительность #советы новичкам #php
-
Шлифовальные Машины
19 Oct, 24 -
Партнерские Гангстеры Интернет-Маркетинга
19 Oct, 24 -
Плати, Если Хочешь
19 Oct, 24 -
Новая Версия Редактора Изображений
19 Oct, 24