Доктрина 2 экстремальная оптимизация
В настоящее время я создаю веб-приложение с использованием Zend framework 1.11.11 и Доктрины 2.2. Я много искал лучшие способы и хаки для оптимизации используемых фреймворков.
Во время поиска оптимизации Zend framework я наткнулся на этот пост: Оптимизация фреймворка Zend
Что в нем было интересно, так это то, что в нем упоминалось несколько методов оптимизации, которые возникли в результате использования самой платформы и не были описаны в самом руководстве, например как:
- отключите ViewRenderer и позаботьтесь о визуализации вида самостоятельно.
Теперь я ищу аналогичные методы, которые можно было бы применить к Доктрине 2, кроме упомянутых здесь, в руководстве.
Примечание
Я знаю, что многие упомянут профилирование запросов, кэширование и поиск бутылочного горлышка приложения, но это не то, что я ищу:) Я ищу практические усовершенствования, обнаруженные во время Учения 2 использование.
Спасибо;)
1 answers
Что ж, оптимизация и взлом Доктрины 2 не будут легкой задачей. Я могу только посоветовать вам следовать официальной "лучшей практике":
- Использовать кэш запросов
- Использовать кэш метаданных
- Предварительно сгенерировать прокси
- Избегайте прослушивателей (или объединяйте их по типу события (очистка, обновление), это позволит избежать времени поиска и цикла для подписанных событий)
- Используйте отложенную загрузку, когда это возможно
- Убедитесь, что ваши отношения или наследование не испорчены вверх
(Обратите внимание, что я не упомянул кэш результатов, который должен не быть способом оптимизации приложения)
С моей точки зрения, наиболее важной частью, которую мне пришлось оптимизировать, была не сама Доктрина (хотя для ядра есть оптимизация), а сгенерированный запрос, как всегда, я EXPLAIN
отредактировал запросы и оптимизированные индексы.
Доктрина 2 может потреблять много памяти, поэтому загрузка большого количества объектов одновременно может замедлить работу вашего приложения, вам может оказаться полезным известно о clear()
, detach()
, iterate()
методы.
Несмотря на то, что Доктрина 2 иногда может быть медленной, я в основном заметил, что мне удалось оптимизировать приложение где-то еще, в рамках Zend Framework или самого PHP.
Допустим, Доктрина 2 занимает 100 мс, где Zend Framework занимает 300 мс в общей сложности 450 мс (материалы ввода-вывода, внутренние функции PHP и т. Д.).
Если вы можете легко разделить на два время, затрачиваемое Zend Framework, оптимизация доктрины 2 для увеличения примерно на 10% не увеличится в частности, скорость вашего приложения. Подумай об этом дважды.
Вот несколько советов:
- Создайте свое собственное представление вместо использования помощников представления (избегайте поиска помощника)
- Кэшируйте свой объект Zend_Config (действительно большая нагрузка)
- По возможности избегайте маршрутов регулярных выражений (маршруты ZF являются большим узким местом)
- Используйте автозагрузчик карты классов вместо встроенного Zend_Loader_Autoloader
Предстоит выполнить множество оптимизаций, некоторые из которых оказывают реальное влияние, в то время как другие этого не делают.
Убедитесь, что вы можете найти их, профилируя свое приложение, простой и кроссплатформенный способ использования webgrind.