| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Eval или include?
Один из текущих проектов разрабатываю на собственном фреймворке, параллельно его обкатывая и дописывая. Зачем мне понадобилось изобретать велосипед, и чем он отличается от существующих, напишу когда буду представлять его общественности. Сейчас же хочется поделиться некоторыми мыслями по поводу производительности и заодно выслушать мнения коллег. Возможно, мои наблюдения будут полезны и тем, кто не использует фреймфорки. Когда пришлось реализовывать дерево комментариев, столкнулся с необходимостью рекурсивного вызова представления (view в MVC). Так как представления у меня, да и практически везде, — это обычные файлы с кусками HTML-кода и возможностью вставки PHP, то подключаются они с помощью include. Мне стало не по себе, когда представил как этот include вызывается рекурсивно сотни раз. Первая мысль — засунуть файл представления при первом запросе в память и потом выполнять его через eval. Такой подход позволит кешировать код представлений, и даже хранить его в БД. Так как eval кушает только PHP, а представления у нас чистым PHP-кодом не являются, то обрамляем содержимое в '?>' и '<?php'. Итак, за дело. ТестыДля начала, разными способами в цикле выведем простенькое представление 'view.php', содержащее, например:i=<?=$i?>
И рекурсивно
ВыводыПервое, что бросается в глаза — варианты с eval не поддаются оптимизации и кешированию с помошью eAccelerator. Поэтому, если вы его используете и вам не нужны другие преимущества eval — лучше остановитесь на include.Использование eval имеет смысл там, где представления вызываются многократно, но нет возможности использовать акселераторы. Или если представления хранятся в БД. Немного отличается и обработка ошибок в eval. При возникновении ошибки разбора кода, например, выполнение скрипта не прерывается. Это может быть полезно в некоторых случаях. Но при этом, сообщение об ошибке выглядит по другому, что может немного сбить с толку: Parse error: syntax error, unexpected T_ECHO, expecting ')' in /www/test/eval_vs_include/test.php(39)
: eval()'d code on line 4Здесь указанная ошибка возникла в 4 строке файла view.php, который был скормлен в eval, расположенный в 39 строке файла test.php. Конечно, нам ничего не мешает выводить и название подключаемого файла, если eval возвратил false. Учитывая, что работа над ошибками — это не штатный режим, и на рабочем проекте ошибки не выводятся, считаю указанный недостаток не существенным. Eval+ Быстрее чем include, если не используются акселераторы+ Возможность кеширования кода представлений во фреймворке или шаблонизаторе + Возможность хранения представлений в БД + Выполнение скрипта не прерывается при возникновении ошибок - Не оптимизируется и не кешируется внешними акселераторами - Вывод ошибок отличаться от привычного - На некоторых хостингах может быть запрещено выполнение eval Include+ Работает везде+ Внешние акселераторы на много увеличивают производительность - Низкая скорость без акселераторов - Нет возможности кешировать подключаемый из файла код в своём движке - Подключаемый код может находиться только в файле Следует отметить, что во фреймворке CodeIgniter eval тоже используется для вывода представлений, но только в том случае, если в настройках указана необходимость замены коротких '<?=' на '<?php есho' и при этом в настройках PHP короткие теги будут отключены. Во всех остальных случаях используется include. В CakePHP всегда используется include. Источник: http://habrahabr.ru Рубрика: PHP
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|