Еще Несколько Советов Для Php-Разработчиков

Вдохновленный этим .

Я решил вспомнить некоторые особенности 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.