Статьи

PHPBench.com: живые тесты PHP, демистифицирующие «лучшие практики»

Как новый участник блогов SitePoint, я буду заниматься веб-разработкой на PHP, JavaScript и общими веб-технологиями.

Когда речь заходит об оптимизации PHP для повышения производительности, нет конца доступным ресурсам и нет конца противоречивым мнениям. Кажется, у каждого свой подход к написанию «быстрого» кода PHP; использование одинарных кавычек, избегание require_once () и использование isset () перед is_array () являются одними из наиболее распространенных. Но с надежными эталонными тестами на местах, как мы узнаем, действительно ли какой-либо из этих методов — часто называемый «лучшими практиками» — действительно приносит выгоды? Новый набор тестов PHP Криса Винсента на PHPBench.com направлен на то, чтобы « прояснить » методы повышения производительности PHP с помощью простого и всестороннего представления о том, как на самом деле складываются различные подходы.

Набор тестов охватывает все обычные основы, решая простую задачу — например, итерации по массиву — и ускоряя тестирование практически всеми возможными способами для достижения этой цели. Однако, что наиболее важно, Крис выделяет необработанные цифры из центра внимания и вместо этого сосредотачивается на том, как варианты сравниваются друг с другом. Каждый тест использует самую быструю технику в качестве базового значения для времени выполнения; все остальные параметры измеряются в процентах по отношению к этому. Например, foreach($aHash as $val)while(list($key) = each($aHash)) $tmp[] = $aHash[$key]

Результаты тестов также генерируются в прямом эфире; Обновление страницы даст немного другой набор результатов. Крис использует заголовок относительно простой страницы результатов, чтобы рекомендовать обновить несколько раз, просто чтобы обеспечить согласованность и избежать одноразового воздействия на какой-либо конкретный тест. Лично я бы предпочел, чтобы тесты проводились в контролируемой среде и создавались заново каждый раз, когда добавляется новый тест; аномалии никому не помогают, и живой тест дает мало реальной выгоды, кроме простоты эксплуатации. Код для каждого теста предоставляется для прозрачности.

Его текущий набор тестов очень всеобъемлющий; не менее 13 тестов сравнивали производительность различных вызовов echoprint Он также принимает предложения для новых тестов. Но самое главное, что многие из его тестов помогают определить ценность лучших практик. Например, PHP часто критикуют за смутные результаты сравнений == тесты структур управления показывают, что не только ===

Хотя большинство тестов показывают незначительные различия в производительности, есть некоторые интересные результаты. Например, перебор массива и изменение каждого элемента в 100 раз быстрее при использовании while(list($key) = each($aHash))foreach ($aHash as $key=>$val)array_keys()while(list($key,$val) = each($aHash)); ,

Следующим шагом, конечно, будет загрузка набора тестов на локальный компьютер или сервер и запуск тестов самостоятельно, чтобы увидеть, как факторы вашей производственной среды влияют на результаты; Крис стремится сделать это возможным в ближайшем будущем. Очевидно, что многие из перечисленных методов будут эффективными с точки зрения памяти или цикла ЦП, и пределы вашей инфраструктуры будут определять, какой путь вы хотите использовать до масштабирования. Тем не менее, устранение узких мест в вашем коде действительно может помочь вам получить максимальную отдачу от ваших серверов — в конце концов, если вы можете достичь чего-то в 100 раз быстрее, почему бы и нет? — и PHPBench.com может стать окончательным ориентиром по производительности PHP.

Обновление: многие комментаторы отметили проблемы с полезностью и надежностью тестов. При создании сайта важно учитывать намерения Криса, как он описал в комментариях . Со всеми постами «используйте этот синтаксис, потому что он немного быстрее», PHPBench.com был создан для того, чтобы увидеть, есть ли реальная материальная выгода от использования определенного синтаксиса; большинство тестов показывают, что это явно не так. Я провел несколько собственных тестов и видел похожие результаты, но если что-то не так, не стесняйтесь, сообщите об этом Крису. Сайт не пытается определить несущественные преимущества производительности, например, одинарные кавычки против двойных кавычек. В дальнейшем PHP Bench можно использовать для измерения производительности алгоритма и других более интенсивных процедур; на данный момент основные синтаксические тесты просто отражают потенциал системы. Надеюсь, это прояснит ситуацию.