Понял. Кажется, что в SQL-запросах обнаружен «новый» подход, открытый командой OC, и его следует называть «DDoSself to death».
База продуктов теперь выросла до 37 тыс. Продуктов в 129 категориях (с 18 тыс. За ночь, лол ... не стоило писать сценарии автоматического импорта и передавать их ламеру ...), а время загрузки выросло с 6 От -12 секунд до 20-25 секунд, сильно ударяя по SQL-серверу:
[цитата] Вопрос начинается с запуска: 514 064 911 (задание с момента запуска)
ø в час: 1,301,788 (средняя просьба за час)
ø в минуту: 21 696 (средняя просьба за минуту)
ø в секунду: 362 (задание для второго)
[/ Цитата]
Это НЕ нормально, так как в системе 2 пользователя - автоматизированный скрипт (ограниченный - 30 запросов в секунду, затем sleep (1)) и я (362-30 = 332 запроса в секунду - человеком? WTF разработчики?). Исходя из этой статистики, OC, таким образом, потребуется серьезная серверная ферма для обслуживания более 500 пользователей одновременно. Не случится. Не в этой жизни.
Я поддерживаю различные веб-сайты и переписал почти все из них. Мой самый посещаемый сайт (200 тыс. Посещений в день) генерирует «только» 2.5Mil квестов в день. И это имеет тяжелый (содержание), поверьте мне. Если бы OC был загружен одинаково (200k просмотров), это означало бы, что в день будет 100-120Mil квестов.
ТАКЖЕ запросы не такие мудрые, что затрудняет работу сервера с ORDER BY (как я и подозревал) и SELECT DISTINCT (боль !!!).
ТАКЖЕ существует множество опций для каждого запроса, независимо от того, установлены они пользователем или нет (сортировка, заказ и т. Д.). Это делает квесты в 4-5 раз длиннее, чем ожидалось, даже если пользователь не хочет сортировать (ASC, DESC и т. Д.)
ТАКЖЕ есть квесты, написанные так плохо, что меня забавляет. Как вы можете получить общее число для что-нибудь , используя 5 phps и 3 запроса, если вы можете сделать простую 1 строку «SELECT COUNT (*) FROM ...»? Команда OC, похоже, не заботится о времени выполнения и нагрузке на сервер.
Я хотел бы извиниться, если кто-то обиделся на то, что я написал, но в моем случае я прав: весь подход неверен для достижения целей (быстрое выполнение на 37 тыс. Товаров / 129 кошек). OC мог бы быть хорошим для кого-то с 2 категориями и 50 продуктами (смеется?). Не знаю. И я, вероятно, не узнаю.
Как информация - кэширование не является решением. Кэширование на стороне сервера достаточно. Все, что за этим стоит, означает, что у вас есть серьезные проблемы с кодированием. Так что не ... я повторю, НЕ КУПИТЬ модули кеширования. Они прячут проблемы, а не решают их. Если модуль кэширования может скрыть проблему на продуктах 40 КБ, он не сможет сделать это на продуктах 140 КБ. Вам понадобится модуль кеширования для модуля кеширования, lol.
Теперь к решению. Простой способ. Мы будем модифицировать только основные проблемы. Я не буду объяснять изменения очередей, которые я сделал в моей версии, потому что они находятся во многих файлах и имеют решающее значение, если вы не понимаете, что делаете (вы можете потерять опции OC, которые хотели бы сохранить, хотя мне все равно про варианты пока сайт загружается за полминуты). Итак - ТОЛЬКО незначительные модификации.
Скажем - объяснил для версии 1.5.5.1 сток, стоковая тема. Значит - без модов. После модификации вы потеряете левый боковой блок с категориями, но ваш сайт будет загружен действительно быстро (37 000 товаров / 129 кошек -> 0,137 секунд в сумме при 5 нагрузках, расстояние до сервера ~ 200 миль)
0) BACKUP вашего сайта. Мы будем изменять файлы. Вы могли бы сделать ужасный беспорядок. И плачь потом.
1) Получить /catalog/controller/product/category.php
Найти строку: 184
Должен содержать: $product_total = $this->model_catalog_product->getTotalProducts($data);
Заменить на: //$product_total = $this->model_catalog_product->getTotalProducts($data);
Описание: Комментирование категорий учитывается, поскольку для подсчета товаров в 129 категориях требуется немало времени (129 запросов? WTF?)
2) Получить /catalog/controller/product/category.php
Найти строку: 187
Должен содержать: 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : '')
,
Заменить на: 'name' => $result['name'],
Описание: уборка - нетсчитать для показа в категориях, так как мы их больше не считаем.
3) Получить /catalog/controller/product/category.php
Найти строку: 388
Должен содержать: 'common/column_left',
Заменить на: // 'common/column_left',
Описание: Skippng поколение левой колонки в представлении категории.
4) Получить /catalog/controller/product/product.php
Найти строку: 463
Должен содержать: 'common/column_left',
Заменить на: // 'common/column_left',
Описание: Skippng поколение левой колонки в представлении продукта.
5) Получить /store/catalog/view/theme/default/template/product/product.tpl
Найти строку: 1
Должен содержать: <?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
Заменить на: <?php echo $header; ?><?php echo $column_right; ?>
Описание: удаление левого столбца из темы - просмотр товаров.
6) Получить /store/catalog/view/theme/default/template/product/category.tpl
Найти строку: 1
Должен содержать: <?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
Заменить на: <?php echo $header; ?><?php echo $column_right; ?>
Описание: удаление левого столбца из темы - представление каталога.
DONE. Проверьте свою скорость загрузки. Должно быть довольно удивительно, если бы ваша проблема была как у меня.
ПРИМЕЧАНИЕ. Обратите внимание, что я не знаком с версией OC и никогда не использовал ее раньше. Поскольку мы решили часть проблемы, она не полностью решена. Это временное исправление. Удаление частей, которые вызывают медленную загрузку, является решением до тех пор, пока вы не напишите их снова, на этот раз, надеюсь, лучше. Я готов переписать это, если кто-то хочет перекупить моего босса. Я могу взять отпуск и работать для вас:) Мой платеж в настоящее время составляет 4700 € в неделю. Правильное понимание и переписывание этого левого столбца не должно занять более 1-2 рабочих дней.
PP. Будет публиковать это в нескольких местах, потому что я не думаю, что команде разработчиков OC понравится то, что они прочитали, независимо от того, не хочу ли я обидеть их - просто чтобы указать на критические ошибки, которые они сделали (25.31 среднее время загрузки за каждую тестируемую страницу - ни один клиент не будет ждать более 3-4 секунд, прежде чем перейти на другой сайт! Дафук?). И, не позволяя мне публиковать эту информацию, люди не знают, как найти выход из проблемы и купить "модуль кеширования", который фактически копирует файлы на жестком диске как дикий. Трата денег, растрата ресурсов жесткого диска, растрата электричества ... и все это - для создания иллюзии все работает нормально, в то время как это не так.