Страниц: [1] 2 3  Все   Вниз
  Отправить эту тему    Печать  
Автор Тема: IgnoreOnceVisitedSites — помогает кэшировать с умом, экономя ресурс HDD/SSD  (Прочитано 50215 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« : 07 мая 2011, 18:40:02 »

IgnoreOnceVisitedSites — расширение HC которое помогает не кэшировать сайты, на которые Вы, скорее всего, больше не зайдёте, или же заходите, но уж очень редко. Таким образом уменьшается количество мертвого груза и экономится ресурс дисковой подсистемы.

О проблеме кэширования файлов всех подряд сайтов, которые я посещаю, я задумывался и ранее, проводя регулярные чистки в кэше HC, но когда у меня появился SSD диск в качестве основного, вопрос встал значительно серьезнее. Как Вы знаете, эти диски имеют ограниченный ресурс циклов перезаписи ячеек памяти, и для меня стало очень важно настроить HC так, чтобы он старался кэшировать только то, что более вероятно будет запрашиваться в будущем.

Исходя из этой логики, я решил, что разумно будет кэшировать регулярно посещаемые сайты и стараться избегать кэширования множества сайтов, который я открываю всего раз в жизни, например при просматривании сайтов из результатов поиска.

В результате я попробовал написать это расширение, которое делает следующее:
1) Считает количество визитов на сайт;
2) Если по истории сайт посещается регулярно — для него включается кэширование. Первых пару визитов абсолютно ничего не кэшируется для нового сайта.

Технические особенности:
- Если на странице регулярно посещаемого сайта используются файлы из другого домена (например картинки хостятся на специальном сервисе), то такие материалы также будут закэшированы. Это работает через проверку Referrer в запросах.
- Игнорируются запроси на получение favicon-иконки сайтов. Множество таких запросов делается со страниц результатов поиска Google/Яндекс. Такое игнорирование сделано, чтобы не считать такой запрос за визит на сайт и, соответственно, не кэшировать большое множество таких иконок.
- На вкладке Монитор, в колонке Правила, появятся поясняющие записи:
    New domain: domain.com
    Checking referer (domain.com) - Visited 1/3
    Referrer handycache.ru - Visited often, З.3
    Skipping favicon request

Настройки (v1.0.0 — значения можно подправить в исходнике, в специальном блоке Config; v2.0.x — через кнопку «Настройки расширения»):
- Сайт засчитывается в "регулярно посещаемые" после 3 визитов и тогда он начинает кэшироваться.
- Визитом считается запрос к домену, если со времени засчитанного предыдущего визита прошло 3 дня и более. Часто можно 2-3 дня просматривать сайт (в таком промежутке времени прекрасно справляется кэш браузера), и после этого на него не возвращаться, и чтобы не насчитать за это время 3 визита и не зачислить сайт в регулярно посещаемые, сделана проверка на минимальный интервал между визитами.
- Если со времени последнего визита на сайт прошло 2 месяца, и сайт ещё не набрал требуемого количества посещений (3 в моём случае), то такой сайт удаляется из базы, как посещаемый не регулярно. То есть, чтобы сайт начал кэшироваться, эго нужно посетить минимум 3 раза с интервалом не более 2 месяцев. А кратчайшей же строк зачисления в "регулярные" — 3 визита с интервалом не менее 3 дня (или же найти соответствующий домен в базе и подправить количество посещений ;) — точнее, найти файл с именем домена и сделать его размер равным 2 байта, исходя из организации базы)


Результаты
По результатам почти полугода использования этого расширения могу сказать, что эффективность использование кэша по статистике совсем не ухудшилась, а вот размер кэша на диске уже не разбухает так сильно, как ранее, и чистить теперь уже не так сильно необходимо. Еще исчезло неприятное ощущение, при открытии множества новых сайтов из результатов поиска, с мыслями: "и всё это сейчас пишется на диск :(". Ну и за свой SSD я теперь более спокоен, что не расходую его ресурс слишком сильно :)

Установка
v1.0.0
Файл IgnoreOnceVisitedSites.lua должен находиться в папке Extensions, для работы ему нужна папка с именем "IgnoreOnceVisitedSites DB". То есть нужно распаковать содержимое архива в папку Extensions и установить расширение через HC. Расширение должно находится прямо в папке Extensions, не в подпапке.
Файл lfs.dll (нужен для файловых операций) должен находится в папке HC (на одном уровне с HandyCache.exe и lua5.1.dll)
v2.0.1
Распаковать архив в папку Extensions и установить расширение.


История исправлений, которые были внесены благодаря участникам форума.

v2.0.0 (переписано было практически всё)
- Статистика больше не базируется на файлах (больше нет проверки существования, размера, даты модификации, писания в файл при обработке запроса)
- Статистика хранится в IgnoreOnceVisitedSitesDB.txt, конфиг в IgnoreOnceVisitedSites.ini
- Сделан UI для настроек и просмотра статистики с сортировкой по домену. Изменить настройки теперь можно через кнопку «Настройки расширения» (находится справа от списка установленных расширений). В значениях можно указывать не только целые числа, но и вида: 0.5, 2.5
- Работает автоматическое сохранение статистики каждый час, а также при завершении работы
- lfs.dll больше не используется

v2.0.1
- расширения теперь находит свои файлы, если поместить его в отдельную папку
- улучшена обработка запросов, теперь расширение не вызывается, если запрос берется из кэша, или был блокирован
- строки, которые расширение выводит в колонке "Правила", теперь не должны затирать сообщение от других расширений
- сокращено сообщение о проверке Referrer в мониторе
- добавлено удаление глобальных переменных при закрытии расширения

v2.1.0
- сделана поддержка кириллических доменов вида "яндекс.рф"
- добавлен вывод даты последнего визита в читабельном виде в окне «Настройки расширения»

* IgnoreOnceVisitedSites v1.0.0.zip (10.31 Кб - загружено 157 раз.)
* IgnoreOnceVisitedSites v2.1.0.zip (5.75 Кб - загружено 472 раз.)
« Последнее редактирование: 30 ноября 2011, 14:02:04 от DenZzz » Сообщить модератору   Записан
sunserg10
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 322


« Ответ #1 : 07 мая 2011, 20:20:29 »

Inversion
Где сохраняется счетчик посещений, если HC выгружается /при выключении ПК/?
Добавлено: 07 Мая 2011, 20:00:16

Разобрался.
Код:
--conf_daysBetweenVisits = 20  -- 20 seconds for testing
Сообщить модератору   Записан
демон
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #2 : 07 мая 2011, 23:34:29 »

плохо устроено расширение - нужо все кешировать ипотом выводить список сайтов посещенных мало раз для удаления
Сообщить модератору   Записан
alex77
Старожил
****

Репутация: +11/-1
Offline Offline

Сообщений: 482



« Ответ #3 : 08 мая 2011, 04:54:23 »

касаемо второго файла lfs.dll
тут обнаружилось, что он у меня уже есть его размер - 12800 байт (12,5 Кбайт)
К сожалению, вспомнить почему и из-за чего ставил уже не могу.
его нужно заменить или расширение сможет работать с текущим?

Прикрепил его

* lfs.dll (12.5 Кб - загружено 153 раз.)
Сообщить модератору   Записан
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« Ответ #4 : 08 мая 2011, 11:09:42 »

плохо устроено расширение - нужо все кешировать ипотом выводить список сайтов посещенных мало раз для удаления
Мне как раз такой сценарий не подходит. При таком использовании не экономится ресурс SSD.

касаемо второго файла lfs.dll
...
его нужно заменить или расширение сможет работать с текущим?
Попробовал Ваш файл — работает и с ним.
Сообщить модератору   Записан
демон
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #5 : 08 мая 2011, 11:31:43 »

Мне как раз такой сценарий не подходит. При таком использовании не экономится ресурс SSD.


но зато удобно кеш чистить
Сообщить модератору   Записан
alex77
Старожил
****

Репутация: +11/-1
Offline Offline

Сообщений: 482



« Ответ #6 : 08 мая 2011, 12:39:25 »

Попробовал Ваш файл — работает и с ним.
тогда остается понять, в чем же различие? и какой все же лучше?)
Сообщить модератору   Записан
Михаил
Модератор
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #7 : 09 мая 2011, 10:38:12 »

Inversion
Дополнение полезное. Спасибо.
При совершенствовании посмотрите, плиз, в сторону отказа от файловых операций при обработке запросов.
Сообщить модератору   Записан
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« Ответ #8 : 09 мая 2011, 10:47:16 »

При совершенствовании посмотрите, плиз, в сторону отказа от файловых операций при обработке запросов.
Увы, я не нашел иного способа сохранять информацию между запросами. Если кто знает, подскажите пожалуйста.
Сообщить модератору   Записан
Михаил
Модератор
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #9 : 09 мая 2011, 10:54:51 »

Данные (домен/дата посещения/число посещений) сохраняем в одном файле. При инициализации расширения читаем этот файл в таблицу с идентификацией элементов по имени домена, записываем эту таблицу в память (hc.set_global). В обработчике каждого запроса работаем только с этой таблицей (hc.get_global_table_item/hc.set_global_table_item). При завершении работы расширения (можно и изредка в ходе работы) сохраняем эту таблицу в файл.
Сообщить модератору   Записан
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« Ответ #10 : 09 мая 2011, 11:04:43 »

Михаил
Вот спасибо! Я попробую.
Добавлено: 09 Мая 2011, 10:56:57

тогда остается понять, в чем же различие? и какой все же лучше?)

Если просматривать информацию о файле плагином Fileinfo в TotalCommander, то всплывают 2 даты в разделе FILE HEADER:
Для моего файла — Time Date Stamp: 4B4FE3A3h  -> 15/01/2010  05:40:19
Для Вашего — Time Date Stamp: 4988A9F7h  -> 03/02/2009  22:32:55
Это точно не даты создания/модификации файла, так что можно предположить, что эти даты как-то связаны со сборкой файла, и более поздняя дата указывает просто на более позднюю сборку.
« Последнее редактирование: 09 мая 2011, 11:09:37 от Inversion » Сообщить модератору   Записан
alex77
Старожил
****

Репутация: +11/-1
Offline Offline

Сообщений: 482



« Ответ #11 : 09 мая 2011, 11:32:59 »

Inversion
понятно
Сообщить модератору   Записан
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« Ответ #12 : 10 мая 2011, 02:32:34 »

Результаты работы по наставлению Михаила:

v2.0.0 (переписано было практически всё)
- Статистика больше не базируется на файлах (больше нет проверки существования, размера, даты модификации, писания в файл при обработке запроса)
- Статистика хранится в IgnoreOnceVisitedSitesDB.txt, конфиг в IgnoreOnceVisitedSites.ini
- Сделан UI для настроек и просмотра статистики с сортировкой по домену. Изменить настройки теперь можно через кнопку «Настройки расширения» (находится справа от списка установленных расширений). В значениях можно указывать не только целые числа, но и вида: 0.5, 2.5
- Работает автоматическое сохранение статистики каждый час, а также при завершении работы
- lfs.dll больше не используется

Оказалось, что я руководствовался файлом HCExtensions.html за 05.2009, а там ещё не были доступны set_global-функции. Вот почему всё было устроено так странно изначально.


Помогите, пожалуйста, протестировать новую версию. Если кто может, посмотрите в код, там всего 300 строчек с комментариями.

Также, подскажите пожалуйста, возможно ли здесь изменить первое сообщение темы? Или лучше бы даже удалить эту тему и создать новую с описанием уже новой версии.

Всем спасибо!
Отдельное спасибо Михаилу, за то что указал на недостаток и сразу предложил путь к решению.

* IgnoreOnceVisitedSites.zip (4.73 Кб - загружено 176 раз.)
Сообщить модератору   Записан
DIGGER
Старожил
****

Репутация: +14/-3
Offline Offline

Сообщений: 312



« Ответ #13 : 10 мая 2011, 04:34:51 »

Цитировать
возможно ли здесь изменить первое сообщение темы?
Только модераторам/админам. Недостаток движка форума.

Спасибо за плагин. +
Протестирую завтра на работе (по свободе) и отпишусь.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #14 : 10 мая 2011, 14:00:14 »

Inversion

Я по привычке положил файлы расширения IgnoreOnceVisitedSites в отдельную папку внутри Extensions, чтобы был порядок в общем каталоге, но расширение не смогло найти свои файлы!

Жестко прописывать g_name и g_extensionRoot внутри самого расширения я считаю неправильным. Зачем, если их можно выделить из переменной hc.script_name:

Код:
g_name = re.find(hc.script_name, [[([^\\]+)\.lua$]], 1)
g_extensionRoot = re.replace(hc.script_name, g_name..[[\.lua$]], '')

Добавлено: 10 Мая 2011, 13:50:35

Или лучше бы даже удалить эту тему и создать новую с описанием уже новой версии.

Удалять не нужно, пусть остается для истории. Вдруг кому-то больше понравилась старая версия... Улыбка
Если нужно, я могу поправить первый пост. Напиши как.
Вообще, свежее описание работы расширения и последние изменения можно подробно описывать в отдельном файле и класть его в архив вместе с новой версией расширения, а на форуме приводить только краткие анонсы последних изменений.
« Последнее редактирование: 10 мая 2011, 15:46:59 от DenZzz » Сообщить модератору   Записан
Михаил
Модератор
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #15 : 10 мая 2011, 15:22:48 »

Спасибо за v.2, стало на порядок лучше. Есть еще несколько пожеланий:
1. Использование обрабочика RequestHeaderReceived для решения вопроса, писать в кэш или нет - не лучший вариант. Если заменить его на BeforeRequestHeaderSend, то все запросы, которые блокируются или берутся из кэша, свободно выполнятся без вмешательства расширения.
2. Чтобы выведенная предыдущими расширениями в строку "Правила" монитора информация не затиралась, делается так:
hc.monitor_string = hc.monitor_string .. MyStr
3. Использование table.foreach не приветствуется в нынешней версии LUA и вообще не будет поддерживаться в последующих. Вместо этого можно, к примеру, делать так:
for param,value in pairs(hc.get_global(g_name)) do
   f:write(param:sub(5)..' = '..value..'\r\n')
end
4. В обработчике Destroy надо очищать все глобальные переменные, иначе они останутся висеть в памяти. К примеру, так:
hc.set_global(g_name)
5. В довесок к тому, о чем постом выше писал DenZzz: текущая системная папка может быть любой, не обязательно та, откуда запущено расширение. Поэтому чтение и запись файлов будут или выдавать ошибку, или производиться в самые неожиданные места диска. Нужно использовать hc.script_name.
6. В монитор хорошо бы выводить только необходимый минимум информации, не забивая все остальное.
« Последнее редактирование: 10 мая 2011, 15:37:07 от Михаил » Сообщить модератору   Записан
Inversion
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 17


WWW
« Ответ #16 : 10 мая 2011, 22:47:04 »

Ясно. Попробую еще поработать.
Сообщить модератору   Записан
igorek
Новичок
*

Репутация: +6/-0
Offline Offline

Сообщений: 36


« Ответ #17 : 14 мая 2011, 21:59:05 »

Я бы предложил немного изменить алгоритм кэширования сайтов.
При первом посещении сайта выводить краткое сообщение в браузере:
  Кэшировать данный домен  example.site? И кнопку Да или Нет.
А дальше уже по вашему алгоритму, без счетчиков.
Бывают сайты которые полезно кэшировать, например некоторые форумы, ютуб,
а сайты типа rbc.ru не имеют смысла кэшировать, хотя могут посешать многократно.
Сообщить модератору   Записан
DIGGER
Старожил
****

Репутация: +14/-3
Offline Offline

Сообщений: 312



« Ответ #18 : 14 мая 2011, 23:14:12 »

Цитировать
При первом посещении сайта выводить краткое сообщение в браузере
Категорически против, я этого своей маме не осилю пояснить. Или же делать, но опционально.
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #19 : 27 мая 2011, 23:09:06 »

IgnoreOnceVisitedSites — расширение HC которое помогает не кэшировать сайты, на которые Вы, скорее всего, больше не зайдёте, или же заходите, но уж очень редко. Таким образом уменьшается количество мертвого груза и экономится ресурс дисковой подсистемы.

Позволю себе не согласиться. Не-а!

Как раз редко посещаемые сайты могут содержать уникальную/эксклюзивную/важную информацию.
А что представляют собой сайты, которые посещаются регулярно и часто?
Это всякие форумы, сайты новостей и т.п. Таким образом они содержат кучу флуда, троллинга и т.п. мусора - т.е. они содержат какую-то сиюминутную информацию, про которую можно сказать "прочитал, выбросил и забыл"

Чтобы моя мысль была более понятна, проиллюстрирую её конкретным примером "из жизни".

Я, к примеру, не посещаю каждый день сайт, где описывается как Эйнштейн вывел свои формулы теории относительности. Даже раз в месяц не посещаю. А информация, содержащаяся на этом сайте, для меня очень важна

В то же время форумы на ixbt, sources.ru, и прочие я посещаю ежедневно по несколько раз (чтобы пофлудить/потроллить о политике, кино, сексе и т.п.). Но информацию с них я при всём желании не смогу назвать важной/ценной.

В связи с этим я считаю, что нужно кшировать ВСЕ файлы.
Но сделать два кэша: для мусора (особенно часто посещаемых  сайтов) и для важной информации (редко посещаемых сайтов).
Это будет удобно и для Архивариуса 3000. Чтобы найти о чём Вы троллили неделю назад Вы ищите в кэше для мусора. А если Вы ищите ответ на какой-то серьёзный вопрос, то ищете архивариусом 300 в другом кэше.
Добавлено: 27 Мая 2011, 22:59:07

и экономится ресурс дисковой подсистемы.

О проблеме кэширования файлов всех подряд сайтов, которые я посещаю, я задумывался и ранее, проводя регулярные чистки в кэше HC, но когда у меня появился SSD диск в качестве основного, вопрос встал значительно серьезнее. Как Вы знаете, эти диски имеют ограниченный ресурс циклов перезаписи ячеек памяти, и для меня стало очень важно настроить HC так, чтобы он старался кэшировать только то, что более вероятно будет запрашиваться в будущем.

Исходя из этой логики, я решил, что разумно будет кэшировать регулярно посещаемые сайты и стараться избегать кэширования множества сайтов, который я открываю всего раз в жизни, например при просматривании сайтов из результатов поиска.

Странная у Вас какая-то логика. Балбес!

Вы полагаете, что основной вклад в быстрый износ харда/SSD
вносят редко посещаемые, а значит и редко записываемые на хард/SSD сайты?

Т.е. сайт, который Вы закэшировали один раз за год вызовет бОлший износ, чем форум, который Вы посетили 150 000 раз за год и каждый раз кэшировали на хард/SSD?
« Последнее редактирование: 27 мая 2011, 23:19:17 от Доктор ТуамОсес » Сообщить модератору   Записан
Страниц: [1] 2 3  Все   Вверх
  Отправить эту тему    Печать  

 
Перейти в: