Предварительная генерация представления ресурса - PullRequest
3 голосов
/ 08 сентября 2010

Допущения, которые у меня есть, -

  • Представления имеют определение с последней датой изменения.Например, сценарий, который генерирует JSON-представление ресурса, имеет место, когда скрипт был последний раз изменен.
  • Постоянное хранилище ресурса не имеет никаких ограничений хранения

Теперь ситуация такова, что яиметь ресурсы, для которых их представления могут быть либо предварительно сгенерированными , либо сгенерированными на лету;где предварительно сгенерированный относится к text / html или application / atom + xml , генерируемым при изменении ресурса (может выполняться асинхронно), и сгенерированный на лету относится, например, к сценарию JSP / PHP, генерирующему представление при запросе.

Меня смущает то, насколько прирост производительности будет перед генерацией против генерируется на лету + кеширование ?Каков ваш опыт / мнение?

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Вы спрашиваете о производительности, но не указываете, что должно работать, поэтому я предполагаю, что метрика - это «время отклика».

Два подхода - это просто варианты друг друга.Предварительное поколение - это просто другой способ кэширования.Таким образом, практически, единственное отличие состоит в том, что один является «ленивым», тогда как другой - нет.

Таким образом, разница в задержки будет равна нулю , когда все ресурсы будут кэшированы (т изменить).Но разница в производительности варьируется в зависимости от нескольких параметров:

  • Время, необходимое для создания элемента
  • Количество изменений каждого элемента
  • Как часто каждый элементк нему обращаются

Переломным моментом является то, что если элемент изменяется реже, чем доступ к нему .

Но есть много других факторов, которые следует учитывать:

  • Схема предварительной генерации гораздо лучше масштабируется , поскольку им не требуется дополнительный ЦП , если количество запросов увеличивается
  • Схема предварительной генерации более отказоустойчива , поскольку нет базы данных, участвующей в критическом пути вашего приложения
  • Схему предварительной генерации может быть трудноделать, если одно изменение в ресурсе X (например, оно удалено) вызывает изменение тысяч других ресурсов (например, если они все ссылаются на X).Это увеличило бы вероятность изменения ресурса чаще, чем доступ.
0 голосов
/ 08 сентября 2010

Прирост производительности пропорционален усилиям, необходимым для генерации;так что если для построения представления требуется много ресурсов (и, вероятно, времени), то кэширование является хорошей идеей.

Итак, первое, что вам нужно сделать, это измерить процесс, который создает представления, и определить, гдехиты производительности происходят.

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