Ускоряем работу сайта с помощью серверного кеширования
Если простым языком, то серверное кеширование — это ряд технологий, которые позволяют «запоминать» один раз полученные или созданные данные, а затем многократно использовать их повторно, что способствует увеличению скорости отклика и снижает нагрузку на серверное оборудование.
Что можно кешировать?
Кешировать можно целые страницы, фрагменты страниц, результаты выборок из базы данных и результаты сложных вычислений.
«Страничное кэширование» — самое высокопроизводительное решение, но не подходит для сайтов, на которых есть персонализированный контент или есть взаимодействие с пользователем. Всем пользователям (или большим группам пользователей, например, незарегистрированным на сайте), в случае использования закешированных страниц, выдаётся одно и тоже содержание. В случае, если группа пользователей может взаимодействовать с сайтом, например, добавлять товары в корзину, то кэшировать страницы целиком уже не получится.
«Фрагментарное кеширование» — наиболее распространённый тип кэширования — сохраняются отдельные блоки страниц, которые одинаковы для большой группы пользователей. Из интересных разновидностей — многоуровневое кеширование (по типу матрёшки), когда кешируются вложенные друг в друга фрагменты, например, страница каталога товаров и карточки каждого отдельного товара.
«Кэширование результатов запросов к БД» и «Кэширование результатов вычислений» — кеширование данных, получаемых в результате сложных вычислений или выборок из БД, может очень серьёзно ускорить приложение. В частности, это активно используется задач по обработке графики и для формирования аналитических отчётов — сложные вычисления часто занимают достаточно продолжительное время и требуют большого количества ресурсов, поэтому проще производить обработку данных заранее в фоновом режиме и хранить до момента, пока они не потребуются.
Преимущества кеширования
- Снижение нагрузки на базу данных — единожды найденные результаты могут быть многократно использованы.
- Снижение нагрузки на сервер приложения — однажды созданная страница может потом много раз отдаваться пользователям.
- Повышение скорости обработки запросов пользователей — если для обработки запроса не требуется обращения к базе данных, вычислений и формирования страницы, а надо только забрать из хранилища кеша результат и отдать его пользователю, то ответ на такой запрос будет дан практически мгновенно.
Если резюмировать, то кеширование позволяет увеличить производительность и устойчивость к нагрузкам.
Как кешировать?
Кешировать можно разными способами, например, писать данные непосредственно на диск или в оперативную память (например, используя Memcached или Redis). Выбор способа зависит от того, какие именно данные кешируются, насколько интенсивно используется кеш и где находится «слабое звено» в производительности.
Тематические статьи
Ускоряем работу сайта при помощи кеширования на базе Memcached
Memcached — это хранилище «ключ => значение», использование которого очень эффективно для ускорения работы сайта или веб‑приложения.
Ускоряем работу сайта: используем Redis для кеширования и хранения данных
Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает работу с пятью типами данных: со строками, списками, хешами, обычными и сортируемыми множествами.
Ускоряем работу сайта за счёт оптимизации CSS
Время загрузки и отрисовки сайта в браузере можно заметно снизить, если воспользоваться следующими советами.
Быстродействие сайтов и веб‑приложений
Под быстродействием веб‑приложений понимается метрика, отражающая средний временной интервал от запроса пользователя до готовности страницы к взаимодействию в браузере.
Быстродействие зависит от серверного оборудования и настройки серверного ПО, а также от качества реализации бэкенд- и фронтенд‑частей сайта. Воспринимаемая пользователями скорость работы — это всегда сумма скоростей работы оборудования, бэкенда и фронтенда. В каждом из этих направлений есть набор хороших практик и оптимизаций, которые позволяют улучшить быстродействие.
Увеличиваем скорость работы сайта при помощи оптимизации JavaScript
Сайт может работать быстрее, если выполнены следующие рекомендации по оптимизации JS‑кода. Если же этого не сделать, то сайт будет недостаточно быстро отображаться на стороне клиента.
Ускоряем работу сайта: оптимизация HTML
Сайт может загружаться и отображаться быстрее, если выполнить следующие рекомендации по оптимизации HTML‑разметки, а без этого скорость загрузки и отрисовки будет ниже.
Выбор между CMS и фреймворком
С технической точки зрения любой функционал может быть реализован или на CMS, или на фреймворке, или реализован без использования каких‑либо платформ на чистом языке программирования.
Однако некоторые проекты проще сделать на CMS, некоторые — на фреймворке, а разработка без использования платформ редко бывает рациональным решением с точки зрения бизнеса. В большинстве случаев, выбор платформы стоит основывать на экономических критериях. В статье приведены основные критерии, которые позволят принять обоснованное решение по этому вопросу.
Рекомендации по выбору CMS и фреймворков
При выборе конкретной платформы для разработки часто возникают сложности. Бывает непросто принять взвешенное решение, в этом случае будет полезен следующий алгоритм выбора.
- При возможности найти готовые решения или продукты — используйте их. В большинстве случаев, оптимальная стратегия выбора: «чем проще — тем лучше».
- Если у вас есть команда разработчиков, то прислушайтесь к их мнению. Важны как возможности самой платформы, так и наличие у команды опыта работы именно с этим технологическим стеком.
- Заранее оцените «заточенность» выбранной платформы под ваши задачи. Не стоит на 100% доверять маркетинговым материалам вендора платформы.
Отказоустойчивость сайтов и веб‑приложений
Причин для сбоев в работе веб‑приложений немало — это и выход из строя серверного оборудования, и сбои программного обеспечения, и аварии на уровне дата‑центров.
При этом, действительно серьёзные проекты должны работать без перебоев даже в случае отказа отдельных подсистем. Практически всех рисков можно избежать или минимизировать их последствия при помощи грамотного проектирования как серверной инфраструктуры, так и архитектуры приложения.