Jump to content
Sign in to follow this  
halfhope

Оптимизация функций getProductAttributes и getProductOptions в модели catalog/product

Recommended Posts

Недавно обратился клиент (OcStore 1.5.5.1.2.) с просьбой посмотреть и узнать где именно тормоза на сайте. Так как, на сайте под завязку используются опции и аттрибуты, я стал грешить на них еще до проверки, проверка xhprof дала понять, что я не ошибался. Одним кэшированием тут не отделаться, так как данные магазина постоянно обновляются и механизм инвалидации кэша далек от идеала.

 

Было принято решение оптимизировать функции получения списка аттрибутов и опций. Что именно сделано: Убраны дополнительные подзапросы из цикла обработки аттрибутов и опций, так как все необходимые данные можно получить в одном запросе. Так же используются PHP указатели, что позволит обработать все данные в одном цикле. Все это позволит получить все необходимые данные за один запрос и быстро из обработать. 

 

В данном частном случае производительность увеличилась почти в 30 раз (очень много опций, значений опций и аттрибутов почти у каждого товара). 


public function getProductAttributes($product_id) {
	$product_attribute_group_data = array();

	$product_attribute_group_query = $this->db->query("SELECT a.attribute_id, ad.name as attribute_name, pa.text, ag.attribute_group_id, agd.name as attribute_group_name FROM " . DB_PREFIX . "product_attribute pa
	LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id)
	LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id)
	LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id)
	LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id)
	WHERE pa.product_id = " . (int)$product_id . "
		AND ad.language_id = agd.language_id
		AND pa.language_id = agd.language_id
		AND agd.language_id = " . (int)$this->config->get('config_language_id') . "
	ORDER BY ag.sort_order, agd.name, a.sort_order, ad.name");

	$product_attribute_data = array();

	foreach ($product_attribute_group_query->rows as $product_attribute) {
		$product_attribute_data[$product_attribute['attribute_id']][] = array(
			'attribute_id' => $product_attribute['attribute_id'],
			'name'         => $product_attribute['attribute_name'],
			'text'         => $product_attribute['text']
		);

		$product_attribute_group_data[$product_attribute['attribute_group_id']] = array(
			'attribute_group_id' => $product_attribute['attribute_group_id'],
			'name'               => $product_attribute['attribute_group_name'],
		);

		$product_attribute_group_data[$product_attribute['attribute_group_id']]['attribute'] =& $product_attribute_data[$product_attribute['attribute_id']];

	}

	return $product_attribute_group_data;
}

public function getProductOptions($product_id) {
	$product_option_data = array();
    $product_option_query = $this->db->query("SELECT pov.product_option_value_id, pov.option_value_id, ovd.name as product_option_value_name, od.name as option_name, ov.image, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix, pov.product_option_id, pov.option_id, o.type, po.required
        FROM " . DB_PREFIX . "product_option_value pov
        LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id)
        LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id)
        LEFT JOIN " . DB_PREFIX . "product_option po ON (pov.product_option_id = po.product_option_id)
        LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id)
        LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id)
        WHERE po.product_id = " . (int)$product_id . "
            AND od.language_id = " . (int)$this->config->get('config_language_id') . "
        ORDER BY o.sort_order, ov.sort_order");

    $product_option_value_data = array();

    foreach ($product_option_query->rows as $product_option) {

    	if (in_array($product_option['type'], array('select','radio','checkbox','image'))) {

            $product_option_value_data[$product_option['product_option_id']][] = array(
                'product_option_value_id' => $product_option['product_option_value_id'],
                'option_value_id'         => $product_option['option_value_id'],
                'name'                    => $product_option['product_option_value_name'],
                'image'                   => $product_option['image'],
                'quantity'                => $product_option['quantity'],
                'subtract'                => $product_option['subtract'],
                'price'                   => $product_option['price'],
                'price_prefix'            => $product_option['price_prefix'],
                'points'                  => $product_option['points'],
                'points_prefix'           => $product_option['points_prefix'],
                'weight'                  => $product_option['weight'],
                'weight_prefix'           => $product_option['weight_prefix']
            );

            $product_option_data[$product_option['option_id']] = array(
				'product_option_id'    => $product_option['product_option_id'],
				'option_id'            => $product_option['option_id'],
				'name'                 => $product_option['option_name'],
				'type'                 => $product_option['type'],
				'required'             => $product_option['required']
			);

			$product_option_data[$product_option['option_id']]['option_value'] =& $product_option_value_data[$product_option['product_option_id']];

    	}else{
    		$product_option_data[$product_option['option_id']] = array(
				'product_option_id' => $product_option['product_option_id'],
				'option_id'         => $product_option['option_id'],
				'name'              => $product_option['option_name'],
				'type'              => $product_option['type'],
				'option_value'      => $product_option['option_value'],
				'required'          => $product_option['required']
			);
    	}
    }

	return $product_option_data;
}

 

По аналогии поступил с админкой (только опции) и с модулем CSV Product Export. Будьте внимательны при использовании этого кода, он изменен, а значит и vqmod модификации, которые работают с этим участком кода могут работать не так как ожидается. 

Edited by halfhope
  • +1 9

Share this post


Link to post
Share on other sites

Спасибо. Как раз в тему, попробую сейчас на реальном магазине с 20К товарами

Share this post


Link to post
Share on other sites

UPD: Накосячил слегка с аттрибутами:


public function getProductAttributes($product_id) {
	$product_attribute_group_data = array();

	$product_attribute_group_query = $this->db->query("SELECT a.attribute_id, ad.name as attribute_name, pa.text, ag.attribute_group_id, agd.name as attribute_group_name FROM " . DB_PREFIX . "product_attribute pa
	LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id)
	LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id)
	LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id)
	LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id)
	WHERE pa.product_id = " . (int)$product_id . "
		AND ad.language_id = agd.language_id
		AND pa.language_id = agd.language_id
		AND agd.language_id = " . (int)$this->config->get('config_language_id') . "
	ORDER BY ag.sort_order, agd.name, a.sort_order, ad.name");

	$product_attribute_data = array();

	foreach ($product_attribute_group_query->rows as $product_attribute) {
		$product_attribute_data[$product_attribute['attribute_group_id']][$product_attribute['attribute_id']] = array(
			'attribute_id' => $product_attribute['attribute_id'],
			'name'         => $product_attribute['attribute_name'],
			'text'         => $product_attribute['text']
		);

		$product_attribute_group_data[$product_attribute['attribute_group_id']] = array(
			'attribute_group_id' => $product_attribute['attribute_group_id'],
			'name'               => $product_attribute['attribute_group_name'],
		);

		$product_attribute_group_data[$product_attribute['attribute_group_id']]['attribute'] =& $product_attribute_data[$product_attribute['attribute_group_id']];

	}

	return $product_attribute_group_data;
}
Edited by halfhope
  • +1 2

Share this post


Link to post
Share on other sites

и моё благодарю)

  • +1 1

Share this post


Link to post
Share on other sites

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

Товаров 1500 штук.

Таблица с атрибутами 28000 шт.

М.б. где индексы расставить дополнительные?

 

id     select_type     table     partitions     type     possible_keys     key     key_len     ref     rows     filtered     Extra     
1     SIMPLE     agd     NULL    ALL     PRIMARY     NULL    NULL    NULL    20     10.00     Using where; Using temporary; Using filesort
1     SIMPLE     ag     NULL    eq_ref     PRIMARY     PRIMARY     4     shop.agd.attribute_group_id     1     100.00     NULL
1     SIMPLE     a     NULL    ref     PRIMARY,attribute_group_id     attribute_group_id     4     shop.agd.attribute_group_id     3     100.00     Using where
1     SIMPLE     ad     NULL    eq_ref     PRIMARY,index2attr_lang     PRIMARY     8     shop.a.attribute_id,const     1     100.00     NULL
1     SIMPLE     pa     NULL    eq_ref     PRIMARY,attribute_id,language_id     PRIMARY     12     const,shop.a.attribute_id,const     1     100.00     NULL

 

 

Структура таблицы:

Table Create Table
attribute CREATE TABLE `attribute` (
 `attribute_id` int(11) NOT NULL AUTO_INCREMENT,
 `attribute_group_id` int(11) NOT NULL,
 `sort_order` int(3) NOT NULL,
 PRIMARY KEY (`attribute_id`),
 KEY `attribute_group_id` (`attribute_group_id`),
 KEY `sort_order` (`sort_order`)
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8
attribute_description CREATE TABLE `attribute_description` (
 `attribute_id` int(11) NOT NULL,
 `language_id` int(11) NOT NULL,
 `name` varchar(64) NOT NULL,
 PRIMARY KEY (`attribute_id`,`language_id`),
 KEY `name` (`name`),
 KEY `index2attr_lang` (`language_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
attribute_group CREATE TABLE `attribute_group` (
 `attribute_group_id` int(11) NOT NULL AUTO_INCREMENT,
 `sort_order` int(3) NOT NULL,
 PRIMARY KEY (`attribute_group_id`),
 KEY `sort_order` (`sort_order`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
attribute_group_description CREATE TABLE `attribute_group_description` (
 `attribute_group_id` int(11) NOT NULL,
 `language_id` int(11) NOT NULL,
 `name` varchar(64) NOT NULL,
 PRIMARY KEY (`attribute_group_id`,`language_id`),
 KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
product_attribute CREATE TABLE `product_attribute` (
 `product_id` int(11) NOT NULL,
 `attribute_id` int(11) NOT NULL,
 `language_id` int(11) NOT NULL,
 `text` text NOT NULL,
 PRIMARY KEY (`product_id`,`attribute_id`,`language_id`),
 KEY `attribute_id` (`attribute_id`),
 KEY `language_id` (`language_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

 

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By SirGrey
      Драйвер кеширования Redis для Opencart 1.5.x - 2.x
       
      Redis — это высокопроизводительное распределенное хранилище данных.
      Высокая скорость работы обеспечивается за счет хранения данных в оперативной памяти, которые периодически сохраняются на диск.
       
      Для работы модуля необходим включенный Redis на сервере и библиотека  php-redis
       
      Инструкция по установке
       
      Opencart 2.x - 3.x  Стандартный установщик модулей.
      Opencart 1.5.x Распаковать архив в корень сайта.
       
       
      Добавить константы в файлы config.php и admin->config.php
      // Redis define('CACHE_HOSTNAME', '127.0.0.1'); define('CACHE_PORT', '6379'); define('CACHE_PREFIX', 'redis_'); define('CACHE_PASSWORD', '');  
      Reds  для Opencart 3.x
       
      В OpenCart 3 драйвер Redis уже присутствует.
      В модуле заменены устаревшие функции и добавлена авторизация.
       
      Файл system->config->default.php
       
      Изменить
       
      $_['cache_engine'] = 'redis';  
      На 
       
      $_['cache_engine'] = 'redisp';  
       
      Reds  для Opencart 2.2 - 2.3
       
      Файл system->config->default.php
      Изменить
      $_['cache_type'] На 
      $_['cache_type'] = 'redis';
      Reds  для Opencart 2.0.x - 2.1.x
       
      Файл index.php и admin->index.php
       
      изменить
      $cache = new Cache('file');  
      На
       
      $cache = new Cache('redis');
      Reds  для  Opencart 1.5.x
       
      файл index.php и admin->index.php изменить
      $cache = new Cache('file');  
      На
       
      $cache = new redis_cache(); После 
      require_once(DIR_SYSTEM . 'library/cart.php');  Добавить
      require_once(DIR_SYSTEM . 'library/redis_cache.php'); Если вы используете VQMod добавить
       
      require_once(VQMod::modCheck(DIR_SYSTEM . 'library/redis_cache.php'));  
       
    • By SirGrey
      300.00 руб
      Скачать/Купить дополнение


      Кеширование Redis
      Драйвер кеширования Redis для Opencart 1.5.x - 2.x
       
      Redis — это высокопроизводительное распределенное хранилище данных.
      Высокая скорость работы обеспечивается за счет хранения данных в оперативной памяти, которые периодически сохраняются на диск.
       
      Для работы модуля необходим включенный Redis на сервере и библиотека  php-redis
       
      Инструкция по установке
       
      Opencart 2.x - 3.x  Стандартный установщик модулей.
      Opencart 1.5.x Распаковать архив в корень сайта.
       
       
      Добавить константы в файлы config.php и admin->config.php
      // Redis define('CACHE_HOSTNAME', '127.0.0.1'); define('CACHE_PORT', '6379'); define('CACHE_PREFIX', 'redis_'); define('CACHE_PASSWORD', '');  
      Reds  для Opencart 3.x
       
      В OpenCart 3 драйвер Redis уже присутствует.
      В модуле заменены устаревшие функции и добавлена авторизация.
       
      Файл system->config->default.php
       
      Изменить
       
      $_['cache_engine'] = 'redis';  
      На 
       
      $_['cache_engine'] = 'redisp';  
       
      Reds  для Opencart 2.2 - 2.3
       
      Файл system->config->default.php
      Изменить
      $_['cache_type'] На 
      $_['cache_type'] = 'redis';
      Reds  для Opencart 2.0.x - 2.1.x
       
      Файл index.php и admin->index.php
       
      изменить
      $cache = new Cache('file');  
      На
       
      $cache = new Cache('redis');
      Reds  для  Opencart 1.5.x
       
      файл index.php и admin->index.php изменить
      $cache = new Cache('file');  
      На
       
      $cache = new redis_cache(); После 
      require_once(DIR_SYSTEM . 'library/cart.php');  Добавить
      require_once(DIR_SYSTEM . 'library/redis_cache.php'); Если вы используете VQMod добавить
       
      require_once(VQMod::modCheck(DIR_SYSTEM . 'library/redis_cache.php'));  
       
      Добавил SirGrey Добавлено 20.11.2019 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика https://proportfolio.ru/ Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет Старая цена 0  
    • By sitecreator
      Скачать/Купить дополнение


      Image COMPRESSOR & Watermark & WebP & Lazy Load etc. by Sitecreator
      WEBP работает везде просто и надежно !
      Компрессор версии 2.1 для opencart 1.5, 2.* & 3.0
      Для использования на opencart 1.5.* должен быть сперва установлен vqmod (если он отсутствует), обычно в 95% он уже присутствует в движке.
       
      Ссылка на подробную документацию по установке:
       
      Никакой зависимости от хостера в плане создания и вывода WEBP! Работает WEBP везде без всяких условий!   Не надо спрашивать будет ли работать на вашем хостинге WEBP. Ответ простой - у вас будет WEBP! В данном решении предусмотрено практически все, включая полную совместимость с ускорителями Jet Cache, Turbo, Nitropack. Остальные кешеры тоже поддерживаются, но с определенными условиями.
      WEBP (сжатый формат графики) можно теперь получить практически у любого хостера.
      Не имеет значения есть ли поддержка WEBP у вашего хостера или нет.
      Такая поддержка WEBP встроена в модуль Компрессор и работает на любой Linux и Windows.
       
      Поддерживается любой современный браузер, способный отображать WEBP.
       
      Благодаря современному формату изображений WEBP удается снизить общий вес изображений в среднем в 2-3 раза на странице, и тем самым выполнить рекомендации Гугла.
       

       
       
      Мастерам большие СКИДКИ! Оптимизация (сжатие) изображений - Гугл PageSpeed одобряет.
      Теперь настоящий комбайн для работы с изображениями.  Управление белыми полями изображений, фоном, размером, обрезкой картинок, отдельное управление изображениями для яндекс-маркета и т.д.
      Индивидуальные настройки для групп изображений ("всплывающие", "thumb-миниатюры").
      "Компрессор" (Image Compressor) обеспечит максимальное сжатие изображений Opencart на обычном хостинге (функция proc_open php нужна для работы mozjpeg, optipng; но создание WEBP в режиме "по расписанию" не требует ее наличия в php, на котором работает ваш сайт)  и всегда на VDS.   Нужные функции (proc_open) вы можете сами включать даже на обычном хостинге (некоторые это позволяют, но не все хостеры - см. ниже).
      Установка софта для сжатия изображений Опенкарт (mozjpeg и  optiPNG, WEBP) полностью автоматизирована в два клика на обычный хостинг и VDS (не требует знаний Linux).
       
      Вся магия здесь:
       

       
      Для разработчиков и веб-мастеров, устанавливающих модуль своим заказчикам действует особая (низкая) цена
       
      Демо 2 (клиентская часть): http://watermark.sitecreator.pro
      Демо 2 (админка): http://watermark.sitecreator.pro/admin/index.php?route=extension/module/watermark_by_sitecreator
       
      Демо 1.5 (клиентская часть): http://watermark15.sitecreator.pro
      Демо 1.5 (админка): http://watermark15.sitecreator.pro/admin/index.php?route=module/watermark_by_sitecreator
       
      пользователь: DEMO
      пароль: DEMO
       
      Для Opencart 3.0 и Opencart 2.*
      С поддержкой WEBP, Lazy Load и др.
      Дистрибутив теперь универсальный (он один) для движка 2-й и 3-й версий.
      Начиная с версии 1.18.3
       
       
      совместим со всеми сборками версий движков Opencart (ocstore, opencart.pro, русская сборка и т. д.) 1.5 и 2+ (2.0, 2.1, 2.2, 2.3)
      Файлы движка не заменяются (используется vqmod или ocmod для соответствующих веток движка)
      Для Opencart 3.0  версия здесь: https://opencartforum.com/files/file/6148-kompressor-izobrazheniy-watermark-bonusy-dlya-opencart-30/
       

       
      Модуль Сжатия Изображений Opencart по максимуму использует возможности imagick (если установлен), что уже позволяет получить лучшие по качеству и размеру изображения.  Кроме того, в отличие от дефолтного GD использование imagick позволяет уменьшить размер файла за счет очистки изображения от ненужной информации.
       
      Как избежать тормозов во время создания сжатых изображений?

      При обновлении до версии 1.12.6+ нужно проявить внимание! Внедрена защита "от дурака".
       
       
      Максимум настроек водяного знака Opencart (watermark): его позиция, поворот, прозрачность водяного знака и т. д.
      Можно настроить ограничение (запретить применять) для водяного знака как по имени файла/папок, так и по  размерам.
      Также можно добавить к имени файла nowatermark , и на данное изображение водяной знак не будет накладываться.
      Адаптивный ресайз (resize, обрезка) изображения.
       
       
      Вот так работает WEBP Lazy Load модуля Компрессор.
      Гугл одобряет!
       

       
       
      Как включить нужную для максимального сжатия функцию?
       (в случае работы режима cron для создания webp это необязательно)
       
       
       
       
      Основной функционал модуля - это добавление водяного знака на изображения и другие настройки изображения (ресайз, белые поля и фон, и т. д. ).  Как бонус - это использование автоматического  супер-сжатия изображений для форматов JPEG PNG, плюс генерация и вывод сжатого формата WEBP. Но для многих сжатие изображений в Opencart - это самый важный функционал.
       
      Совместим с Opencart, Ocstore, opencart.pro и сборок версии 1.5.* и 2+ (2.0, 2.1, 2.2, 2.3)
      требования: php 5.6+ (рекомендуемый минимум - это 5.6; 7.0, 7.1, 7.2, 7.3)   Версию php у хостера вы можете изменить самостоятельно через панель управления. 
      Ioncube Loader  (крайне рекомендуется 10+)
      Касательно версии php.  Рекомендованный минимум (5.6) есть у любого хостера и на этой версии работает любой движок Opencart.
      Ioncube loader 10+ есть сейчас, как минимум, у 99% хостеров (у всех нормальных), и все меньше остается нерадивых хостеров, которые не могут обновить старую версию Ioncube loader 6 (2-х летней давности).
      Просьба учесть, что при минимальных требованиях модуль работать будет, но не все функции могут быть доступны.  Не вижу смысла поддерживать совместимость с допотопным серверным софтом в ущерб развитию модуля.
       
      Ускорители (кешеры) не влияют на работу водяного знака и сжатых форматов mozjpeg, optipng, но могут неверно влиять на вывод webp.
       
      на 100% совместимые ускорители в плане сжатых форматов, т.е. WEBP работает (выводится) корректно:
      Jet Cache Turbo (версия для 2..3) NitroPack  
      Начиная с версии 2.1.0 модуль Компрессор позволяет включить повышенную совместимость с практически любым кеширующим ускорителем в режиме вывода webp. Независимо от того была ли сделана специально адаптация модуля Компрессор под конкретный ускоритель или нет.

       
      Например, в таком режиме может работать ускоритель Lightning (но желательно отключить (уменьшить агрессивность) в нем оптимизацию (минификацию) Javascript для HTML)
       
      Несовместимые в плане вывода WEBP (за счет модуля) ускорители способны не мешать корректному выводу WEBP если данный вывод делать за счет средств сервера. Например, за счет NGINX Конфиг (config) NGINX для вывода WEBP на VDS   или Апачи при возможности (лимитирует хостер).
       
      Модуль совместим в плане корректного вывода WEBP (и отдачи для Сафари и старых браузеров JPEG, PNG соответственно) с ускорителями/кешерами Jet Cache и Turbo (версия для 2.3) и, скорее всего, с остальными.
      Совместим с NitroPack (тестировался с NitroPack 2.5.3 ).
      В случае использования модуля для сжатия только JPEG, PNG наличие ускорителя не сказывается на возможностях сжатия.
      Например, ускоритель Lightning совместим для работы с сжатыми форматами JPEG (mozjpeg), PNG (optipng) и совместим в режиме создания WEBP, но не совместим в режиме отображения картинок для старых браузеров и Сафари, который не понимает WEBP.
      В случае использования webp нужно понимать, что старым браузерам нужно отдавать jpeg/png. Именно так и работает модуль изначально, но ускорители могут за счет кеширования ломать такой алгоритм, а потому для указанных выше совместимых ускорителей была специально сделана адаптация чтобы не было проблем с webp.
       
      Модуль не заменяет файлы , используется ocmod для движка 2.*,  аналогично в движке 1.5.* используется vqmod с 1.5.1 версии модуля. 
      Просьба обратить внимание до установки модуля на то, не изменен ли код напрямую (или за счет модификаторов) в файлах:
       
      system/image.php, catalog/tool/image.php, admin/tool/image.php.
       
      Не гарантируется нормальная работа если у вас в движке были сделаны прямые (или за счет модификаторов) изменения кода указанных выше файлов.
      Желательно чтобы эти файлы были такими же как в дистрибутиве движка.  Но даже в случае их изменения редко когда возникают проблемы, и они решаемые (обращайтесь к автору).
       
      Пожалуйста, лицензию запрашивайте, написав мне на почту или в личку.
       
      Пояснение к лицензированию.
      Лицензия предоставляется для одного домена с конкретным доменным именем (без возможности переноса на другой домен).
      Приобретая модуль вы соглашаетесь с принципом лицензирования. 
       
      Подробно о лицензировании читайте здесь.
       
      Супер-сжатие выполняется согласно рекомендациям Гугла PageSpeed Insights и позволяет добиться снижения размера файлов изображений и, как следствие, уменьшения трафика.
      Google  PageSpeed Insights благодаря этому дает более высокую оценку вашему сайту в баллах.
       
      mozjpeg, optipng необязателен к установке, это лишь рекомендация для достижения максимального сжатия.
      Процесс установки этого софта сводится к нажатию двух кнопок в модуле.
      Это работает как на обычном хостинге, так и на VDS.
       
      Самая распространенная "ошибка" после установки.
       
       
       
       
       
      Инструкция для самостоятельной сборки серверного софта оставлена для любознательных. Не нужно ее пугаться и не нужно повторять все эти действия.
      Модуль Компрессор уже содержит средства диагностики и вывода информации.  Пользуйтесь ими (вкладка "сервис").
       
       
      Инструкция по установке дополнительного софта для WINDOWS :
      (для локальной машины разработчика, например. ).
       
       
       
      Установку модуля "Сжатие изображений плюс водяной знак" осуществляет покупатель самостоятельно или его доверенное лицо.
       

       
       

       

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

       
       
       
      Для SEO CMS сделано решение, позволяющее также использовать супер-сжатие по максимуму и водяной знак в этом модуле.  Сделано как отдельное дополнение к модулям "Компрессор" (Image Compressor) и SEO CMS.  Такое решение обусловлено тем, что указанный модуль использует свою библиотеку  и модели для работы с изображениями.
      Сжаты будут даже отображаемые оригиналы, вставленные по прямым ссылкам в статьях.  И на оригиналы можно накладывать водяной знак и защищать их от кражи.
      Любые изменения с оригиналами обратимы. Например, можно менять водяной знак.
       
      Решение здесь: SEO CMS mod for Image Compressor & Watermark
       
       
       
      Решение по работе с фоном исходных изображений здесь:
      Можно обрезать, добавлять фон, делать аккуратные рамки цветом фона.
      Данное решение реализовано как плагин к модулю "Компрессор", т. е. все настройки делаются в модуле "Компрессор".
       
       
      Совместимость со специфическими модулями и модификаторами, 
      (затрагивающими системную библиотеку и модель image.php)
       
       
      ПОДДЕРЖКА от автора модуля:

       
       
      Самодиагностика и вывод полезной информации - это первое средство если у вас "ничего не работает".
       

      Если у вас "не сжимает".  Некоторые серверы (нередко хостер ukraine.com.ua ) кешируют изображения на сервере. Ищите это в настройках панели управления хостера "ускорение".  Нужно просто отключить это кеширование. Подробнее описал в поддержке модуля:
       
       
      А что это гугл пишет "изменение размера .... уменьшит"?

       
       

      Админ БАР для управления изображениями (очистка кеша только для конкретной страницы)
      и СЖАТИЕ изображений по прямым ссылкам и из CSS.
       
      Тест Тест
       
       
       
       
       
       
       


      info.php

      Добавил sitecreator Добавлено 26.08.2017 Категория Кэширование, сжатие, ускорение Системные требования php 5.6 - 7.3, Ioncube Loader версии не ниже 10+ Сайт разработчика https://sitecreator.ru/ Метод активации По запросу в ЛС
      По запросу на почту Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Нет
      Да Старая цена 2990  
    • By sitecreator
      WEBP работает везде просто и надежно !
      Компрессор версии 2.1 для opencart 1.5, 2.* & 3.0
      Для использования на opencart 1.5.* должен быть сперва установлен vqmod (если он отсутствует), обычно в 95% он уже присутствует в движке.
       
      Ссылка на подробную документацию по установке:
       
      Никакой зависимости от хостера в плане создания и вывода WEBP! Работает WEBP везде без всяких условий!   Не надо спрашивать будет ли работать на вашем хостинге WEBP. Ответ простой - у вас будет WEBP! В данном решении предусмотрено практически все, включая полную совместимость с ускорителями Jet Cache, Turbo, Nitropack. Остальные кешеры тоже поддерживаются, но с определенными условиями.
      WEBP (сжатый формат графики) можно теперь получить практически у любого хостера.
      Не имеет значения есть ли поддержка WEBP у вашего хостера или нет.
      Такая поддержка WEBP встроена в модуль Компрессор и работает на любой Linux и Windows.
       
      Поддерживается любой современный браузер, способный отображать WEBP.
       
      Благодаря современному формату изображений WEBP удается снизить общий вес изображений в среднем в 2-3 раза на странице, и тем самым выполнить рекомендации Гугла.
       

       
       
      Мастерам большие СКИДКИ! Оптимизация (сжатие) изображений - Гугл PageSpeed одобряет.
      Теперь настоящий комбайн для работы с изображениями.  Управление белыми полями изображений, фоном, размером, обрезкой картинок, отдельное управление изображениями для яндекс-маркета и т.д.
      Индивидуальные настройки для групп изображений ("всплывающие", "thumb-миниатюры").
      "Компрессор" (Image Compressor) обеспечит максимальное сжатие изображений Opencart на обычном хостинге (функция proc_open php нужна для работы mozjpeg, optipng; но создание WEBP в режиме "по расписанию" не требует ее наличия в php, на котором работает ваш сайт)  и всегда на VDS.   Нужные функции (proc_open) вы можете сами включать даже на обычном хостинге (некоторые это позволяют, но не все хостеры - см. ниже).
      Установка софта для сжатия изображений Опенкарт (mozjpeg и  optiPNG, WEBP) полностью автоматизирована в два клика на обычный хостинг и VDS (не требует знаний Linux).
       
      Вся магия здесь:
       

       
      Для разработчиков и веб-мастеров, устанавливающих модуль своим заказчикам действует особая (низкая) цена
       
      Демо 2 (клиентская часть): http://watermark.sitecreator.pro
      Демо 2 (админка): http://watermark.sitecreator.pro/admin/index.php?route=extension/module/watermark_by_sitecreator
       
      Демо 1.5 (клиентская часть): http://watermark15.sitecreator.pro
      Демо 1.5 (админка): http://watermark15.sitecreator.pro/admin/index.php?route=module/watermark_by_sitecreator
       
      пользователь: DEMO
      пароль: DEMO
       
      Для Opencart 3.0 и Opencart 2.*
      С поддержкой WEBP, Lazy Load и др.
      Дистрибутив теперь универсальный (он один) для движка 2-й и 3-й версий.
      Начиная с версии 1.18.3
       
       
      совместим со всеми сборками версий движков Opencart (ocstore, opencart.pro, русская сборка и т. д.) 1.5 и 2+ (2.0, 2.1, 2.2, 2.3)
      Файлы движка не заменяются (используется vqmod или ocmod для соответствующих веток движка)
      Для Opencart 3.0  версия здесь: https://opencartforum.com/files/file/6148-kompressor-izobrazheniy-watermark-bonusy-dlya-opencart-30/
       

       
      Модуль Сжатия Изображений Opencart по максимуму использует возможности imagick (если установлен), что уже позволяет получить лучшие по качеству и размеру изображения.  Кроме того, в отличие от дефолтного GD использование imagick позволяет уменьшить размер файла за счет очистки изображения от ненужной информации.
       
      Как избежать тормозов во время создания сжатых изображений?

      При обновлении до версии 1.12.6+ нужно проявить внимание! Внедрена защита "от дурака".
       
       
      Максимум настроек водяного знака Opencart (watermark): его позиция, поворот, прозрачность водяного знака и т. д.
      Можно настроить ограничение (запретить применять) для водяного знака как по имени файла/папок, так и по  размерам.
      Также можно добавить к имени файла nowatermark , и на данное изображение водяной знак не будет накладываться.
      Адаптивный ресайз (resize, обрезка) изображения.
       
       
      Вот так работает WEBP Lazy Load модуля Компрессор.
      Гугл одобряет!
       

       
       
      Как включить нужную для максимального сжатия функцию?
       (в случае работы режима cron для создания webp это необязательно)
       
       
       
       
      Основной функционал модуля - это добавление водяного знака на изображения и другие настройки изображения (ресайз, белые поля и фон, и т. д. ).  Как бонус - это использование автоматического  супер-сжатия изображений для форматов JPEG PNG, плюс генерация и вывод сжатого формата WEBP. Но для многих сжатие изображений в Opencart - это самый важный функционал.
       
      Совместим с Opencart, Ocstore, opencart.pro и сборок версии 1.5.* и 2+ (2.0, 2.1, 2.2, 2.3)
      требования: php 5.6+ (рекомендуемый минимум - это 5.6; 7.0, 7.1, 7.2, 7.3)   Версию php у хостера вы можете изменить самостоятельно через панель управления. 
      Ioncube Loader  (крайне рекомендуется 10+)
      Касательно версии php.  Рекомендованный минимум (5.6) есть у любого хостера и на этой версии работает любой движок Opencart.
      Ioncube loader 10+ есть сейчас, как минимум, у 99% хостеров (у всех нормальных), и все меньше остается нерадивых хостеров, которые не могут обновить старую версию Ioncube loader 6 (2-х летней давности).
      Просьба учесть, что при минимальных требованиях модуль работать будет, но не все функции могут быть доступны.  Не вижу смысла поддерживать совместимость с допотопным серверным софтом в ущерб развитию модуля.
       
      Ускорители (кешеры) не влияют на работу водяного знака и сжатых форматов mozjpeg, optipng, но могут неверно влиять на вывод webp.
       
      на 100% совместимые ускорители в плане сжатых форматов, т.е. WEBP работает (выводится) корректно:
      Jet Cache Turbo (версия для 2..3) NitroPack  
      Начиная с версии 2.1.0 модуль Компрессор позволяет включить повышенную совместимость с практически любым кеширующим ускорителем в режиме вывода webp. Независимо от того была ли сделана специально адаптация модуля Компрессор под конкретный ускоритель или нет.

       
      Например, в таком режиме может работать ускоритель Lightning (но желательно отключить (уменьшить агрессивность) в нем оптимизацию (минификацию) Javascript для HTML)
       
      Несовместимые в плане вывода WEBP (за счет модуля) ускорители способны не мешать корректному выводу WEBP если данный вывод делать за счет средств сервера. Например, за счет NGINX Конфиг (config) NGINX для вывода WEBP на VDS   или Апачи при возможности (лимитирует хостер).
       
      Модуль совместим в плане корректного вывода WEBP (и отдачи для Сафари и старых браузеров JPEG, PNG соответственно) с ускорителями/кешерами Jet Cache и Turbo (версия для 2.3) и, скорее всего, с остальными.
      Совместим с NitroPack (тестировался с NitroPack 2.5.3 ).
      В случае использования модуля для сжатия только JPEG, PNG наличие ускорителя не сказывается на возможностях сжатия.
      Например, ускоритель Lightning совместим для работы с сжатыми форматами JPEG (mozjpeg), PNG (optipng) и совместим в режиме создания WEBP, но не совместим в режиме отображения картинок для старых браузеров и Сафари, который не понимает WEBP.
      В случае использования webp нужно понимать, что старым браузерам нужно отдавать jpeg/png. Именно так и работает модуль изначально, но ускорители могут за счет кеширования ломать такой алгоритм, а потому для указанных выше совместимых ускорителей была специально сделана адаптация чтобы не было проблем с webp.
       
      Модуль не заменяет файлы , используется ocmod для движка 2.*,  аналогично в движке 1.5.* используется vqmod с 1.5.1 версии модуля. 
      Просьба обратить внимание до установки модуля на то, не изменен ли код напрямую (или за счет модификаторов) в файлах:
       
      system/image.php, catalog/tool/image.php, admin/tool/image.php.
       
      Не гарантируется нормальная работа если у вас в движке были сделаны прямые (или за счет модификаторов) изменения кода указанных выше файлов.
      Желательно чтобы эти файлы были такими же как в дистрибутиве движка.  Но даже в случае их изменения редко когда возникают проблемы, и они решаемые (обращайтесь к автору).
       
      Пожалуйста, лицензию запрашивайте, написав мне на почту или в личку.
       
      Пояснение к лицензированию.
      Лицензия предоставляется для одного домена с конкретным доменным именем (без возможности переноса на другой домен).
      Приобретая модуль вы соглашаетесь с принципом лицензирования. 
       
      Подробно о лицензировании читайте здесь.
       
      Супер-сжатие выполняется согласно рекомендациям Гугла PageSpeed Insights и позволяет добиться снижения размера файлов изображений и, как следствие, уменьшения трафика.
      Google  PageSpeed Insights благодаря этому дает более высокую оценку вашему сайту в баллах.
       
      mozjpeg, optipng необязателен к установке, это лишь рекомендация для достижения максимального сжатия.
      Процесс установки этого софта сводится к нажатию двух кнопок в модуле.
      Это работает как на обычном хостинге, так и на VDS.
       
      Самая распространенная "ошибка" после установки.
       
       
       
       
       
      Инструкция для самостоятельной сборки серверного софта оставлена для любознательных. Не нужно ее пугаться и не нужно повторять все эти действия.
      Модуль Компрессор уже содержит средства диагностики и вывода информации.  Пользуйтесь ими (вкладка "сервис").
       
       
      Инструкция по установке дополнительного софта для WINDOWS :
      (для локальной машины разработчика, например. ).
       
       
       
      Установку модуля "Сжатие изображений плюс водяной знак" осуществляет покупатель самостоятельно или его доверенное лицо.
       

       
       

       

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

       
       
       
      Для SEO CMS сделано решение, позволяющее также использовать супер-сжатие по максимуму и водяной знак в этом модуле.  Сделано как отдельное дополнение к модулям "Компрессор" (Image Compressor) и SEO CMS.  Такое решение обусловлено тем, что указанный модуль использует свою библиотеку  и модели для работы с изображениями.
      Сжаты будут даже отображаемые оригиналы, вставленные по прямым ссылкам в статьях.  И на оригиналы можно накладывать водяной знак и защищать их от кражи.
      Любые изменения с оригиналами обратимы. Например, можно менять водяной знак.
       
      Решение здесь: SEO CMS mod for Image Compressor & Watermark
       
       
       
      Решение по работе с фоном исходных изображений здесь:
      Можно обрезать, добавлять фон, делать аккуратные рамки цветом фона.
      Данное решение реализовано как плагин к модулю "Компрессор", т. е. все настройки делаются в модуле "Компрессор".
       
       
      Совместимость со специфическими модулями и модификаторами, 
      (затрагивающими системную библиотеку и модель image.php)
       
       
      ПОДДЕРЖКА от автора модуля:

       
       
      Самодиагностика и вывод полезной информации - это первое средство если у вас "ничего не работает".
       

      Если у вас "не сжимает".  Некоторые серверы (нередко хостер ukraine.com.ua ) кешируют изображения на сервере. Ищите это в настройках панели управления хостера "ускорение".  Нужно просто отключить это кеширование. Подробнее описал в поддержке модуля:
       
       
      А что это гугл пишет "изменение размера .... уменьшит"?

       
       

      Админ БАР для управления изображениями (очистка кеша только для конкретной страницы)
      и СЖАТИЕ изображений по прямым ссылкам и из CSS.
       
      Тест Тест
       
       
       
       
       
       
       


      info.php

    • By MaxD
      Скачать/Купить дополнение


      OpenCart Lightning
       

       
      Ура! Заработал русский сайт поддержки Lightning - https://lightning.devs.mx/ru
      Там ответы на вопросы и форма запроса поддержки. Пишите, если заметите какие-то баги
       
      OpenCart Lightning - это мод для ускорения работы магазинов. Он использует целый ряд технологий и ноу-хау.
      Работает со всеми версиями OpenCart и ocStore.
       
      Вот ссылка на демо-магазин с 20000 товаров на хостинге DigitalOcean за $5 - https://demo.devs.mx/lightning
      А вот демо с JOURNAL3 - https://demo.devs.mx/journal3/
       
      почти мгновенное открытие страниц оптимизировано для получения высоких показателей в новом Google PageSpeed Insights быстрая работа с большим количеством товаров и категорий повышение удобства навигации по магазину и рейтингов в поисковиках не надо настраивать и приглядывать, просто работает отпадает необходимость в дополнительных модах оптимизации или кеширования  
       
       
       
       
      Если вы залогинены в админку - страницы, на которые вы заходите - после этого перегенерируются. То есть, если вы хотите увидеть изменения - просто обновите страницу.
      В большинстве случаев нет необходимости очищать кеш вручную - все обновляется автоматически.
       
      После установки у вас будет 7 дней тестового периода, дальше надо будет купить лицензию.
       
      Внимание: OpenCart Lightning не работает на localhost, только на реальных интернет-серверах.
       
      Установка
      Загрузите lightning.ocmod.zip в инсталлятор, зайдите в Модификации и обновите их.
       
      Обновление
      1. Выключите Lightning.
      2. Очистите кеш Lightning.
      3. Зайдите в Модификации и удалите модификацию Lightning.
      4. Если вы обновляетесь с Lightning 1.xx или 2.хх, удалите папку system/lightning
      4. Установите новую версию Ligthning.
      5. Обновите Модификации.
      6. Включите Lightning.
      Добавил MaxD Добавлено 04.12.2014 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика http://lightning.devs.mx/ Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1
      1.5.3.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Да Старая цена 0  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.