|
Если вы — бывший системщик или прикладной программист и не знакомы с языком
Perl, довольно непросто будет привыкнуть к тому, что PHP, как и большинство
язы-
ков для Web, является интерпретатором (правда, как мы уже говорили, с трансли-
рующим оптимизатором).
Что ж, это так. Да, сценарии, написанные на PHP, работают в тысячи раз
медленнее,
чем Си-программы (но почти с такой же скоростью, как созданные на Perl — может
быть, отстают максимум в несколько раз на особо критических участках), и к
этому
придется привыкнуть. Например, если мы напишем на Си пустой цикл с миллионом
итераций примерно такого вида:
for(long i=0; i<1000000; i++);
то он будет работать всего долю секунды, в то время как аналогичный цикл на
PHP:
for($i=0; $i<1000000; $i++);
проработает на процессоре Pentium 100 несколько секунд.
Приведенные оценки, особенно сравнения с Perl, касаются только PHP версии
4, но не версии 3. Последний отстает даже от Perl по быстродействию почти в
100 раз. Так что стоит задуматься, допустимо ли вообще применять PHP вер-
сии 3 при написании нетривиальных программ.
Однако для сценариев, не содержащих в себе таких громадных циклов (а таких про-
грамм, как мы вскоре увидим, большинство), время работы будет отличаться очень
несущественно. Ну, в самом деле, какая разница, работает ли сценарий 0,01
секунды
или 0,1 секунды, если передача данных по каналам Интернета через модем будет
длиться, например, 5 секунд?
Впрочем, тут все-таки есть стимул стараться по возможности ускорить сцена-
рий: если на вашей машине размещены сотни виртуальных хостов, способных
работать с PHP, и каждый из них весьма популярен у пользователей Интерне-
та, то суммарный проигрыш в быстродействии может быть вполне ощутим.
В этом случае придется просто отказаться от PHP и перейти на более быстрый
(но и более сложный) язык — например, Си или Java.
"А как же быть, — спросят некоторые, — если нам нужно написать сценарий для
работы, скажем, с тысячами и десятками тысяч пользователей, адреса и телефоны
которых хранятся в файле? Ведь, чтобы найти какого-то пользователя (особенно,
если
его имя задано не точно), придется просматривать их всех, а это как раз и будет
цикл
с огромным количеством итераций?" Да, это действительно так. Если нужно обраба-
Глава 6. Характеристика языка PHP 109
тывать очень большие массивы данных, лучше использовать Си или... базу данных.
База данных — это набор очень большого числа записей с одинаковой структурой
плюс программное обеспечение для быстрого поиска, добавления и удаления записей
(чаще всего написанного как раз на Си). PHP поддерживает работу с очень большим
числом разнообразных баз данных, поэтому написание сценариев с применением баз
данных не должно вызвать особых проблем. Кстати, и выполняться такие скрипты
будут быстрее, чем аналогичные им "самодельные", написанные на Си — ведь разра-
боткой баз данных и эффективных алгоритмов работы с ними занималось множество
людей. А в PHP останется лишь вызвать нужную функцию (например, поиск в базе
данных) и сразу получить результат — многие базы данных даже умеют нужным об-
разом его отсортировать и вообще выполнить всю "грязную работу"...
У интерпретатора есть и другие преимущества перед классическим компилятором,
например, перед Си. Вот некоторые из них.
r Упрощается обнаружение ошибок во время выполнения программы.
В случае сбоя интерпретатор сразу же выведет сообщение, что что-то не так.
r Можно не заботиться об освобождении выделенной памяти. Интерпретатор сам
определит, когда та или иная переменная в программе уже не используется, и ос-
вободит память, выделенную для нее.
r Существует возможность написать программу, которая, грубо говоря, будет фор-
мировать и тут же исполнять другую программу, что очень часто практикуется
при шаблонной системе организации скриптов. В частности, мы можем формиро-
вать идентификаторы во время исполнения программы, создавать массивы ано-
нимных функций и т. д.
r Не нужно думать о типах переменных (как это, кстати, было сделано в приведен-
ном цикле for). Мы еще вернемся к данному вопросу в дальнейшем.
Есть и другие достоинства. Вообще, использование интерпретатора способно дать
сценариям ту мощь, которую пользователи Web от них и ожидают.
Но за все нужно платить: эта пресловутая медлительность интерпретаторов, даже с
блоком трансляции, способна вывести из себя самого закаленного программиста.
Проигрыш особенно заметен в случае больших и сложных цикло
|
|