Доктрина 2 экстремальная оптимизация


В настоящее время я создаю веб-приложение с использованием Zend framework 1.11.11 и Доктрины 2.2. Я много искал лучшие способы и хаки для оптимизации используемых фреймворков.

Во время поиска оптимизации Zend framework я наткнулся на этот пост: Оптимизация фреймворка Zend

Что в нем было интересно, так это то, что в нем упоминалось несколько методов оптимизации, которые возникли в результате использования самой платформы и не были описаны в самом руководстве, например как:

  • отключите ViewRenderer и позаботьтесь о визуализации вида самостоятельно.

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

Примечание

Я знаю, что многие упомянут профилирование запросов, кэширование и поиск бутылочного горлышка приложения, но это не то, что я ищу:) Я ищу практические усовершенствования, обнаруженные во время Учения 2 использование.

Спасибо;)

Author: Community, 2012-05-10

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.

 11
Author: Boris Guéry, 2012-05-10 12:04:09