Последняя редакция: 2018-05-16 20:51:09

Как ускорить загрузку страниц сайта интернет-магазина?

Так как же повысить быстродействие сайта интернет-магазина? Для решения этих задач применют три основных подхода, в зависимости от того, где находится узкое место в скорости загрузки страниц сайта:

  • кэширование;

  • параллельная обработка данных;

  • разделение обработки данных во времени.

Кэширование.

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

  • выборка данных из базы данных, выполняемая системой управления базой данных (СУБД) в соответствие с поисковым запросом;

  • промежуточные вычисления и проверки данных, полученных из базы данных;

  • преобразование результатов промежуточных вычислений в HTML-код, преобразуемый браузером в видимый результат;

  • передача HTML-кода и связанного с ним (CSS, JS) браузеру, для формирования конечного результата, зрительно воспринимаемого пользователем;

  • преобразование HTML кода браузером в видимый пользователем результат.

Кэширование результатов работы системы управления базами данны (СУБД).

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

В промежуточной обработке данных применительно к платформам интернет-магазинов, написанных на PHP (наиболее распространенные) могут кэшироваться:

  • программный код;

  • результаты обработки этим кодом данных, полученных от СУБД.

Кэширование кода.

Общая схема работы PHP скриптов на сайте следующая:

  • загрузка исходного кода скриптов из файлов в память сервера;

  • преобразование исходного кода в исполняемый байт-код (его еще называют опкодом от английского opcode);

  • исполнение байт-кода.

Кэшированием скриптов можно добиться, чтобы первые два этапа выполнялись только один раз для одного пользователя, а для всех остальных будет использоваться однажды загруженный и преобразованный PHP код. Для этих целей применяются различные средства. Для PHP это APC, eAccelerator и т. п. (боле подробно смотрите в разделе «Выбор хостинга»).

Кэширование результатов работы кода платформы интернет-магазина.

Такими результатами являются:

  • обработка исходных данных, полученных от СУБД, алгоритмами бизнес-логики платформы интернет-магазина;

  • получение HTML кода страниц сайта, которые интернет-браузеры преобразуют в видимый пользователем результат.

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



Для кэширования этих данных могут использоваться:

  • запись на диск в специальные файлы (файловое или дисковое кэширование);

  • запись в специальные хранилища данных в оперативной памяти (примером такого программного обеспечения является memcached сервер).

Кэширование браузеров.

Наконец, имеется возможность кэширования HTML-кода, CSS, JavaScript уже на стороне клиента, браузером пользователя. Это сокращает затраты времени на передачу данных по сети от сервера клиенту потому, что браузер не запрашивает с сервера те файлы, которые есть у него в кэше. Управление кэшированием браузера осуществляется настройками web-сервера и содержанием заголовков ответов сервера клиенту.

Примечание к кэшированию.

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

Параллельная обработка данных.

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

  • на уровне СУБД;

  • на уровне интерпретатора скриптов платформы;

  • на физическом уровне.

Параллельная обрабокта на уровне СУБД.

Здесь применяются 2 основных метода разделения обязанностей: репликация и шардинг.

Репликация

Репликация - это полное копирование данных между несколькими идентичными СУБД, размещенными на разных серверах (хостингах), и распределение между ними обязанностей по выполнению запросов. Обычно это разделение ответственности по типам запросов: запросы на чтение передаются одному серверу, запросы на добавление или обновление данных — другому.

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

При этом во всех СУБД настроен механизм обмена изменениями БД для синхронизации всех копий.

Шардинг.

Шардинг, в отличие от репликации, это распределение фрагментов единой базы данных между серверами и СУБД (полного копирования нет). То есть можно сказать, что при шардинге каждый сервер специализируется на обработке свой части данных.

Разделение данных может проводиться по следующим схемам:

  • фрагменты однотипных данных (например, данных о товарах) распределяются по нескольким серверам и СУБД (например, каждый сервер хранит товары определенной категории), поисковый запрос на выборку товаров запускается одновременно на все сервера, а результаты поиска всех серверов объединяются управляющим сервером в единый результат и отдаются на обработку;

  • на разных серверах размещаются данные разных типов (сервер товаров, сервер клиентов, сервер заказов и т.п.), единый запрос на выборку сводных данных расщепляется на тематические, профильные подзапросы и отправляется соответствующим серверам на исполненние, а полученные от них частные результаты сводятся в один и отдаются на дальнешую обработку.

Примечание к параллельной обработке

Для максимально эффективного использования механизмов шардинга лучше всего использовать специализированные СУБД. Из числа наиболее распространенных систем на сегодняшний момент соответствующим фукционалом обладает прежде всего MongoDB. Но к сожалению большинство платформ интернет-магазинов пока традиционно ориентированы на реляционные СУБД вроде MySQL. Так что данный способ повышения быстродействия интернет-магазина является скорее экзотикой.

Есть еще одина форма реализации шардинга, которая реализуется на уровне операционной системы и СУБД, а именно разделение большого файла данных на части и распределение этих частей на разных хранилищах. Такая форма используется в том числе и для реляционных СУБД. Например, имеется решение для MySQL, но оно распространяется производителем на платной основе.

Реализовать механизм шардинга на реляционных СУБД, конечно, можно. Для этого разрабатывается диспетчер запросов с соответствующими функциями. Такие решения используются, но из-за довольно высокой затратности и низкой универсальности такие решения делаются только "под заказ" и в коробочных вариантах поставки платформ интернет-магазинов не встречаются.

Разделение обработки и передачи данных во времени.

Разделение во времени формирования и передачи HTML-кода

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

Метод разеделения обарботки данных во времени основан на возможности браузеров динамически добавлять или удалять из загруженного HTML кода страницы и отображать результат преобразования пользователю. Причем, добавляемые фрагменты могут как генерироваться в браузере, так и запрашиваться с сервера. Иными словами, можно сделать так, чтобы невидимый контент генерировался и передавался браузеру только в том случае, если пользователь выразит желание его посмотреть (кликнув на элемент на экране, который должен запустить процесс отображения скрытого контента). Существует возможность строить даже такие веб-приложения, в которых первоначально в браузер загружается практически пустая страница, а потом видимый результат запрашивается и добавляется частьями с помощью программ, написанных на языке JavaScript и исполняемых в браузере (такую возможность на практике очень часто используют при разработке веб-систем "для внутреннего пользования").

Загрузку контента можно делать не только по запросу клиента но и с привязкой ко времени. Кроме того, запросы на получение контента в браузерах выполняются в основном ассинхронно, не зависимо друг от друга. То есть, существует возможность "подкадчивать" части "второстепенного" контента в фоновом режиме, пока пользователь воспринимает уже поступивший контент. Такое разделение загрузки контента во времени позволяет сократить время ожидания пользователя на получение доступа к нужному ему контенту за счет дробления общего времени ожидания на несколько малых отрезков и исключения части отрезков в случае, если часть контента останется невостребованной.

Параллельная загрузка вспомогательных данных.

Помимо HTML кода в формировании внешнего вида страницы сайта интернет-магазина участвую файлы:

  • мультимедиа (картинки, аудиво, видео);

  • каскадных таблиц стилей (CSS);

  • приложений на языках программирования, исполняемых браузерами (таких, как JavaScript).

При этом посетителю безразлично откуда взят контент, который он видит на экране своего монитора, а фрагменты данных для его формирования можно получать из разных источников. Статические (неизменяемые) данные (мультимедиа, CSS, Javascript) можно загружать с одного или нескольких серверов, ( впрочем, так же как и HTML-код). Это позволяет распределить исполнение функции подготовки и передачи данных браузеру пользователя между несколькими физическими вычислительными системами, тем самым объединив их вычислительные возможности для достижения одной цели предоставления браузеру пользователя всех необходимых данные в соответствие с его запросом в кратчайшие сроки.

Простейшим примером параллельной загрузки данных страницы сайта интернет-магазина является размещение медиаконтента (файлов изображений товара) в так называемых сетях доставки контента (CDN - Content Delivery Network). Суть заключается в том, что размещенные в них данные копируются на сервера такой сети, распределенные по всему миру. Когда сайт вашего интернет-магазина выдает браузеру клиента ссылку на получение картинки, то данные передаются с ближайшего к клиенту сервера из такой сети. В итоге, с одной стороны, освобождаются ресурсы хоста интернет-магазина, с другой — сокращаются временные затраты на доставку браузеру наиболее крупноразмерного контента за счет сокращения маршрута транспортировки. CDN применим и при распространении CSS и Javascript файлов.

Примечание к разделению обработки и передачи данных во времени.

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

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

Данный вариант требует привлечения квалифицированной рабочей силы для модификации программного кода.

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

Применение данного способа сильно осложнено в случае использования программного обеспечения платформы интернет-магазина по схеме SaaS.

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

Общие примечания

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

Для максимального использования потенциала методов ускорения работы сайта из разделов кэширования и параллельной обработки нужно иметь почти неограниченный доступ к настройкам СУБД, web-сервера, интерпретатора языка и др. настройкам хоста, то есть его администрированию, а, значит, нужно особое внимание уделить выбору хостинга. Для правильного выбора хостинга почитайте статью "Как выбрать хостинг для сайта интернет-магазина?". По меньшей мере стоит убедиться, что в базовый набор услуг, предлагаемых хостпровайдером включены необходимые сервисы (некоторые провайдеры например не предлагают в базовой комплектации memcached и даже отказываются его устанавливать за дополнительные деньги).

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

Комментарии (0)







Разрешённые теги: <b><i><strong><em><s><ul><li><ol>Добавить новый комментарий:




Какова главная причина отсутствия заказов в вашем интернет-магазине по вашему мнению?

Всего голосов: 71