Учитывая, что проблема быстродействия в 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. Сайт летает (Даже после очистки всех кешей) Надеюсь это вам поможет. Если есть еще какие наработки по этому поводу то давайте делиться
Еще добавлю статью про кэш. Взято здесь 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 выполняется не по умолчанию, а только если кэш не устарел.
Не советую пользоваться бесплатным Cloudflare,m в итого можете получить большой процент заблокированного траффика с России, сам вначале установил, но некоторые пользователи стали жаловаться что сайт у них заблокирован, так что взвесьте все плюсы и минусы прежде чем такое устанавливать. Вот пруф: http://habrahabr.ru/post/218957/
CDN берется с сайтов типа Google. Например, чтобы подключить jQuery, добавьте в хидере Код: <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> (и не забудьте удалить подключение jquery с вашего сайта). Библиотека jQuery есть в кэше большинства провайдеров и конечных устройств, поэтому загрузка будет (если вообще будет, файл же уже в кэше может быть) намного быстрее. Чтобы найти конкретно то, что вам нужно, пользуйтесь поиском.