+  HandyCache форум
|-+  Главная категория» Общие вопросы» Расширения на языке Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: 1 ... 22 23 [24] 25 26 ... 29   Вниз
  Отправить эту тему    Печать  
Автор Тема: Расширения на языке Lua в HandyCache  (Прочитано 438783 раз)
0 Пользователей и 1 Гость смотрят эту тему.
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #460 : 16 января 2013, 23:11:22 »

Это не хорошо. Заметил поскольку одни и те же запросы стали идти то через расширение, то мимо.
Если ошибка влияет и на списки правил, то это совсем плохо.
« Последнее редактирование: 16 января 2013, 23:45:21 от olDjeka » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #461 : 17 января 2013, 00:19:29 »

Прошу в тренажёре HC Version 1.00 RC3 (1.0.0.409) проверить ("Применить") правило
^http://[^:]+:443 для
url: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
Перед проверкой галочку "Удалять лидирующий http://" необходимо снять.
Вы нашли ошибку PCRE. Я написал разработчикам.
Для сохранения работоспособности в приведенном выше правиле используйте "\A" вместо "^": и оптимальней чуток, и ошибку обойдете.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #462 : 17 января 2013, 00:29:32 »

Заменять только второй символ или все?
В правилах тоже лучше заменить?
« Последнее редактирование: 17 января 2013, 00:33:42 от olDjeka » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #463 : 17 января 2013, 00:33:24 »

Цитировать
Заменять только первый символ или все?
Только первый.
Цитировать
В правилах тоже лучше заменить?
Непонимаю Я ж не знаю, о каких правилах речь.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #464 : 17 января 2013, 00:39:12 »

Например:

ЧС
^bs\.yandex\.ru/

Не обновлять
^[^?]+[?/]\w*\d{4,}(\.(aspx?|txt))?/?$
исключая
^gismeteo\.ru/(weather/)?g?m?towns\d?/|/20[01]\d/|^soft\.softodrom\.ru/ap/|^inosmi\.ru/translation/|pogoda

Переадресация
^[^?]*%(2[56f]|3[adf])
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #465 : 17 января 2013, 00:48:53 »

Цитировать
В правилах тоже лучше заменить?
Строго говоря, да. Но эта строгость выигрыш дает малый, а удобочитаемость \A хуже, чем ^. Поэтому выбирайте, как Вам нравится.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #466 : 17 января 2013, 01:04:38 »

Михаил Спасибо Отлично!
Привёл правила в которых много попаданий, плюс ещё расширения надо посмотреть.
Нравится, не нравиться здесь дело десятое.
« Последнее редактирование: 17 января 2013, 01:11:01 от olDjeka » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #467 : 17 января 2013, 01:24:12 »

Цитировать
Привёл правила в которых много попаданий
Выгода от использования \A в правиле происходит только при НЕпопадании. При попадании скорость работы будет одинакова. Число НЕпопаданий гораздо больше количества попаданий, поэтому эта замена дает практически одинаковый эффект в любом правиле Черного списка (т.к. каждое из них бОльшую часть попыток НЕ срабатывает).
Но на самом деле даже на глаз этой выгоды не увидите - очень уж она мала. Я столкнулся с реальными эффектами ускорения только при написании СМ, который регулярными выражениями лопатит гораздо большие объемы, чем списки НС.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #468 : 17 января 2013, 01:58:42 »

Полностью согласен, но многие ссылки состоят из двух url, типа
http://сайт-1/тра-та-та (=`~!:?$&! и т.д.) http://сайт-2/тру-ту-ту
Но самое главное, у меня несколько правил в списке "Преобразование URL" используют этот метасимвол, а это уже чревато проблемами.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #469 : 17 января 2013, 12:24:45 »

olDjeka, авторы PCRE отписались, что нашли и исправили ошибку. Опыт показывает, что примерно в течение месяца исправление может быть внедрено в НС.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #470 : 17 января 2013, 14:39:57 »

Хорошая новость, ещё раз спасибо. Проверил у себя всё в тренажёре, только это правило работало неверно. Заменил, и теперь порядок.
Но гложут сомнения (необоснованные, но гложут), PCRE наверно используется и для внутренних преобразований в самом HC. И осталось непонятно почему? то срабатывало, то нет. Вот начала отладочных логов, URL один и тот же, но в первом случае сработало, во втором нет.
* Пользователь один и тот же, долго ловил когда сработает и начало почему то не захватило.

Код:
16.01.13 21:16:01,554 # 9
MappedPortExecute_begin

16.01.13 21:16:01,554 # 9
MappedPortExecuteDo_begin/476

16.01.13 21:16:01,564 # 9 <<< URL: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
*** IdConnectionIntercept1SendDo/476 SInd=2 ***

16.01.13 21:16:01,564 # 9:  Connect to proxy from script: (127.0.0.1:8192)

Код:
16.01.13 21:17:23,242 # 10: Start connection from client

16.01.13 21:17:23,252 # 10: Connection from 127.1.1.1:2601 to HC Version 1.00 RC3 (1.0.0.409)

16.01.13 21:17:23,252 # 10: User name: local

16.01.13 21:17:23,262 # 10
MappedPortExecute_begin

16.01.13 21:17:23,272 # 10
MappedPortExecuteDo_begin/476

16.01.13 21:17:23,382 # 10 <<< URL: http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png
*** IdConnectionIntercept1SendDo/476 SInd=0 ***

16.01.13 21:17:23,392 # 10: DNS resolve addons.cdn.mozilla.net --> 23.61.212.61 (From cache)

Цитата: Михаил
используйте "\A" вместо "^": и оптимальней чуток
А чем оптимальней  Непонимаю
« Последнее редактирование: 17 января 2013, 15:05:07 от olDjeka » Сообщить модератору   Записан
Anymore
Beta tester
*****

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

Сообщений: 339


« Ответ #471 : 17 января 2013, 15:38:46 »

А чем оптимальней  Непонимаю
Я бы спросил: откуда такие глубокие познания? LinkPlease!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #472 : 17 января 2013, 22:41:09 »

Цитировать
F чем оптимальней?
PCRE изучает строку (в нашем случае http://addons.cdn.mozilla.net:443/media/img/app-icons/med/firefox.png) слева направо, начиная с первого символа. Если заданному регулярному выражению соответствия нет, то таким же образом эта строка изучается, начиная со второго, третьего и т.д. до последнего символов.
Если в начале стоит \A, это дает PCRE дполнительную информацию о том, что изучать строку нужно только с первого символа и все.
Если в начале стоит ^, то строка штудируется по полной программе.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #473 : 17 января 2013, 23:14:09 »

Михаил  Благодарю
Отсюда об этом не додумался.
Цитировать
начало строки '^' и конец строки '$' действуют для каждой строки в многосторочной строке, то \A и \Z обозначают начало и конец всей многосторчной строки.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #474 : 18 января 2013, 00:49:39 »

Чтобы увидеть разницу воочию можете подцепить такое тестовое расширение:
Код:
--[[ <HCExtension>
@name Test2
@event Options
</HCExtension> ]]

function Options()
local subj = [[http://addons.cdn.mozilla.net/media/img/app-icons/med/firefox.png]]
local regex1 = [[^http://[^:]+:443]]
local regex2 = [[\Ahttp://[^:]+:443]]
local count = 1
re.set_subj(subj:rep(1000000))
local function timer(regex)
re.set_regex(regex)
local clck = - os.clock()
for _=1,count do
re.find()
end
return clck + os.clock()
end
hc.put_msg(string.format('regex1 execution time = %g\r\nregex2 execution time = %g', timer(regex1), timer(regex2)))
end
При вызове настроек расширения всплывет окно с информацией о времени выполнения регулярных выражений, заданных в переменных regex1 и regex2.
Для получения приемлемых глазу цифр времени (а не наносекунд) исходный УРЛ http://addons.cdn.mozilla.net/media/img/app-icons/med/firefox.png увеличивается в 1000000 раз.

Этим расширением если есть желание можете сравнивать эффективность разных вариантов своих регулярных выражений, подставляя соответствующие значения в переменные subj, regex1 и regex2.
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #475 : 22 января 2013, 17:00:39 »

При обработке события BeforeAnswerBodySend, чтение заголовка запроса (request_header) выдаёт пустую строку. Можно ли как-то получить заголовок запроса при обработке события BeforeAnswerBodySend?
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #476 : 22 января 2013, 20:03:17 »

Цитировать
выдаёт пустую строку
следует читать как "выдаёт соответствующее ошибке сообщение".
Но сути вопроса это не меняет.
« Последнее редактирование: 22 января 2013, 20:08:54 от olDjeka » Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #477 : 22 января 2013, 20:27:28 »

Что за  сообщение о соответствующей ошибке?
Какие переменные в каких обработчиках можно использовать читайте в файле HCExtensions.html
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #478 : 22 января 2013, 20:39:30 »

Как получить заголовок запроса при обработке события BeforeAnswerBodySend, если в обработчике BeforeAnswerBodySend нельзя использовать переменную request_header?
Сообщить модератору   Записан
olDjeka
Постоялец
***

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

Сообщений: 117


« Ответ #479 : 23 января 2013, 04:26:36 »

Пока проверял - ошибся, и напутал в предидущих постах Смущен

Эксперементируя с расширениями заметил что request_header работает и для BeforeAnswerBodySend.
В HCExtensions.html такой "пары" нет, поэтому хотел выяснить - можно её использовать или нет (возможны проблемы)?

Код:
--[[ <HCExtension>
@name          ### Temp ###
@event         BeforeAnswerBodySend
</HCExtension> ]]

function BeforeAnswerBodySend()
  x=hc.request_header
  hc.put_to_log('R-Header '..x)
end
« Последнее редактирование: 23 января 2013, 04:35:42 от olDjeka » Сообщить модератору   Записан
Страниц: 1 ... 22 23 [24] 25 26 ... 29   Вверх
  Отправить эту тему    Печать  

 
Перейти в: