Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

RGB

Users
  • Posts

    6,967
  • Joined

  • Last visited

Everything posted by RGB

  1. А кто-нибудь использовал такой инструмент для оптимизации скорости загрузки страниц, как асинхронные загрузчики? Я вот прикрутил к сайту yepnope, но результаты как-то не впечатляют абсолютно - со скриптами все окей, но при обновлении страницы долю секунды (видимо, пока загрузчик подхватит основную таблицу стилей (из кеша?) ) отображается голая страница без стилей, потом все становится ок, но что самое странное - такая картина при каждом обновлении страницы, будто бы браузер не кеширует цсс-ки, загруженные асинхронно - а в таком случае какой в них смысл вообще? PS Забыл написать, такая картина только в хроме, фф и ие, опера и сафари не показывают страницу без стилей (или не успевают показать, или в них загрузчик работает быстрее) PPS По времени получился выигрыш 0.2 с, хотя тут сложно точно измерять
  2. для россии такой помню был, не знаю насколько он хороший, но мне не нравится, что вместо простого кредитного калькулятора там переход на страницу банка и всякая муть на их стороне
  3. убираем, получаем запрос $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id IN ('" . implode("','", array_keys($product_data)) . "')"); и рейтинг отображается, и время загрузки с кешем уменьшается до 1 с (а если отключить filterpro, то менше 0.5 с) - красота!
  4. Приложения под мобильные устройства есть, но смысл их использования - очень узкий сегмент магазинов, по-моему адаптивная верстка - решение гораздо более простое и удобное.
  5. Ну я то догадался, как исправить это, но ведь здесь и первоклашек хватает, да и не все первоклашки понимают что это и как это. Поставят, увидят сломавшуюся админку, подумают "Ах этот ужасный кривой оксторе, пойду лучше заминусую автора дополнения и скачаю красивую сборочку максисторе со всякими свистелками и перделками, там все ведь работает" :-)
  6. Если с категориями товаров, то еще проще. Покажу как у себя делал разные логотипы магазина в разных категориях (3 главные категории 1-го уровня вложенности, соответственно 3 файла лого - logo1.png, logo2.png, logo3.png, где 1,2,3 - айдишники главных категорий). У вас суть та же будет. Идем в \catalog\controller\common\header.php находим строку $this->data['categories'][] = array( и добавляем где-то там рядышком, например после: 'name' => $category['name'], 'category_id' => $category['category_id'], А потом в файле \catalog\view\theme\default\template\common\header.tpl в нужной секции делаем так: <img src="catalog/view/theme/default/image/logo<?php foreach ($categories as $category) {if ($category['active']) {echo $category['category_id'];break;}}?>.png" alt="" /> В рез-те получаем вывод разных вариантов лого на всех страницах главных категорий 1,2,3 (включая их дочерние категории), и вывод обычного лого (logo.png) на прочих страницах - поиск, статьи и т.п., где нет привязки к категориям. Думаю, логику вы должны были уловить.
  7. А у вас там как, ОС под рукой? Или вы по моим сообщениям отлаживаете модуль? :-) Попробуйте в админку зайти Fatal error: Class 'Debug' not found in \system\database\mysql.php on line 35
  8. А что вам мешает привязать к ид определенного товара некий фон, ну и в зависимости от товара выводить нужный фон?
  9. предлагаю автору сделать рандомный показ любых 4-х категорий из 13, так сказать поле чудес :-D
  10. Подсветку синтаксиса все равно не вижу :-) В остальном все работает. У кого как у меня - ужасно тормозит вывод лога sql-запросов при их большом кол-ве - все дело в цсс, нужно зайти в файл profilertoolbar.css и найти строчку #ptb table td{padding:1px 5px; text-align: left; vertical-align: top; border: 1px dotted #424242;} и закомментировать в ней (сам удивляюсь) границу в виде точек #ptb table td{padding:1px 5px; text-align: left; vertical-align: top; /*border: 1px dotted #424242;*/}
  11. Либо я вас не понял, либо вы меня. На ваш коммит я и ориентировался и в точности все изменения перенес к себе в движок, но беда в том, как мне кажется, что у вас там версия 1.5.5.1, а у меня 1.5.2.1. PS Нашел ошибку в запросе у себя, сказывается общая раскуроченность движка :-) Вроде теперь все окей работает
  12. Умел бы - прикрутил :-) Если у вас есть идеи, пишите - сразу добавлю в дополнение
  13. Итак, снова перемерял с изменениями из статьи toporchillo, получилось намного интереснее: До изменений Cache off: 7.22501 s 7.95 mb logs (2) sql (114) files (95) request (95) Cache on: 3.48739 s 7.95 mb logs (2) sql (73) files (95) request (95) После изменений Cache off: 3.62278 s 7.98 mb logs (2) sql (103) files (95) request (95) Cache on: 1.65011 s 7.98 mb logs (2) sql (62) files (95) request (95) То есть выигрыш по скорости в 2 раза, что очень круто! И я так думаю, что было бы еще лучше, если бы у меня была не 1.5.2.1, а 1.5.5.1, потому что есть пара моментов с несовместимостью. Буду благодарен, если кто-то укажет на причины ошибок: 1) Notice: Error: Unknown column 'p.rating' in 'field list' Возникает из-за того, что в самом первом оптимизированном запросе $query = $this->db->query("SELECT DISTINCT *, p.rating, pd.name AS name, p.image, m.name AS manufacturer, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id IN ('" . implode("','", array_keys($product_data)) . "')");нет столбца rating (кмк, проблема в 1.5.2.1), как я это обошел - заменил в запросе в 2-х местах p.rating на (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS ratingв итоге длина запроса увеличилась, но рейтинг стал учитываться (если можно проще это сделать, укажите плиз). 2) Undefined index: discount in Z:\home\localhost\ocstore\catalog\model\catalog\product.php в 51-й строке: $row['price'] = ($row['discount'] ? $row['discount'] : $row['price']);я это просто закомментил, так как в магазине discounts вообще не используются. 3) И внезапно Notice: Undefined index: special in Z:\home\localhost\mstore\catalog\controller\product\category.php в 196-й и 203-й строках if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']); } else { $tax = false; }Здесь я вообще не понял что случилось и ничего не смог придумать, потому что акционная цена special все равно показывается
  14. А как новую версию то поставить? У меня нет строчки $row = array() в \system\database\mysql.php, соответственно пункт 3 установки выполнить не получается. Добавляю после $data = array(); и вроде что-то работает, но выпадают ошибки на неизвестную переменную sysstart, хотя сами запросы выводятся (но окно с их выводом после разворачивания намертво вешает браузер, а прокрутка лога требует пару минут Версия ОС 1.5.2.1, но такой строки нет и в 1.5.5.1, и в 1.5.1.3 - специально проверил
  15. Можно добавить таймаут на закрытие окна, но если его делать слишком маленьким, то клиент не успеет прочитать что написано в окне, а если слишком большим - никто не будет ждать окончания отсчета, всегда найдутся изобретательные идиоты, которые откроют окно еще несколько раз и наклацают вам еще одну пачку писем :-) Для всех версий старше 1.5.1.3 добавить после: <a onclick="$(window).colorbox.close();">Закрыть</a> это окно?</span>'); такой кусок setTimeout(function () { $(window).colorbox.close() }, 3000); Для 1.5.1.3 после: <a onclick="parent.$.fancybox.close();">Закрыть</a> это окно?</span>'); такой кусок setTimeout(function () { parent.$.fancybox.close() }, 3000); Ну и можете дописать в форме что-то типа Это окно автоматически закроется через 3 сек. P.S. У меня за полтора года использования такого дополнения никто не отправлял больше 2-х писем сразу, обычно все понимают, когда в форме написано Ваш заказ отправлен
  16. А зачем посетителю так кувыркаться с непонятной системой, если он может просто позвонить и сделать заказ по телефону (ну для особых жмотов или социопатов есть обратный звонок/скайп/имейл в конце концов)? P.S. Только зайдя к ним на сайт, понял суть этой системы. ИМХО здесь проблема даже еще глубже - попробуй объясни покупателю, что это за 4 цифры и зачем ему их куда-то называть? :-)
  17. Например так: SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa или вот еще SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' явно же запросы не полные или посмотрите мое сообщение выше со скриншотом медленных запросов - там тоже обрезано на полуслове местами
  18. 1. Наверное да, но тогда ведь теряется совместимость с версиями (хотя мне уже не страшно :-)) 2. Да, это функция getAttributesByCategoryId так резвится Скорее всего из-за кол-ва товаров в категории (4К), потому что самих уникальных атрибутов там 10 шт во всего 1-й группе. P.S. Скоро попробую изменения с вашей статьи снова прикрутить к движку, и перемерять результаты, а то старый дебаггер оказывается врал, а вот новый вроде ничего P.P.S. Подумал, что о совместимости в теме про оптимизацию вообще нет смысла говорить - либо оптимизируем, либо радуемся новым обновлениям НЕоптимизированного медленного движка :-)
  19. Не могу найти - нет числовых значений или ограничения на длину запросов к базе. Подскажите, где (или как) они обрезается (около 300 символов)?
  20. У нас когда был онлайн-чат на сайте, писали всякие зануды, которым лень было что-то искать, но покупать они еще не хотели (зарплата через неделю/с женой нужно поговорить/вот было бы дешевле... и тп), в итоге отказались от чатов вообще - по телефону или лично продавать гораздо легче, а вот чат (точнее, его анонимность) позволяют таким занудам просто закрыть чат когда надоест. Продаж с него было - кот наплакал :-)
  21. К сожалению, дебаггер обрезает запросы, и я еще не понял как их полностью вывести, но если устроят начальные куски их (по идее из них видно, что это за запрос), то вот такая картина (холодный старт): SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id 0.19743750 s SELECT DISTINCT m.`manufacturer_id`, m.`name` FROM `manufacturer` m LEFT JOIN product p ON(p.manufacturer_id=m.`manufacturer_id`) LEFT JOIN product_to_category p2c ON(p.product_id=p2c.product_id) LEFT JOIN product_to_store p2s ON(p.product_id=p2s.product_id) WHERE p.status = '1' AND p.date_availa 0.10013175 s SELECT DISTINCT pa.text, a.`attribute_id`, ad.`name`, ag.attribute_group_id, agd.name as attribute_group_name FROM `product_attribute` pa LEFT JOIN attribute a ON(pa.attribute_id=a.`attribute_id`) LEFT JOIN attribute_description ad ON(a.attribute_id=ad.`attribute_id`) LEFT JOIN attribute_group ag 0.56159700 s SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-03-12 23:59:59') AND (pd2.date_end = ' 0.01184400 s Последний запрос повторяется столько раз, сколько товаров выводится (у меня 12), и каждый раз так же медленно выполняется. Страница категории, 12 товаров на страницу, из модулей только список категорий в шапке и сбоку (всего пара десятков, без подсчета), ну и фильтрпро с фильтрацией по цене, производителю и одной единственной группе атрибутов (тип товара).
×
×
  • Create New...

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.