Стратегии кэширования в Интернете?[закрыто]

StackOverflow https://stackoverflow.com/questions/115126

  •  02-07-2019
  •  | 
  •  

Вопрос

Какие проблемы, процессы и вопросы вы принимаете во внимание при принятии решения о том, когда и как кэшировать.Всегда ли это беспроигрышная ситуация?

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

Это было полезно?

Решение

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

  • Всем ли пользователям необходимо видеть кэшированный контент?
  • Как часто меняется каждый бит контента?
  • Могу ли я кэшировать всю страницу?
  • Нужен ли мне ручной способ очистки кеша?
  • Могу ли я использовать единый механизм кэширования для всего сайта или мне нужно несколько решений?
  • Какие последствия возникают, если информация каким-то образом устарела?

Другие советы

Я бы рассмотрел каждую функцию вашего веб-сайта/приложения и выбрал каждую функцию:

  • Должно ли оно быть кэшировано?
  • Как долго он должен храниться в кэше?
  • Когда следует удалять кэш?

Лично я бы выступил против кэширования целых страниц в пользу кэширования разделов сайта/приложения.

Во-первых, если ваш код оптимизирован, как вы сказали, вы увидите заметный выигрыш в производительности только тогда, когда сайт загружен большим количеством запросов.

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

Что касается знания, когда ты собираешься нуждаться При кэшировании учтите, что даже современные веб-серверы низкого уровня могут обрабатывать сотни запросов в секунду, поэтому, если вы не ожидаете приличного объема трафика, кэширование, вероятно, можно просто пропустить.

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

Что касается сценария, когда это нет целесообразно кэшировать или когда кэширование становится затруднительным...Если вы попытаетесь кэшировать динамическую страницу, которая, скажем, отображает текущую дату и время, вы постоянно будете видеть старую дату/время, если только вы не углубитесь в свою стратегию кэширования.Так что есть над чем подумать.

Какой язык вы используете?С ASP у вас есть очень простое кэширование: нужно только добавить тег свойства к методу, и значение кэшируется в зависимости от времени.

Если вам нужен больший контроль над кешем, вы можете использовать какую-нибудь популярную систему, например MemCached, и контролировать время или событие.

Яху например "версии" их JavaScript, поэтому ваш браузер загружает код-1.2.3.js и когда появляется новая версия, они ссылаются на эту версию.Сделав это, они смогут сделать свой Javascript-код кэшируемым на очень-очень долгое время.

Что касается общего ответа, я думаю, это зависит от ваших данных, от того, как часто они меняются.Например, изображения не меняются очень часто, а html-страницы — меняются.Страница «О нас» меняется не слишком часто, но раздел новостей меняется.

Вы можете кэшировать по времени.Это полезно для данных, которые быстро меняются.Вы можете установить время на 30 секунд или 1 минуту.Конечно, для этого потребуется некоторый трафик.Чем больше у вас трафика, тем больше вы можете играть со временем, потому что, если у вас 1 посещение каждый час, это посещение будет заполнять кеш и не использовать его...

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

Вы можете кэшировать статический контент, который, как вы знаете, не будет часто меняться.Если у вас есть 10 лучших данных за день, которые обновляются каждый день, вы можете хранить все в кеше и обновлять каждый день.

Там, где это возможно, обратите внимание на кэширование памяти всего объекта.В ASPNET это встроенная функция, с помощью которой вы можете просто разместить объекты бизнес-логики в приложении IIS и получить к ним доступ оттуда.

Это означает, что вы можете хранить все необходимое для создания страницы в памяти (постоянная запись в базу данных) и генерировать страницу без необходимости. ЛЮБОЙ база данных IO.

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

Другие методы включают локализованное кэширование выходных данных, при котором вы захватываете выходные данные перед отправкой и сохраняете их в файл.Это отлично подходит для статических разделов (например, навигации по определенным страницам или текста) и включает их по запросу.Большинство реализаций очищают кэшированные объекты таким образом, когда происходит запись или через определенный период времени.

Тогда есть наименее «точный»:кэширование всей страницы.Это самый эффективный вариант, но он совершенно бесполезен, если у вас нет очень простых страниц.

Какое кэширование?Кэширование на стороне сервера?Кэширование на стороне клиента?

Кэширование на стороне клиента не представляет сложности с некоторыми вещами, такими как статический HTML, SWF-файлы и изображения.Выясните, как часто активы могут меняться, и настройте заголовки «Expires» соответствующим образом.(2 дня?2 недели?2 месяца?)

Динамические страницы по определению немного сложнее кэшировать.Были проведены некоторые исследования по кэшированию определенных фрагментов с использованием Javascript (и переходу на IFrames, если JS недоступен). Однако это может быть немного сложнее адаптировать к существующему сайту.

Кэширование на уровне БД и приложений может работать, а может и не работать, в зависимости от вашей ситуации.Это действительно зависит от того, где находятся ваши узкие места.Выяснение того, где ваше приложение тратит больше всего времени на рендеринг страниц, вероятно, является приоритетом 1, а затем вы можете начать искать, где и как кэшировать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top