Как увеличить скорость загрузки страницы в приложении Zend Framework - PullRequest
2 голосов
/ 27 апреля 2011

Я разработал приложение с использованием ZF. Это небольшое приложение с большим количеством функций.

Я использую Zend_Application (уже использующий автозагрузчик в конструкторе), Zend_Layout, Zend_view, Zend_form и т. Д. Моя текущая проблема заключается в том, что загрузка страницы очень медленная, и это тоже в localhost с XAMP.

Я включил xdebug, чтобы исследовать проблему, получил файл cachegrind в папке "tmp" и попытался просмотреть его с помощью программного обеспечения WinCachegrind. Там я могу увидеть множество процессов и функций, выполняемых для каждого запроса или загрузки страницы.

Кроме того, я установил дополнение YSlow для Firefox и наблюдал за скоростью загрузки страниц в секундах ... Я сравнил скорость с приложениями ZF и не ZF. И из сравнения, страницы для приложения, отличного от zf, загружаются менее чем за 1 секунду, а для приложения ZF - как минимум 6-7 секунд. Какая огромная разница.

Основные вещи, которые происходят в приложении:

1) Подключение к базе данных происходит для каждого запроса.

2) Я не добавляю представление в макет явно, ZF просто автоматически добавляет его в layout.phtml на основе имени действия.

3) В некоторых окнах есть формы с несколькими выпадающими списками, которые извлекают данные из базы данных.

4) Имели меню с ACL, до того, как оно загружало привилегии из БД для каждого запроса, но теперь я оптимизировал его, так что он будет работать только при условии входа в систему и оставшегося времени, которое потребуется Zend_Registry.

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

Кто-то, пожалуйста, помогите мне найти решение для этого. Любая помощь очень ценится. Большое спасибо

1 Ответ

0 голосов
/ 28 апреля 2011

Давайте попробуем дать несколько подсказок.

Первое подключение к базе данных должно произойти только один раз (кроме случаев, когда вы используете несколько привилегий доступа к базе данных или нескольким базам данных).Поэтому убедитесь, что вы используете шаблоны Singleton с вашим объектом Zend_Db_Tables

Тогда вы не используете Zend_Cache .Вы действительно должны начать использовать Zend_Cache и создать несколько объектов кеша.Скажем, например, File Cache с долгосрочным хранением, и Memcache или Apc Cache, хранящий объекты.Затем используйте эти кэши в нескольких слоях:

  • передает FileCache в Zend_Db_Table (defaultMetaDataCache), таким образом вы избежите множества запросов метаданных, запросов, которые запрашивают описание каждого столбца таблиц, которые вы используете.
  • Сохраните один или несколько объектов Acl (зависит от того, как вы используете Acl, если у вас есть один большой Acl со всеми правилами или несколько с подмножествами).И сохраняйте их в кэшах средней продолжительности, когда они создаются.
  • Подумайте о других случаях использования, обнаруживайте тяжелые циклы, полустатическое содержимое (например, когда вы выбираете списки, сколько раз их следует считать статическими?)

Наконец, получите полное представление о том, как работает ваша прикладная машина, и как ваши данные будут расти и использоваться. Вам понадобится этот шаг, чтобы наилучшим образом использовать кэши уровней приложений (например, следуеткакие элементы должны быть кэшированы для групп пользователей? Должны ли объекты Acl быть построены для групп, для каждого пользователя, для всех, есть ли какие-то блоки в макете, которые должны отображаться одинаково для всех?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...