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

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


Recommended Posts

я ошибся...

 

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

 

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

 

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

 

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

Надіслати
Поділитися на інших сайтах

Никакой статистической ошибки тут нет. Все дело в самой статистике и частоте запросов (кол-ве посетителей), а в нашем случае с 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
Надіслати
Поділитися на інших сайтах

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

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

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

 

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

Надіслати
Поділитися на інших сайтах

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

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

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

 

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

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

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

 

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

Надіслати
Поділитися на інших сайтах

я ждал не таких тестов. ни тесты 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

Надіслати
Поділитися на інших сайтах

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

 

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

 

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

  • +1 1
Надіслати
Поділитися на інших сайтах

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

 


<?php

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

и в index.php

// Cache
$cache = new Cache(7200);
Надіслати
Поділитися на інших сайтах

  • 2 years later...

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

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

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));
Змінено користувачем ProfiSale
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

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

Important Information

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