Страниц: 1 2 3 [Все]   Вниз
  Отправить эту тему    Печать  
Автор Тема: IgnoreOnceVisitedSites — помогает кэшировать с умом, экономя ресурс HDD/SSD  (Прочитано 50216 раз)
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 от Доктор ТуамОсес » Сообщить модератору   Записан
DIGGER
Старожил
****

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

Сообщений: 312



« Ответ #20 : 28 мая 2011, 12:33:05 »

Цитировать
…чем форум, который Вы посетили 150 000 раз за год и каждый раз кэшировали на хард/SSD?
Наверно я делаю что-то не так, потому что у меня только при первом посещении идёт запись в кэш.
Да и вообще: не хотите не используйте дополнение.
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #21 : 28 мая 2011, 12:50:44 »

Наверно я делаю что-то не так, потому что у меня только при первом посещении идёт запись в кэш.
Нет.
Наверное я "что-то делаю не так"Грустный

Потому что когда на форумах странички обновляются/изменяются (а изменяются они зачастую каждые 5 минут), то мне (чтобы файлы в кэше соответствовали файлам на сервере) приходится их заново записывать в кэш.

Наверное я что-то делаю не правильно и существует способ (про который не известно мне и известно Вам) обновлять файлы в кэше не перезаписывая их.
Откройте секрет: как Вы это делаете?
Сообщить модератору   Записан
DIGGER
Старожил
****

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

Сообщений: 312



« Ответ #22 : 28 мая 2011, 12:58:35 »

Цитировать
…обновлять файлы в кэше не перезаписывая их
тю-тю?  Балбес!

Мыслите шире:
я не пишу HTML страницу форума в кэш - она же изменяется каждые две минуты! Смысл её кэшировать? Кэшировать нужно с умом, а не всё подряд.
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #23 : 28 мая 2011, 13:27:21 »

тю-тю?  Балбес!

Мыслите шире:
я не пишу HTML страницу форума в кэш - она же изменяется каждые две минуты! Смысл её кэшировать? Кэшировать нужно с умом, а не всё подряд.
Непонимаю

Что же Вы тогда кэшируете?

Если HTML-страницы Вы не кэшируете.
Редко посещаемые сайты - тоже не кэшируете.

Только редко изменяемые картинки и флэшки с часто посещаемых страниц?  Шокирован  Балбес!

А как тогда я буду осуществлять поиск по кэшу с помощью какого-нибудь десктоп зеарцха если я буду не сохранять в кэш HTML файлы, в которых и храниться эта информация?  Не могу понять
Сообщить модератору   Записан
DIGGER
Старожил
****

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

Сообщений: 312



« Ответ #24 : 29 мая 2011, 01:18:44 »

Цитировать
А как тогда я буду осуществлять поиск по кэшу …
Что Вы ищете, конкретно?
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #25 : 01 июня 2011, 10:37:58 »

Я бы предложил немного изменить алгоритм кэширования сайтов.
При первом посещении сайта выводить краткое сообщение в браузере:
  Кэшировать данный домен  example.site? И кнопку Да или Нет.
А дальше уже по вашему алгоритму, без счетчиков.
В базовом сценарии использования расширения, а именно, когда открывается много новых сайтов при просмотре результатов поиска, такое сообщение будет раздражать.

Бывают сайты которые полезно кэшировать, например некоторые форумы, ютуб,
а сайты типа rbc.ru не имеют смысла кэшировать, хотя могут посешать многократно.
Для решения таких задач лучше подходят белые списки и правила в разделе Запись в кэш. Но одно другому не мешает. Я так и пользуюсь и тем и тем.

Позволю себе не согласиться.…
Ваше несогласие строится на том, что Вам нужно кэшировать HTML каждой посещаемой странички. А это совсем другая задача и другая стратегия кэширования.
Данное расширение помогает только в стратегии кэширования статики (картинки, стили, скрипты, Flash). Стратегия используется для ускорения загрузки страниц сайтов при последующих посещения за счет уменьшения количества запросов к серверу и времени загрузки больших элементов страницы.

Странная у Вас какая-то логика.
Вы полагаете, что основной вклад в быстрый износ харда/SSD
вносят редко посещаемые, а значит и редко записываемые на хард/SSD сайты?
Имеется ввиду большое множество таких сайтов, которые один раз открываются, анализируются и закрываются. Некоторые из таких сайтов могут иметь тонны картинок и прочей статики.

Жестко прописывать g_name и g_extensionRoot внутри самого расширения я считаю неправильным
Согласен. Исправил.

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
Избавился от всех table.foreach

Цитата: Михаил
4. В обработчике Destroy надо очищать все глобальные переменные, иначе они останутся висеть в памяти. К примеру, так:
hc.set_global(g_name)
Добавил.

Цитата: Михаил
6. В монитор хорошо бы выводить только необходимый минимум информации, не забивая все остальное.
Немножко сократил текст сообщения о Referrer. Думаю те, кому эти сообщения мешают, смогут поправить их под свои нужды, или убрать вообще.

Спасибо вам за дельные советы и за исправление моих ошибок.

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


* IgnoreOnceVisitedSites v2.0.1.zip (5.33 Кб - загружено 169 раз.)
Сообщить модератору   Записан
Михаил
Модератор
*****

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

Сообщений: 5513



« Ответ #26 : 02 июня 2011, 08:05:27 »

v2.0.1
Просто отлично! Спасибо.

PS  информацию о времени последнего визита, выводимую в окошке, можно форматировать в приемлемый для глаза вид. Например, вместо lastdate выводить os.date('%c',lastdate)
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #27 : 17 июня 2011, 22:28:29 »

v2.0.2
Исправил влияние расширения на опцию «Только для GET-запросов».
При включеном расширении, отключение этого флажка не влияло на кеширование POST-запросов, они всегда не сохранялись.

* IgnoreOnceVisitedSites v2.0.2.zip (4.91 Кб - загружено 194 раз.)
Сообщить модератору   Записан
Zelen
Пользователь
**

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

Сообщений: 82


pew pew


« Ответ #28 : 21 июня 2011, 02:22:55 »

какое полезное расширение, спасибо Inversion
Сообщить модератору   Записан

всё будет хорошо =)
Доктор ТуамОсес
Гость
« Ответ #29 : 21 июня 2011, 16:05:39 »

А чо полезного-то?
Что кэшируются часто модифицируемые динамические странички?
ИМХО, глупо это: кэшировать ресурсы, которые изменяются каждые 5 минут.
ИМХО, нужно наоборот!
Сайты, которые посещаются чаще чем 3 раза в неделю НЕ кэшировать.
Так как это как правило всякие там форумы, вконтакте-ру, лайвжурналы, твиккеры, факкэбуке, новостные сайты и прочая дребедень, контент которых меняется каждые 30 секунд. Поэтому смысла кэшировать их нету.

Вопрос топикстартеру!
А можете Вы доработать своё расширение так, чтобы была галка, позволяющая инвертировать логику работу расширения?

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

А?

ИМХО, там (в исходнике расширения на языке Lua) для этого потребуется пару-тройку строк поправить.
Нет?
Сообщить модератору   Записан
Avatar
Новичок
*

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

Сообщений: 1


« Ответ #30 : 25 июня 2011, 17:50:48 »

Спасибо за расширение.
Просьба к автору обратить внимание на работу с кириллическими доменами вида "яндекс.рф", которые продолжают кэшироваться при прямом посещении как "xn--d1acpjx3f.xn--p1ai". При переходе же по кириллическим ссылкам с других страниц кэширование не происходит, т.е. счётчик посещений по Referrer отрабатывает нормально.
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #31 : 26 июня 2011, 15:01:36 »

Ну так что?
Сделаете галку "работать наоборот"?
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #32 : 20 июля 2011, 17:02:18 »

А?  Подмигивающий
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #33 : 20 июля 2011, 17:16:27 »

Сейчас занят
Сообщить модератору   Записан
Доктор ТуамОсес
Гость
« Ответ #34 : 20 июля 2011, 17:53:08 »

О'кей.
Но когда освободитесь - непременно сделайте. Ибо это очень полезная фишка будет.
Ок?
Тем более что для этого и нужно-то всего лишь подредактировать пару-тройку строчек в исходнике на Lua/
Добавлено: 20 Июля 2011, 17:48:19

А "фишка" такая. Ваше расширение отслеживает сколько раз за день посетился некоторый сайт.
И если он посетился более заданного юзером кол-ва раз - то его URL заносится в список "не сохранять в кэш". Ибо нафиг сохранять в кэш то, что из него всё равно брать не имеет смысла, так как страница на сервере обновляется каждые 30 секунд. Веселый
Сообщить модератору   Записан
Nike
Новичок
*

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

Сообщений: 19


« Ответ #35 : 12 октября 2011, 03:11:37 »

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

Доктор ТуамОсес, до сих пор не понимаю смысла инверта. В кеше будет оседать горища ненужного мусора и ничего кроме него. И накой писать в кеш весь контент? Даже на постоянно обновляющихся сайтах статической информации уйма.
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #36 : 30 ноября 2011, 01:23:36 »

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

Спасибо Михаилу и Аватару за замечания.

Осторожно, при обновлении не замените свою базу и конфиг.

Доктор ТуамОсес, если Вам нужен описанный специфический функционал:
Найдите в исходнике строчку 325: "if visits < hc.get_global_table_item(g_name, 'ini_visitsCountToStartCache') then"
и поменяйте "<" на ">".
Специальной версии или флажка не будет.

UPD
Разместил исходник расширения на GitHub’е — https://github.com/Inversion-des/IgnoreOnceVisitedSites
Если будут исправления/дополнения — можно собирать там.


* IgnoreOnceVisitedSites v2.1.0.zip (5.75 Кб - загружено 203 раз.)
« Последнее редактирование: 30 ноября 2011, 01:57:52 от Inversion » Сообщить модератору   Записан
Andrey_04.05
Новичок
*

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

Сообщений: 18


« Ответ #37 : 18 апреля 2013, 15:06:31 »

Видел на форуме идеи о вычислении т.н. "рейтинга" файлов. Типа чем чаще используется, чем выше рейтинг, и при очистке удалять самые "нерейтинговые". По-моему, это очень верное направление, только нужно его как-то воплотить. Если хранить информацию о дате и времени обращения к каждому файлу, получится весьма затратно, но можно периодически сбрасывать статистику одним файлом на диск, и обращаться ко всем таким файлам статистики только при операциях очищения кеша (раз в месяц, например. Ну здесь, конечно, зависит от скорости заполнения кеша. Но в любом случае не часто). Я же верно понимаю, что расширение "IgnoreOnceVisitedSites" занимается практически тем же, только на уровне доменов, и реализовать похожее расширение, но на уровне файлов, не сложно?
Сообщить модератору   Записан
zakoul
Старожил
****

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

Сообщений: 326


« Ответ #38 : 19 апреля 2013, 00:05:10 »

А как на счет того, что бы ввести список исключений? Т.е. для доменов в этом списке кэширование будет происходить всегда (начиная с первого визита) или же наоборот - никогда.

Т.е. создать еще один .txt файл и в нем что то типа такого:
site.ru 1 - кэшировать с первого посещения

или же:
site.ru 0 - никогда не кэшировать
Хотя последнее наверно лишнее, ведь запретить кэшировать можно в белом списке НС.

Отдельный файл с исключениями думаю будет полезен.
« Последнее редактирование: 19 апреля 2013, 01:29:50 от zakoul » Сообщить модератору   Записан
suz191
Новичок
*

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

Сообщений: 14


« Ответ #39 : 20 апреля 2013, 04:19:05 »

Кстати установил и тоже захотелось именно белый список Улыбка
Сообщить модератору   Записан
zakoul
Старожил
****

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

Сообщений: 326


« Ответ #40 : 20 апреля 2013, 05:25:16 »

Кстати установил и тоже захотелось именно белый список Улыбка
Думаю у каждого найдется свой список сайтов, которые точно должны попадать в кэш НС с первого захода. Можно конечно же ждать несколько дней или кол-во посещений править до нужного, но для этого сначала нужно зайти на этот сайт, изменить кол-во посещений, а для полного попадания в кэш НС нужно еще и очистить кэш браузера. Куда проще иметь заранее составленный белый список и не производить при этом лишних манипуляций для кеширования нужных сайтов.
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #41 : 21 апреля 2013, 17:32:04 »

Видел на форуме идеи о вычислении т.н. "рейтинга" файлов. Типа чем чаще используется, чем выше рейтинг, и при очистке удалять самые "нерейтинговые". По-моему, это очень верное направление, только нужно его как-то воплотить. Если хранить информацию о дате и времени обращения к каждому файлу, получится весьма затратно, но можно периодически сбрасывать статистику одним файлом на диск, и обращаться ко всем таким файлам статистики только при операциях очищения кеша (раз в месяц, например. Ну здесь, конечно, зависит от скорости заполнения кеша. Но в любом случае не часто). Я же верно понимаю, что расширение "IgnoreOnceVisitedSites" занимается практически тем же, только на уровне доменов, и реализовать похожее расширение, но на уровне файлов, не сложно?
Теоретически не должно быть сложно, но из-за того, что количество файлов может на порядки превышать количество доменов, с которым я имел дело, может быть проблематично вести такую статистику в обычном текстовом файле. Ну и памяти при таком подходе буте расходоваться значительно больше (не десятки килобайт, а уже 10-20 MB). Тут уже сложно без хоть какой-то базы данных.
Добавлено: 21 Апрель 2013, 17:29:24

А как на счет того, что бы ввести список исключений? Т.е. для доменов в этом списке кэширование будет происходить всегда (начиная с первого визита) или же наоборот - никогда.

Т.е. создать еще один .txt файл и в нем что то типа такого:
site.ru 1 - кэшировать с первого посещения

или же:
site.ru 0 - никогда не кэшировать
Хотя последнее наверно лишнее, ведь запретить кэшировать можно в белом списке НС.

Отдельный файл с исключениями думаю будет полезен.

Сейчас для этой цели можно в файле базы данных IgnoreOnceVisitedSitesDB.txt найти этот домен после первого визита (или вручную добавить аккуратно) и увеличить цифру количества визитов до Вашего значения параметра visitsCountToStartCache.

Отдельный файл был бы удобнее, но у меня нет возможности добавить такой функционал.
Сообщить модератору   Записан
Andrey_04.05
Новичок
*

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

Сообщений: 18


« Ответ #42 : 04 июня 2013, 15:36:24 »

Очень хочется попробовать накопление статистики обращения к файлам с последующим вычислением «рейтинга». К сожалению, никогда не имел дело со скриптами ЛУА.
Уважаемый Inversion, может у Вас найдется немного времени, чтобы накидать код? Я вижу логику работы примерно так:

В настройках:
   - папка для сбора статистики, (F)
   - периодичность сброса статистики (TS)

При каждом обращении к файлу:
   - Сохранить в памяти строку вида:
 «имя файла (после преобразования URLtoFILE)» - дата и время обращения.

При достижении времени TS или при накоплении, например, 1000 строк:
   - сгенерировать случайное число R
   - проверить в папке F существование файла «s» + IntToStr(R) + «.txt», если есть, то шаг назад (взять другое R), если нет, то к следующему пункту:
   - открыть для записи файл «s» + IntToStr(R) + «.txt», записать в него все накопленные строки.
Сообщить модератору   Записан
Inversion
Новичок
*

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

Сообщений: 17


WWW
« Ответ #43 : 08 июня 2013, 23:49:38 »

может у Вас найдется немного времени, чтобы накидать код?
Увы, сейчас никак нет.
Сообщить модератору   Записан
Andrey_04.05
Новичок
*

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

Сообщений: 18


« Ответ #44 : 16 августа 2013, 13:48:07 »

Выдалось немного времени, попробовал накидать расширение для сбора статистики обращения к файлам. С луа абсолютно незнаком, пробовал делать по аналогии с "IgnoreOnceVisitedSites". Первый блин - по моей задумке в файл пишется имя файла целиком, вместе с путем. В моем варианте пишутся все время только пустые строки. Где-то не попал ))) И сразу второй вопрос - следом за файлом в эту же строку хочу писать дату и время обращения. Кто подскажет?
Результат моего труда:

--[[ <HCEXTENSION>
@name            Statistika
@author          Andrey_04.05@mail.ru
@version         0.1
@description     Собирает информацию об обращениях к файлам в текстовом виде для вычисления "рейтинга".
@event           BeforeRequestHeaderSend/on_BeforeRequestHeaderSend
</HCEXTENSION> ]]

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

function on_BeforeRequestHeaderSend()
   hc.monitor_string = hc.monitor_string ..'Test'
      f = io.open(g_extensionRoot..g_name..'DB.txt', 'a')
      if (f) then
         f:write(hc.cache_file_name..'\n')
         f:close()
      else                                                hc.put_to_log('Save failed')
         hc.monitor_string = hc.monitor_string ..' Save failed'
      end
end
Сообщить модератору   Записан
zakoul
Старожил
****

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

Сообщений: 326


« Ответ #45 : 25 августа 2013, 20:49:27 »

Просьба к автору данного расширения переписать его под lua5.2
(версия 2.1.0 не работает с НС 1.0.0.469)
Сообщить модератору   Записан
Михаил
Модератор
*****

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

Сообщений: 5513



« Ответ #46 : 25 августа 2013, 21:05:38 »

У меня вроде работает.

* IgnoreOnceVisitedSites.rar (3.99 Кб - загружено 124 раз.)
Сообщить модератору   Записан
zakoul
Старожил
****

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

Сообщений: 326


« Ответ #47 : 25 августа 2013, 21:27:27 »

Спасибо. Работает.
Сообщить модератору   Записан
zakoul
Старожил
****

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

Сообщений: 326


« Ответ #48 : 09 сентября 2013, 23:58:05 »

Заметил одну небольшую проблему в IgnoreOnceVisitedSites. Некоторые сайты игнорируются данным расширением и НС их кэширует с первого посещения. Пример:
Набираю президент.рф (до этого на этом сайте я не был ни разу, т.е. в базе IgnoreOnceVisitedSite его нет). Смотрю в монитор НС - идет кэширование с news.kremlin.ru, в кэше НС появляются папки "президент.рф" и "news.kremlin.ru".
При этом в базе IgnoreOnceVisitedSite появляется только "президент.рф" с 1 посещением, а "news.kremlin.ru" или "kremlin.ru" в базе IgnoreOnceVisitedSite не появляется.
Как то можно исправить?
Сообщить модератору   Записан
Zork
Пользователь
**

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

Сообщений: 53


« Ответ #49 : 10 сентября 2013, 06:02:37 »

Не вижу причин заморачиваться с ssd. У них ресурс не ниже обычных HDD. Как расширение конечно интересно, но не более того. IMXO
Сообщить модератору   Записан
Страниц: 1 2 3 [Все]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: