Коллеги, добрый день!
Посоветуйте годный модуль ЧПУ для 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'];
}
}
...
Весь код не вмещается.