Аргерих Л. О языке РНР. Часть 5. Страница 90


Сценарии Perl

Модуль Apache, позволяющий выполнять сценарии Perl без вызова ин­терпретатора Perl

PHP

Для сравнения те же сценарии программировались на РНР и выполня­лись

После нескольких оценок производительности, включающих различные ти­пы сценариев и загрузки серверов, был сделан вывод, что mod_perl, FastCGi и РНР дают самые быстрые результаты, мало различаясь между собой. Та­ким образом, если сайт или сценарий РНР работают медленно, то надо ана­лизировать код, а не менять язык.

Тесты

Тест 1 — 1000 выполнений очень короткого сценария (табл. 24.1):

Оптимизация кода РНР

Говоря о задачах предварительной оптимизации (preoptimization), програм­мисты рассуждают так: «Я заменю этот вектор хеш-таблицей и повышу ско­рость» или «Я заменю эту функцию ereg() несколькими функциями str rep- 1асе(), это, повысит скорость». Они весьма заблуждаются.

Во-первых, при такого рода оптимизации время выполнения сценария обычно сокращается не более чем на секунды, а потому польза невели­ка, зато легкость чтения кода может значительно пострадать. Во-вторых, предварительная оптимизация очень часто является непроизводительной тратой драгоценного времени программиста.

Оптимизацией стоит заниматься, только убедившись в действительной ее необходимости. Профессиональным подходом к повышению производитель­ности будет следующий:

♦ Профилировать код и найти узкие места

♦ Классифицировать узкие места

♦ Ликвидировать узкие оптимизировав код

Профилирование кода

Если скорость выполнения кода неудовлетворительна, то первым делом не­обходимо его профилировать и измерить время, которое сценарий тратит на выполнение различных задач и функций. На основе этой информации мож­но выяснить, на что сценарий расходует больше всего времени. Эти функции называются узкими местами (bottlenecks).

Профилирование может преподнести сюрпризы. Например, может оказать­ся, что 99% времени сценарий тратит на запросы к базе данных, либо вы­явятся другие узкие места, такие как дисковый ввод/вывод при чтении боль­ших файлов или журналов. Оптимизация не может быть эффективной без предварительного профилирования.

Как профилировать сценарии РНР

Для того чтобы профилировать сценарий РНР, надо снабдить таймерами не­которые функции и задачи сценария и измерить продолжительность их вы­полнения.

Допустим, есть такой сценарий РНР:

<?php

// Some initializations requi re_once("some_class.php");

$foc = new some_class();

$resl = $fob->do_a_method(); $res2 = $foo->do_a_method2();