Jump to content
Sign in to follow this  
halfhope

Класс кэширования, без использования функции glob

Recommended Posts

getCategories()

Хотя сам метод и кешируем... но все же...

 

Вот видите, всего 1 попадание.

Share this post


Link to post
Share on other sites

я ошибся...

 

getCategories() - не кешируем.

 

Тут и попадания нет

 

Но если его закешировать... то минус одно обращение, а в случае большого количества категорий...то и два

 

Вложенность категорий может быть в основном меню, в модуле категорий, на странице категорий.

Share this post


Link to post
Share on other sites

Это уже выходит за пределы класса и поставленной задачи. Насколько я знаю кэшер от @snastik отлично справляется с этой задачей. 

Share this post


Link to post
Share on other sites

Никакой статистической ошибки тут нет. Все дело в самой статистике и частоте запросов (кол-ве посетителей), а в нашем случае с ApacheBenchmark.

У вас нет чистоты эксперимента.

Вот что дал мой эксперимент 1.000 файлов с одинаковыми данными:

Первый столбец первая проверка, второй повторная (для отслеживания влияние статического кеша)

fileatime (мало данных)    0.0914     0.02314

fileatime (много данных)   0.09086    0.02328

file_get_contents (мало данных)     0.29642    0.175

file_get_contents (много данных)    0.37888    0.24596

 

Вывод fileatime дает преимущество. Потому что инвалидация происходит как минимум в три раза быстрее.

Да, fileatime увеличивает время получения данных. Но эта величина очень несущественная, особенно учитывая статкеш. К тому же конечный файл в данном случае имеет меньший вес из-за отсутствия временной метки. Что нивелирует эту задержку.

  • +1 1

Share this post


Link to post
Share on other sites

я ждал не таких тестов. ни тесты ab, ни тесты одной php функции fileatime/file_get_contents не покажут ясной картины

кеш в opencart выполняет 3 функции : get, set и delete

причём set должен вызываться сразу если get вернул пустое значение

 

нужен тест который делает set например 10,000 значений, затем get эти 10,000 значений

Share this post


Link to post
Share on other sites

я ждал не таких тестов. ни тесты ab, ни тесты одной php функции fileatime/file_get_contents не покажут ясной картины

кеш в opencart выполняет 3 функции : get, set и delete

причём set должен вызываться сразу если get вернул пустое значение

 

нужен тест который делает set например 10,000 значений, затем get эти 10,000 значений

Тут есть сложность. инвалидация то происходит практически в случайном порядке.

Выводы можно сделать из моих тестов. set будет одинаков. А get с fileatime незначительно медленне без инвалидации. И гораздо быстрее при инвалидации.

 

В данном классе есть глобальная проблема - одновременная инвалидация кеша для одной страницы. Ведь кеш генерируется сразу и на одно и то же время для каждой страницы.

Share this post


Link to post
Share on other sites

я ждал не таких тестов. ни тесты ab, ни тесты одной php функции fileatime/file_get_contents не покажут ясной картины

кеш в opencart выполняет 3 функции : get, set и delete

причём set должен вызываться сразу если get вернул пустое значение

 

нужен тест который делает set например 10,000 значений, затем get эти 10,000 значений

 

Бессмысленный тест, очевидно же, что новый класс быстрее, тем более при 10 тыс файлов. 

 

https://github.com/halfhope/OpenCart-cache.php-without-glob

Share this post


Link to post
Share on other sites

могу подбросить идею не проверять через file_exists(), а проверять is_file()

 

Я проводил тесты - is_file при наличии файла - быстрее.

 

зы... только ради эксперимента.

  • +1 1

Share this post


Link to post
Share on other sites

жизнью кеша можно управлять

 


<?php

class Cache {
    private $expire = 3600;
    public function __construct($expire = 3600) {
        $this->expire = $expire;
    }

и в index.php

// Cache
$cache = new Cache(7200);

Share this post


Link to post
Share on other sites

Попробую использовать этот метод

Share this post


Link to post
Share on other sites

А в этом случае решена проблема одновременного автоматического удаления кеша?

Здесь советуют сделать его случайным:

http://opencartmodules.ru/used-here/cache_update

 

Идем в \system\library\cache.php

И в функции

public function set($key, $value) {

 

Дописываем случайное значение к времени

$file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.' . (time() + $this->expire+mt_rand(1,$this->expire));
Edited by ProfiSale

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By SergeTkach
      Допустим, есть файл cache.sticker.bestseller.1560966030, который создал модуль из комплектации шаблона.
      И в другом модуле стикеров, идет запрос кеша через
      $sticker_cache = $this->cache->get('sticker'); В итоге, данные из файла cache.sticker.bestseller.1560966030 оказываются в переменной $sticker_cache...
      А вот так все ок
      $sticker_cache = $this->cache->get('prefix_sticker'); Ситуация наблюдается в OpenCart 2.1.0.2 - в других, еще не пробовал. Если что - опишусь.
    • By Boriskin
      300.00 руб
      Скачать/Купить дополнение


      Продвинутое кэширование - BrainCache
      ИНСТРУКЦИЯ ПО УСТАНОВКЕ
      Что такое кэш запросов?
      Кэш запросов можно представлять себе как хеш, ключами которого являются запросы, а значениями — результаты запросов.
      В OpenCart уже есть поддержка кэша! Зачем мне нужен BrainCache?
      Использование стандартного метода кэширивания предполагает под собой работу со всеми файлами, где нужно кэширивание со всеми вытекающими отсюда последствиями:
      децентрализованный доступ к параметрам кэшеривания
      наличие множественных вызовов методов работы с кэшом в рамках всего MVC
      отсутствие правил и исключений кэшеривания для каждого запроса
      отсутствие фильтрации запросов, т.е кэшиются запросы без анализа строк
      отсутствие фильтрации прав доступа вызовов кэшеривания по Имени файла, Классу и Методу

      Что умеет BrainCache?

      1.0 beta поддержка профилей настроек кэшеривания;
      централизованный контроль и обработка всех вызовов и обращений к БД MySQL;
      выводить часто изменяющиеся данные в отдельный массив и устанавливать для каждого элемента время кэша, где 0 — запрет кэшеривания. Для удобства добавлены константы с предопределенным значением времени: МИНУТА, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, ГОД, ВИСОКОСНЫЙ ГОД;
      устанавливать стандартное значение времени кэша, при отсутвии удовлетворяющих правил кэшеривания (если правила для запроса отсутствуют или не подошли);
      установка ограничений доступа к таблицам БД не относящихся к магазину, но находящихся в рамках одной базы (Сценарий выдаст предупреждение и завершит работу);
      установка пути директории кэшеривания для текущего профиля;
      установка ограничения доступа к кэшу по времени для Классов, Методов классов, Метода Класса выполняющих запрос
      установка ограничения доступа к кэшу по времени для пути и имени выполняющих запросов скриптов;

      Фиксы:
      Исправлена ошибка доступа к админ-панели
      Оптимизирован цикл поиска по ассоционному массиву, разделена логика условий
      Добавлен редирект на страницу 404, в случае срабатывания блокирующего условия

      Совместимость:
      Проверялось на v1.5.4.1, но должен быть совместим со всеми версиями, потому, что для установки не нужно вносить множественные изменения.
      Добавил Boriskin Добавлено 13.03.2013 Категория Кэширование, сжатие, ускорение  
    • By le75
      Ребят, кто сталкивался или подскажет при включении кэшированя на стороне браузера в .htaccess, не корректо работает админ панель: менеджер изображений, товары, добавление товаров и т.д. Тоесть отображается всё закешированное ранее, и только после очистки кеша браузера видны изменения(но это до первых новых правок). На стороне пользователя работает корректно и без очистки кэша. Тема дефолтная и кэширование стандартное если что:
      <ifModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript </ifModule> <ifModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 days" ExpiresByType image/x-icon "access plus 1 month" ExpiresByType image/jpeg "access plus 4 weeks" ExpiresByType image/png "access plus 30 days" ExpiresByType image/gif "access plus 43829 minutes" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 604800 seconds" ExpiresByType application/javascript "access plus 604800 seconds" ExpiresByType application/x-javascript "access plus 604800 seconds" ExpiresByType text/html "access plus 43200 seconds" ExpiresByType application/xhtml+xml "access plus 600 seconds" ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" </ifModule>
    • By supmener
      Нашёл несколько ссылок. Прошу поделиться опытом, кто уже тестировал, чтобы облегчить ознакомление с этими решениями. На что ещё можно обратить внимание?
       
      Сборник советов
      http://fedorenko.pp.ua/kak-uskorit-vash-magazin-na-opencart/
       
      Speed Thrust
      http://www.opencart.com/index.php?route=extension/extension/info&extension_id=26417&filter_search=cache&filter_download_id=43&page=2
       
      Free Page Cache for OC 2.X (V2pagecache)
      http://www.opencart.com/index.php?route=extension/extension/info&extension_id=19079&filter_search=cache&filter_download_id=44
      http://forum.opencart-russia.ru/threads/v2pagecache-kehshirovanie-uskorenie-opencart-2-0-russkaja-versija.1490/
       
      Лог медленных запросов
      https://opencartforum.com/files/file/2764-%D0%BB%D0%BE%D0%B3-%D0%BC%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-opencart-2x-ocmod/
       
      BOOST - ускоритель OpenCart + AJAX загрузка модулей 2.0
      https://opencartforum.com/files/file/2612-boost-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C-opencart-ajax-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9/
       
    • By supmener
      После установки товаров нужно создать автоматически обращение к каждой странице с заданной периодичностью, чтобы картинки закэшировались и сайт не нагружался частыми обращениями. Как это лучше сделать? Или может настройками или модулем каким - то это можно реализовать? Хочу заранее, так как самый первых посетителей не хочется ставить в неуютное положение при посещении сайта.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.