Задать вопрос
IgorPI
@IgorPI

ЧПУ Opencart на больших объемах данных?

Коллеги, добрый день!

Посоветуйте годный модуль ЧПУ для OpenCart ^3.*

Заказчик обратился ко мне, мол сайт тормозит, нужно поправить.

После поверхностного анализа, была определена причина проблемы.

Используется модуль SeoPro, но на больших объемах сайт тормозит.
И это не удивительно, так как алиасов в базе 2 000 000.

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

Всё прекрасно бы работало если данных было бы меньше.

Здесь происходит формирование алиасов и кэша.
<?php
class ControllerCommonSeoPro extends Controller {
	private $cache_data = null;
	private $category_parents = null;
	private $params_seo = null;
	private $config_url = null;
	private $config_ssl = null;

	public function __construct($registry) {
		parent::__construct($registry);

        $this->config_url = 'http://' . $_SERVER['SERVER_NAME'] . '/';
        $this->config_ssl = 'https://' . $_SERVER['SERVER_NAME'] . '/';

        $seo_pro_cache_suffix = "index";

        $this->cache_data = $this->cache->get("seo_pro_$seo_pro_cache_suffix");


		if (!$this->cache_data) {
			$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias ORDER BY url_alias_id");
			$this->cache_data = array();
			foreach ($query->rows as $row) {
				if (isset($this->cache_data['keywords'][$row['keyword']])){
					$this->cache_data['keywords'][$row['query']] = $this->cache_data['keywords'][$row['keyword']];
					continue;
				}
				$this->cache_data['keywords'][$row['keyword']] = $row['query'];
				$this->cache_data['queries'][$row['query']] = $row['keyword'];
			}
			$this->cache->set("seo_pro_$seo_pro_cache_suffix", $this->cache_data);
		}

		$this->category_parents = $this->cache->get('seo_pro.parents');
		$this->category_parents = null;
		if (!$this->category_parents) {
			$query = $this->db->query("SELECT `category_id`, `path_id` FROM " . DB_PREFIX . "category_path WHERE `level` = 0");
			$this->category_parents = array();
			foreach ($query->rows as $row) {
				$this->category_parents[$row['category_id']] = $row['path_id'];
			}
			$this->cache->set('seo_pro.parents', $this->category_parents);
		}

		$query = $this->db->query("SELECT * FROM `filter_alias`");
		$this->params_seo = array();
		foreach ($query->rows as $row) {
			$this->params_seo[$row['alias']] = $row['title'];
		}
	}
...


Весь код не вмещается.
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Нужно убрать формирование кэша в SeoPro, и сделать прямые запросы в БД при формировании урлов, сайт оживёт))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы