Радик245
Я говорю о ситуации когда нам нужно заблокировать site.com, site.ru, site.us, site.com.ua правилом ||site.~^^, но не трогать site.name.org (в данном случае site субдомент name.org). В принципе это решаемо условием $domain=~name.org или если name.org сидит на множестве доменов первого уровня, то $domain=~name.~^.
Вообще вероятность такого события довольно мала. У нас уже есть пачка общих правил вида ||site. и ещё ни к одному не пришлось приделать исключение из-за того, что оно что-то лишнее блокирует.
Отредактировано Lain_13 (09-02-2011 13:07:01)
Отсутствует
Было бы интересно увидеть какую подстроку AdBlock считает наиболее уникальной в каждом правиле.
Скоро увидите - эти данные будут кешироваться на диске, в отдельном файле, там и посмотрите.
Отсутствует
После дополнительного размышлений я пришёл к выводу, что маска ~^ в качестве MagicTLD может быть полезной исключительно в случаях когда нужно указать на то, что искомая строка идёт сразу после домена первого уровня (вроде .ru/banners/). Если мы не можем с её помощью отличить site.ru от site.name.org в правиле ||site.~^^, то с таким же успехом мы можем использовать просто правила вида ||site. и делать исключения по доменам. Хотя, как я уже говорил, это позволяет чётко указывать уровень вложенности элементов, а не как сейчас с маской «*».
в domain-исключениях от ~^ тоже не много толку. С таким же успехом там могла бы работать маска «*».
Добавлено 09-02-2011 16:28:42
С другой стороны если точку исключить из подходящих для ~^ символов (т.е. не полный антипод ^), то в качестве MagicTLD и маски для domain-ограничений она могла бы работать вполне успешно.
Отредактировано Lain_13 (09-02-2011 16:26:15)
Отсутствует
С другой стороны если точку исключить из подходящих для ~^ символов (т.е. не полный антипод ^)
Именно. В таком случае лучше использовать не ~^, а, например, @, чтобы не было путаницы.
Отсутствует
Радик245
Нет, боюсь это тоже не годится. В имени любого «каталога» или «файла» может быть любое количество точек. Это значит, что указав /@.@| после домена мы заблокируем только файлы с одной точкой в имени. Достаточно добавить разное количество точек в имена файлов и вся польза от этой маски накрывается медным тазом.
Т.е. одновременно как MagicTLD и как антипод «^» у этой маски работать не получится, а жаль.
Отсутствует
Владимиp Палант
С новыми правилами оптимизации правил блокировки мы получим весьма весёлую ситуацию, как мне кажется.
Если раньше мы тратили время просто на генерацию кучи хэшей и кучу операций поиска, то теперь у нас практически _каждая_ ссылка будет проверяться как минимум одной регуляркой.
Почему так? Я знаю массу правил которые претендуют сесть на ключи «php», «swf», «image» и я просто уверен, что какое-нибудь правило таки закончит на «com», «net», «cgi», «asp» и прочих не самых удачных ключах. У некоторых правил даже выбора нет: .aspx?ad=, .html?ad=, .php?ad= и подобные.
А так ли хороша эта новая оптимизация в том виде, в котором ты её реализовал?
Отредактировано Lain_13 (10-02-2011 18:14:30)
Отсутствует
Lain_13
Ну я ведь все-таки скорость замерял. В Firefox 3.6 получалось ускорение на почти 50%, а в Firefox 4 и вовсе в два раза.
Отсутствует
Владимиp Палант
А что, если «запретить» Adblock Plus сопоставлять правилам хотя бы ключи «com», «net», «org», так как такие ключи приведут к сверке с регулярками почти каждого элемента страницы на сайтах в этих доменах? Или скорость только снизится?
Отсутствует
Радик245
А какой смысл у такого запрета? Другие (более длинные) ключевые слова и так уже предпочитаются. А правило, для которого ключевое слово не найдено, приходится проверять всегда.
Отсутствует
В общем: Владимир сделает сохранение файла с правилами и ключами. Тогда и посмотрим где и почему правила сели на com, net и далее по списку.
Отредактировано Lain_13 (11-02-2011 12:12:56)
Отсутствует
Владимиp Палант
Скоро увидите - эти данные будут кешироваться на диске, в отдельном файле, там и посмотрите.
Это уже есть в тестовых версиях?
Добавлено 11-02-2011 16:26:45
Lain_13
http://adblockplus.org/development-builds/
Faster filter matching algorithm · 77 days ago by Wladimir Palant
It has been a while since I looked into filter matching algorithms and settled on the one that Adblock Plus still uses today, mostly unchanged. However, a simpler algorithm with even better performance characteristics was suggested recently, this algorithm is implemented in the current development build (Adblock Plus 1.3.5a.20101125). The side-effect is that many filters will now be marked as slow, filter subscriptions will need to adapt to take full advantage of this algorithm (forum topic). This is why this change will most likely be reverted before Adblock Plus 1.3.5 release and only released with Adblock Plus 1.4.
То есть скорее всего откладывается.
Отредактировано Радик245 (11-02-2011 16:27:32)
Отсутствует
Радик245
В тестовых версиях нет, я как раз сейчас над этим работаю.
Есть более актуальный пост, ему всего неделя: https://adblockplus.org/blog/updated-ro … k-plus-135
One thing is important enough to be repeated: faster filter matching algorithm will come in Adblock Plus 1.3.5, not Adblock Plus 1.4 as originally announced.
Не откладывается.
Отсутствует
А что, если «запретить» Adblock Plus сопоставлять правилам хотя бы ключи «com», «net», «org», так как такие ключи приведут к сверке с регулярками почти каждого элемента страницы на сайтах в этих доменах?
Посмотрел, что Adblock Plus у меня пишет на диск (эти изменения скоро будут в тестовой версии, HTML-файл для визуализации я тоже дам). На данный момент к ключевому слову "com" в RuAdList+EasyList 13 правил:
||24-advert.com^$third-party ||dw.com.com^$third-party .com/ad- .com/ad. .com/ad/ .com/ad? .com/ad_ .com/ads. .com/ads? .com/ss/ad/ =com_ads& ||cc-dt.com^$third-party ||pc-ads.com^$third-party
Для большинства этих правил альтернатив нет. У некоторых можно было бы выбрать "ads", но там и так 41 фильтр. У одного есть еще как вариант "advert", но и здесь 11 записей.
Ключевое слово "net":
||banner-in.net^$third-party ||ukr.net/partner/ .net/_ads/ .net/ad/$~object_subrequest .net/ads/ .net/ads_ ||c8.net.ua^$third-party ||d.m3.net^$third-party
Та же самая история. banner - тоже более "востребованное" ключевое слово, там 19 записей. Единственное, "||ukr.net/partner/" явно можно было бы разместить более оптимально.
Ну и "org":
||p-rank.org/pr.php? dverizamki.org/$object .org/ad/ .org/ad2_ .org/ad_ .org/ads- .org/ads/ _org_ad.
dverizamki не воспринимается как ключевое слово - может там надо || в начале фильтра? Фильтр "||p-rank.org/pr.php?" опять таки единственный, который в этом списке "случайно".
Вывод: сильного убыстрения запретом этих ключевых слов не добьешься. При настоящем запрете появится ряд правил, которые вообще не оптимированы, а это хуже. Если же использовать их только как последний выход, то убыстрение будет мизерным. Есть большие сомнения, что оно того стоит.
PS: Кстати говоря, "ads" и "banner" являются "лидирующими" ключевыми словами. Вообще ключевых слов более чем с десятком фильтров всего несколько.
Отредактировано Владимиp Палант (14-02-2011 18:07:12)
Отсутствует
Спасибо!
dverizamki не воспринимается как ключевое слово - может там надо || в начале фильтра?
Да, думаю, можно и ||dverizamki.org$object
Такие правила, как
||dw.com.com^$third-party
||cc-dt.com^$third-party
, можно заменить на
://dw.com.com/
.cc-dt.com/$third-party
для ускорения проверки. ||cc-dt.com^$third-party - в изилисте.
Отредактировано Радик245 (14-02-2011 18:31:31)
Отсутствует
> Да, думаю, можно и ||dverizamki.org$object
Изменил уже на иное. На org оно всё равно теперь не сядет.
> Такие правила, как ||dw.com.com^$third-party ||cc-dt.com^$third-party, можно заменить на /dw.com.com/ .cc-dt.com/$third-party для ускорения проверки
Эээ… Ну и чем это поможет? Этим бы сайтам дополнительные ключевые слова найти, а от «.» и «/» им легче хоть и станет, но на столько незначительно…
Добавлено 14-02-2011 18:41:21
Владимиp Палант
А ты кэшируеш регулярки или каждый раз их заново собираеш?
Отредактировано Lain_13 (14-02-2011 18:59:36)
Отсутствует
Эээ… Ну и чем это поможет?
Тем, что хоть регулярка и будет проверяться, но значительно более простая.
Этим бы сайтам дополнительные ключевые слова найти
Но не уверен, что это всё.
Отсутствует
Владимиp Палант
Вижу всё больше смысла я в «оптимизируемых» регулярках.
Смысл в том, что б давать одно или несколько ключевых слов и цеплять к ним одну регулярку которая будет проверяться при их нахождении.
Так, например, пачка недавно добавленны мной userbar-правил (оптимизировал, блин)
Т.е. это позволит в рамках новой реализации поиска сильно упростить проверку отдельных ключевых слов. Проверять одну регулярку всяко проще чем десяток (если там нет хитрозадых вещеё вроде заглядывания вперёд/назад, навороченных условий и прочих подобных радостей.
Отредактировано Lain_13 (14-02-2011 19:12:20)
Отсутствует
вроде заглядывания вперёд/назад
Кажется, в ABP такое и не работает.
Добавлено 14-02-2011 19:44:40
Владимиp Палант
Вижу всё больше смысла я в «оптимизируемых» регулярках.
Я знаю, что Вы в очередной раз хотите сказать, что нельзя закреплять алгоритм оптимизации в правилах.
Но ведь всё равно при переходе на новый алгоритм оптимизации приходится переделывать часть правил.
Отсутствует
Lain_13
Регулярки кешируются на время выполнения браузера. Больше и не нужно, на быстродействие создание регулярок уже никак не влияет - это происходит, когда правило нужно в первый раз проверить, вряд ли придется когда-либо создавать одновременно больше десятка регулярок.
В "«оптимизируемых» регулярках" я смысла не вижу. Быстродействие уже и так очень хорошее, извращаться для дополнительной оптимизации незачем.
Отсутствует
Владимиp Палант
Ну я бы сказал, что у нас довольно часто попадается ситуация в общих правилах когда мы перебираем довольно много вариантов + регулярка привязанная к ключевому слову может куда больше чем простое правило блокировки. Ведь простые правила не могут перебирать варианты, они вообще много чего не могут. Это не только оптимизация, это ещё и удобство. С другой стороны обычные регулярки могут многое, но при этом они в таком положении, что мы должны избегать их создания любыми путями. Какой смысл в их поддержке если их столько времени уже невозможно использовать без отрицательных последствий? Может давай совсем их поддержку выкинем? Всё равно же их использовать крайне нежелательно и вместо них будем клепать по 40 правил отличающихся парой знаков или числом.
Радик245
> Кажется, в ABP такое и не работает.
Это не зависит от ABP, а от движка регулярок в браузере. Он умеет.
Добавлено 15-02-2011 00:11:26
Кстати, мой способ не предполагает закрепления алгоритма оптимизации. Если ключевые слова будут искаться иным путём, то можно будет изменить обработчик для #…#/…/ и блок между #…# парсить иначе. Возможно этот блок придётся изменить в подписке, но только и всего. Мы и так ворох правил переделали и столько ещё переделаем…
Отсутствует
Это не только оптимизация, это ещё и удобство.
Именно!
Может давай совсем их поддержку выкинем?
Не стóит. Хотя бы для удобства оставьте.
Владимиp Палант
А какому примерно числу правил соответствует по скорости, например, такая регулярка, как
при будущем способе оптимизации — то есть если её полностью заменить простыми правилами (включая варианты с цифрами, получается 15 правил), будет быстрее или нет?
Отредактировано Радик245 (15-02-2011 00:39:06)
Отсутствует
Такая регулярка не очень укладывается в оптимизатор на самом деле. Варианты с цифрами не будут давать ключевого слова baner.
А, да ладно, обойдёмся без регулярок.
Отсутствует
Радик245
В данном случае 5 правил пока хватает. Конечно при их проверке не выгодно проверять 5 регулярок вместо одной, но Владимир прав — такая микрооптимизация бесполезна.
Ну их, эти регулярки. Я был раздражен когда то писал.
Хотя иметь возможность пользоваться регулярками как обычными правилами было бы приятно. А то они что есть, что их нет.
Отредактировано Lain_13 (15-02-2011 16:21:08)
Отсутствует