Кэширование и просмотры страниц с помощью Varnish/ESI и Zend Framework

У меня есть несколько сценариев, которые мне в конечном итоге нужно будет рассмотреть через несколько месяцев. Просто задаю вопрос, чтобы тем временем я мог обдумать обсуждение.

Я использую Zend Framework для своего стека приложений. Я использую APC для кэширования сервера (вместо memcache, поскольку я не верю, что memcache дает мне какие-либо преимущества, даже если мое приложение распространяется).

Мое приложение было создано для работы без JavaScript, а затем для поддержки JavaScript я разбиваю страницу и отображаю версию, дружественную к JavaScript.

Если вы проанализируете простую страницу, может быть, 80% ее основных функций, которые можно кэшировать для каждого пользователя. Затем 20% настраивается для этого пользователя. Например, я могу захотеть отобразить

  • Последние 5 просмотренных товаров
  • Избранные предметы

Эти два «виджета» будут специфическими для каждого пользователя. Я рассматривал возможность использования ESI для этих компонентов, но потом понял, что наиболее трудоемким аспектом любого/моего приложения Zend Framework является процесс начальной загрузки и диспетчеризации. Итак, если мое приложение в настоящее время занимает 80 мс без кэширования. Например, 90% относительного времени тратится на загрузку и хуки плагинов, если бы я использовал ESI для загрузки этих двух «виджетов», то я бы эффективно добавлял нагрузку на каждую страницу? Так как я буду инициировать еще один запрос 80 мс для каждой кэшированной страницы.

В этом случае вы бы посоветовали просто загрузить настраиваемые виджеты/фрагменты через JavaScript, который можно получить после загрузки исходной страницы. Явным преимуществом этого является то, что всегда есть только один запрос, который кэшируется, а затем все, что настроено, извлекается в одном запросе после того, как начальная страница (которая кэшируется) была обслужена.

Если я ищу максимальную производительность, это кажется лучшим решением?


person Layke    schedule 29.11.2011    source источник


Ответы (2)


вы можете создать второе простое приложение, которое читает из кеша на основе вызова ajax и загружается только в том случае, если информация не была кэширована. затем ответ может быть добавлен в кеш, чтобы дальнейшие вызовы не загружали ваш проект zend. это обычная процедура, но она также требует программирования инвалидации кэша. вы уже используете APC, который подходит для этого. очевидно, это не сработает для последних 5 просмотренных или аналогичного контента.

person user1743741    schedule 07.11.2012

Varnish с ESI не поможет вам сократить время загрузки страницы, зная, что 80 мс уже хорошо (человек не будет иметь никакой разницы между 1 и 500 мс...)

Это поможет вам избежать нагрузки на сервер при больших нагрузках, и это будет работать как с ESI, так и с AJAX.

Если вашим приоритетом является максимально быстрое отображение главной страницы, AJAX — лучший способ, поскольку ESI будет ждать ответа на подзапрос, прежде чем отправлять всю страницу.

Если вы все еще хотите, чтобы ваше приложение было несовместимо с JS, вы можете отфильтровать пользовательских агентов для использования JS, если это возможно, и ESI, если нет, но этот вид трюка легко загрязнять...

person Gauthier Delacroix    schedule 01.12.2011