Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

SiSya

Новачок
  
  • Публікації

    35
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем SiSya

  1. Хэллоу. Спешу поделиться небольшим солюшеном, который научит ваш opencart кэшировать запросы, а не каждый раз по-новой обращаться к базе.

    Заодно, если найдутся знающие люди, буду рад, если раскритикуют и предложал лучше.

    Код не мой, нашел на гитхабе после инцидента с превышением квоты процессорной работы у хостера. Человек использует в продакшене.

    Собственно, запросив лог медленных запросов за 4 часа у хостера, обнаружил узкое горлышко:

    Цитата

    # Profile
    # Rank Query ID           Response time  Calls R/Call V/M   Item
    # ==== ================== ============== ===== ====== ===== ==============
    #    1 0x2B7932AFEE815737 118.9284 76.5%  1087 0.1094  0.07 SELECT oc_category_path oc_product_to_category oc_product oc_product_description oc_product_to_store
    #    2 0xCAC7941701616847   9.4839  6.1%    94 0.1009  0.00 SELECT oc_seo_url
    #    3 0xDE667724A1472B8E   7.9299  5.1%    51 0.1555  0.28 SELECT oc_review oc_product_discount oc_product_special oc_product oc_product_description oc_product_to_store
    #    4 0xC147C0DB8F6F746A   3.5260  2.3%    35 0.1007  0.00 SELECT oc_product_discount oc_product_special oc_product_reward oc_stock_status oc_weight_class_description oc_length_class_description oc_review oc_product oc_product_description oc_product_to_store oc_manufacturer
    #    5 0xB1D3084A5DB560C3   1.6027  1.0%     7 0.2290  0.43 SELECT oc_product oc_product_description
    #    6 0xF75E926F33E20E3D   1.3082  0.8%    13 0.1006  0.00 SELECT oc_product_attribute oc_attribute oc_attribute_description
    #    7 0x270EA830AC8D7EE7   1.1103  0.7%    11 0.1009  0.00 SELECT oc_category oc_category_description oc_category_to_store
    #    8 0x2AD6CC66AE9FE12C   1.0053  0.6%    10 0.1005  0.00 SELECT oc_review oc_product_discount oc_product_special oc_product_to_category oc_product oc_product_description oc_product_to_store
    #    9 0x27E53545A394E066   0.9096  0.6%     9 0.1011  0.00 SELECT oc_theme
    #   10 0x51A9CCA928B1D4F1   0.9079  0.6%     9 0.1009  0.00 SELECT oc_product_attribute oc_attribute oc_attribute_group oc_attribute_group_description
    #   11 0xBEB5454CE18270B7   0.8038  0.5%     8 0.1005  0.00 SELECT oc_setting
    #   12 0xC299D08C9A944789   0.7034  0.5%     7 0.1005  0.00 DELETE oc_cart
    # MISC 0xMISC               7.3385  4.7%    73 0.1005   0.0 <40 ITEMS>

     

    Суть работ:

    Цитата

    Anyway, here is example of the solution we are currently using...

    File: /catalog/model/catalog/product.php
    Function: getTotalProducts
    At the end of the function replace:

    
    $query = $this->db->query($sql);
    return $query->row['total'];
    

    With:

    
    $sql_name = md5($sql);
    
    $final_total = $this->cache->get('product.count.' . $sql_name);
    if(!$final_total){
        $query = $this->db->query($sql);
        $final_total = $query->row['total'];
        $this->cache->set('product.count.' . $sql_name, $final_total);
    }
    
    return $final_total;
    

     

    Реплейсим исходники и спустя сутки наблюдаем такую картину:

     

    Спойлер

    image.png.f54367431d208074f682c4b52284ea46.png

    Малым количеством телодвижений можно добиться хороших результатов.

    Кэш обновляется после изменения в структуре БД. Багов пока не наблюдаю.

    В большинстве своем, это поможет тем, у кого в продакшене 1000+ товаров.

    Был краток.

    Я всё.

     

    • +1 3
  2. 10 часов назад, Vetroff сказал:

     

    где что вывести-то нужно, не понял.

     

    внутри атрибута можно так  {% if attribute.attribute_id == 15 %}

     

    Нужно вывести определенный атрибут по его id. Сейчас попробую Ваш вариант.

    УРА. Я на других ресурсах не видел подобный формат синтаксиса для третьего твига. Только через точку.

    Спасибо Вам огромное!

  3. Здравствуйте.

    Не первый месяц прихожу к проблеме с массивом атрибутов и парсингом определённого из них.

    В идеале, если воспользоваться мануалами, которые описывают вывод без шаблонизатора, получается:

    {% for attribute_group in attribute_groups %}
    	{% for attribute in attribute_group.attribute %}
    		{% if attribute.attribute_id.15 %}
                asdas
    123 
    		{% endif %}
    	{% endfor %}
    {% endfor %}

    Пробовал разные вариации. Даже с {% for attribute_id in attribute_group.attribute_id %}, но тщетно.

    В контроллере переменную объявил, да

    'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),

    Но в итоге ничего не помогает.

    Opencart 3.0.2.0

    Ткните носом, пожалуйста, в каком месте я неправ?

    Заранее благодарю.

  4. Здравствуйте.

    Версия OC: 3.0.2.0.

    На днях купил замечательный модуль быстрой покупки.

    Суть проблемы:

    Настройки конфигурационного файла .ocmod.xml не применяются к тому или иному шаблону, если я хотя бы даже просто открыл его в родном редакторе и нажал кнопку "сохранить" без каких либо изменений.

    Пример: Самый стандартный шаблон /common/cart.twig, изменений которого нет в истории изменений шаблонов. К нему применен конфиг и все замечательно, кнопка "Купить в один клик" есть. НО! Стоит мне только просто открыть его, нажать "сохранить", так сразу кнопка пропадает и .ocmod.xml как будто бы вообще не видит этот шаблон.

    Обновлял настройки модификаций в разных последовательностях, чистил кэш, но всё равно не помогает.

    На данном этапе приходится вручную вырывать куски кода и вставлять их в шаблон.

    С чем может быть связана проблема?

    Заранее благодарю.

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.