CDN для Opencart самая необходимая вещь

Тема в разделе "OpenCart", создана пользователем boxerrr, 17 апр 2014.

  1. boxerrr

    boxerrr

    Регистрация:
    8 авг 2013
    Сообщения:
    105
    Симпатии:
    36
    Учитывая, что проблема быстродействия в opencart стоит достаточно остро и подобные темы уже неоднократно поднимались на этом форуме, решил внести свою лепту.

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

    Итак, что имеем на входе:

    1. Вес главной страницы 2.5мб

    2. Google PageSpeed Score of 76 (out of 100).

    проверять тут: https://developers.g...espeed/insights

    3. Page Speed Grade и YSlow Grade около 60%(что сильно не оч.)


    проверять тут: http://gtmetrix.com

    4. В магазине 2500 товаров и штук 14 категорий.

    5. Главная страница, да и все остальные грузятся долго.


    Магия (step-by-step):

    1. Деактивировать все неиспользуемые модули.

    2. Установить Smart Optimizer

    Если после установки появляется, алерт с сообщениями на страницах магазина, то просто отключаем debug mode в конфиге, на ходовые качества не влияет.

    3. Настраиваем Cloudflare, в архиве инструкция что делать.

    4. регистрируем аккаунт на cloudflare.com

    Меняем NSы и врубаем CDN. В настройках CDN, включаем минификацию JS и CSS, метод кеширования- simplified. Защиту лучше отключить, если она вам не нужна.


    Что получили(Та-дам):

    1. Вес Главной страницы 1.4мб

    2. Google PageSpeed Score of 92 (out of 100).

    3. Page Speed Grade: А (91%) и YSlow Grade: C (71%)

    4. Сайт летает (Даже после очистки всех кешей)


    Надеюсь это вам поможет.
    Если есть еще какие наработки по этому поводу то давайте делиться
     
    NinoZombie, ruscadet и Pelmen нравится это.
  2. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    Еще добавлю статью про кэш. Взято здесь http://opencartsoftware.blogspot.ru/2013/02/opencart.html

    Оптимизация OpenCart: Исправление работы кэша с количеством продуктов для категорий
    POSTED BY ROMAN | 0:08 LABELS: CACHE, GETTOTALPRODUCTS, OPENCART V.1.5+, OPTIMIZATION,UNSERIALIZE


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

    Управление кэшем происходит в файле ./system/library/cache.php, если обратить внимание на функцию get, то видно, что результат возвращается функцией phpunserialize когда файл кэша есть и null, когда его нет. Это значит, что если в кэше сохранён результат пустой выборки в одной из моделей, то при очередном запросе кэша будет возвращён ноль.

    Практически во всех моделях условие проверки кэша следующее:

    $product_data = $this->cache->get( ...

    if (!$product_data) { ...

    что в корне неверно, так как содержание кэша, например, строка s:1:"0";, может сообщить модулю об его "отсутствии" и будет выполнено повторное обращение к базе.

    Если создать новые категории, то это будет хорошо заметно. Товаров нет, каждый раз запрос из базы возвращает пустой результат и сохраняет его в кэше. В этом конкретном примере необходимо открыть файл ./catalog/model/catalog/product.php найти функцию getTotalProducts и в её теле заменить условие
    if (!$product_data) { ...
    на

    if ($product_data === null) { ...
    Теперь существование кэша будет правильно воспринято отдельно взятой функцией того или иного модуля. Исправления актуальны для всех версий OpenCart, включая последнюю v1.5.5.1.

    Update

    Работая с библиотекой кэша ./system/library/cache.php обратил внимание, что принцип выдачи кэшированной информации организован неверно. Модулю, запросившему кэш, может быть выдана устаревшая информация, если обратите внимание на код, то данные с файла считываются раньше проверки на время.

    Дабы не создавать отдельную статью, приведу решение здесь. Функцию get() необходимо заменить на код ниже.

    public function get($key) {
    $data = null;
    $files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');
    if ($files) {
    for ($n=0, $lenght = count($files); $n < $lenght; $n++) {
    $file = $files[$n];
    $time = substr(strrchr($file, '.'), 1);
    if ($time < time()) {
    if (file_exists($file)) { unlink($file); }
    } elseif (!$n) { $cache = file_get_contents($file); $data = unserialize($cache);
    } } } return $data; }

    Кстати, обновлённная функция работает немного быстрее, т.к. используется цикл for next (призываю использовать в PHP вместо foreach везде) и unserialize выполняется не по умолчанию, а только если кэш не устарел.
     
  3. avtostopshik

    avtostopshik

    Регистрация:
    16 май 2014
    Сообщения:
    168
    Симпатии:
    13
    Непонятно с четвёртым шагом- где эти NSы менять и врубать CDN ?
     
  4. Pelmen

    Pelmen Guest

    Меняются в хостинге или у регистратора домена (если они у вас в разных местах)
     
  5. Podmasteri

    Podmasteri

    Регистрация:
    27 дек 2012
    Сообщения:
    214
    Симпатии:
    34
    хотел спросить про cloudflare.com регим и используем бесплатный акаунт или надо брать платный ?
     
  6. zamalatb

    zamalatb

    Регистрация:
    29 апр 2014
    Сообщения:
    113
    Симпатии:
    32
    Не советую пользоваться бесплатным Cloudflare,m в итого можете получить большой процент заблокированного траффика с России, сам вначале установил, но некоторые пользователи стали жаловаться что сайт у них заблокирован, так что взвесьте все плюсы и минусы прежде чем такое устанавливать.
    Вот пруф: http://habrahabr.ru/post/218957/
     
    NinoZombie нравится это.
  7. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    CDN берется с сайтов типа Google. Например, чтобы подключить jQuery, добавьте в хидере
    Код:
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    (и не забудьте удалить подключение jquery с вашего сайта). Библиотека jQuery есть в кэше большинства провайдеров и конечных устройств, поэтому загрузка будет (если вообще будет, файл же уже в кэше может быть) намного быстрее.

    Чтобы найти конкретно то, что вам нужно, пользуйтесь поиском.
     
  8. arber

    arber

    Регистрация:
    9 фев 2014
    Сообщения:
    21
    Симпатии:
    1
    Попробовал - в итоге скорость загрузки упала как и вобще PageSpeed Insights.....