Кстати, а как там дела с «$not=[регулярка_или_простое_правило]» ? Так и похоронили?
См. https://adblockplus.org/forum/viewtopic.php?f=4&t=4873 - да, похоронили. Думаю, что и это предложение похороним, причем по тем же самым причинам. Но могу выставить на обсуждение, когда будет время.
Отсутствует
Мне кажется Хакруса нужно палочкой потыкать. Не завонялся ли?
Подписку он не оптимизирует, проблемные правила вроде /counte[rd]/ на mail.ru не исправояет… я даже не уверен, что он этого мутанта обновляет. Там дата в заголовке 2010-03-24.
А народ ставит и ставит себе это недоразумение, а потом отчёты строчит, мол итить-колотить на mail.ru файл к письму не приложить и так далее.
Может в следующей версии АдБлока ввести механизм предлагающий удаление проблемных подписок и внести все подписки Хакруса в список проблемных?
Если человек решит это оставить, так он хоть предупреждён будет. А то ведь они идут сюда или на ещё какой-нибудь устаревший как фекалии мамонта сайт, который не обновляли уже чёрт знает сколько времени, и ставят себе весь этот «clean internet», а потом удивляются.
Добавлено 06-02-2011 22:59:38
Кстати: https://reports.adblockplus.org/bc9772fb-753d-41ec-8e34-c6fb5617811a
Есть идеи? У меня повторяется. Более того, я выключил все подписки и свои правила — проблема остаётся
Отредактировано Lain_13 (07-02-2011 11:57:15)
Отсутствует
Владимиp Палант
Насчёт списка нежелательных подписок поддерживаю Lain_13. И ещё надо если не удалить подписки Хакруса с http://adblockplus.org/ru/subscriptions, то хотя бы написать предупреждение о проблемах с ложными срабатываниями, а не только с оптимизацией, особенно для его основной подписки.
Правильно ли описан здесь алгоритм оптимизации (это не моё описание):
раньше адрес разбивался на подстроки длинной в 8 символов. Например в строке «абвгдеёжзи» 3 такие подстроки. Для каждой генерировался хэш и сверялся с базой хэшей. Если что-то совпадало, то проверялось само правило. Для каждого правила был ровно 1 хэш и он не должен был пересекаться с другими (хотя это было просто недоработкой, как мне кажется).
Узким местом в этой схеме является генерация хэшей для _каждой_ подстроки. Для адреса длинной в 57 символов генерировалось до 50 (!) хэшей. Если учесть, что операция генерации хэша довольно не простая и ресурсоёмкая, а большинство адресов ни под какие правила не попадают и часто попадаются ссылки длинной в 100 символов и даже длиннее, то это просто нагрузка процессора впустую. Единственным плюсом является только то, что это быстрее, чем построчное сравнение со всей базой.
Теперь же по новой схеме строка разбивается на подстроки символами (кроме %), подстроки длинной менее трёх символов выбрасываются, а для остальных выполняется поиск в базе таких-же подстрок. В виду того, что самих подстрок гораздо меньше получается, чем при старом методе, то мы выигрываем массу процессорного времени на этом. Это время можно спокойно потратить на проверку всех подстрок и создание пула правил в которых всех их ключи были найдены. Операция поиска по хэшу относительно «дешёвая», да и требуется таких поисков существенно меньше, чем раньше генерировалось хэшей из подстрок.
Создав пул правил для которых были найдены все их ключи мы просто проверяем их одно за другим.
?
Lain_13
А народ ставит и ставит себе это недоразумение, а потом отчёты строчит, мол итить-колотить на mail.ru файл к письму не приложить и так далее.
На этот отчёт я уже отвечал по эл. почте.
А то ведь они идут сюда или на ещё какой-нибудь устаревший
Подозреваю, что идут как раз http://adblockplus.org/ru/subscriptions, где написано только:
Примечание: этот список фильтров не оптимизирован для Adblock Plus и может отрицательно сказаться на быстродействии вашего браузера.
А народ не обращает внимания на оптимизацию и быстродействие (народ таких слов может и не понимать) и ставит подписок побольше, "чтобы лучше блокировало".
Владимиp Палант
Может быть, стоит отказаться от комбинированных подписок и предлагать дополнительные подписки вместе с основной, но чтобы они устанавливались как две подписки. Как по этой ссылке. А то сейчас устанавливают множество комбинированных подписок, в каждой — EasyList, и кроме того, EasyList отдельной подпиской. Это ведь нехорошо?
Отредактировано Радик245 (07-02-2011 00:13:23)
Отсутствует
Радик245
Теоретически это только лишнюю память занимает и из-за разного времени обновления подписок набор правил в разных копиях EasyList может немного отличаться. Идентичные правила совмещаются и считаются за одно правило.
Хотя при первом запуске логично было бы выдавать дерево подписок и предлагать отметить галочкой необходимые, а не выбрать одну совмещённую из выпадающего меню. От создания копий подписок на своём сервере при этом отказываться вовсе не стоит.
Хотя такой подход даёт населению ещё больше возможностей поставить себе вместо одной подписки сразу два десятка.
Добавлено 07-02-2011 12:02:01
Кстати, самое крутое на том сайте это вот: «Скачать последнюю версию Mozilla Firefox 3.0.2»
И это не ссылка на сайт установки фокса. Это ссылка на файлопомойку depositfiles. Хорошо хоть файла уже не существует…
Отсутствует
Теоретически это только лишнюю память занимает
Что тоже важно.
От создания копий подписок на своём сервере при этом отказываться вовсе не стоит.
Копия может лежать где угодно, но я предлагаю отказаться от комбинированных.
Хотя при первом запуске логично было бы выдавать дерево подписок и предлагать отметить галочкой необходимые, а не выбрать одну
Логичнее, но не правильнее. Ты сам написал, почему.
Отсутствует
Написал на subscriptionlist@a.o, чтобы они ткнули Хакруса и если что, то удалили. Дата модификации файла соответствует дате в комментарии - его действительно с прошлого марта не меняли.
Радик245
Подавляющее большинство пользователей добавляют подписку из списка рекомендаций и на этом дело заканчивается (в России это большинство, возможно, не столь подавляющее, но тем не менее). И в этом случае комбинированная подписка явно лучше - скачиваться должен только один файл, а это существенно уменьшает нагрузку на сервер (установка соединения
- самая трудоемкая часть процесса).
Lain_13
Проблема с free-torrents.org у меня не воспроизводится, я вхожу нормально. Единственное, что там приколы кеширования, после входа на главной странице надо страницу перезагрузить - иначе логин не виден. Но это там происходит независимо от Adblock Plus.
Отсутствует
Владимиp Палант
> Единственное, что там приколы кеширования, после входа на главной странице надо страницу перезагрузить - иначе логин не виден.
Вот и у меня, собственно, также. Странно, без адблока у меня прикола с кэшированием не было, а сейчас и у меня есть.
Ок, фиг с ним.
Отсутствует
Владимиp Палант
Ответьте, пожалуйста, правильное или нет понимание алгоритма оптимизации в цитате выше.
Добавлено 07-02-2011 19:25:41
На фри-торренты захожу со второй попытки.
Отсутствует
Владимиp Палант
Цитата выше — то я фантазировал на тему как я себе представляю оптимизацию поиска правил по ключам. В виду того, что на реальный код не смотрел, это лишь фантазия. Интересно на сколько она далека от действительности.
Отсутствует
Радик245
Это не алгоритм, это рассуждения на тему того, чем новый алгоритм лучше старого
Причем рассуждения не сильно правильные, поиск строки в хеш-таблице не является в JavaScript самой трудоемкой операцией. Ладно, если вас интересуют подробности:
Каждое правило блокирования в Adblock Plus преобразуется в регулярное выражение. Но просто проверять каждый адрес этими регулярными выражениями нельзя, получится слишком медленно. Здесь отправная точка для оптимизации: нужно осуществить предварительный отбор и сократить количество проверяемых регулярных выражений (в идеале: при отсутствии попаданий вообще обойтись без проверки регулярными выражениями).
Основная идея: найти в правиле "характерную подстроку". Если этой подстроки в адресе нет, то мы точно знаем, что у правила срабатывания не будет - соответственно, проверка регулярным выражением уже не нужна. То есть базовый алгоритм выглядит так: для каждого правила находим "характерную подстроку" и делаем так, чтобы его можно было легко найти по этой подстроке (на практике: кладем в хеш-таблицу, где "характерная подстрока" является хешем правила). При проверке адреса извлекаем из него все возможные подстроки и проверяем, существуют ли правила, которые соответствуют этим подстрокам. Если нет - отлично, значит ни под одно правило этот адрес не подходит. Если да - ничего не поделаешь, дальше уже придется проверять регулярным выражением, для каждого из этих правил.
Отличие между старым и новым алгоритмом в первую очередь в выборе "характерной подстроки". Старый алгоритм просто брал любую подстроку длиной в 8 символов. Соответственно, в проверяемом адресе нужно было найти все подстроки длиной в 8 символов (при длине строки N таких подстрок будет N-7). Новый алгоритм вместо этого выделяет ключевые слова - последовательности букв, цифр и символа % (последний, чтобы urlencoded-значения оставались ключевыми словами). Основное преимущество: ключевые слова в проверяемом адресе не пересекаются, их можно выделить сравнительно простой регуляркой. Такая регулярка в JavaScript выполняется быстрее, чем цикл, использующий substring().
У нового алгоритма есть и недостатки. Выделение ключевых слов из правил (в которых могут присутствовать и спецсимволы, требующие особого подхода) сложнее и требует немного больше времени, чем выделение подстрок (к счастью, это одноразовая операция). Кроме того существенно выросла вероятность того, что будет невозможно найти уникальную "характерную подстроку" для каждого правила. Поэтому пришлось учитывать этот случай и привязывать к некоторым подстрокам несколько правил, что опять же отрицательно сказывается на быстродействии. Для оптимальной работы алгоритма нужно, чтобы списки правил к каждой подстроке были как можно более короткими - Adblock Plus старается это реализовать, но это еще раз замедляет выбор "характерной подстроки" для правила (в первую очередь сказывается на скорости старта браузера).
Отсутствует
Владимиp Палант
Спасибо!
Ещё уточнение (то, что больше всего меня интересует): "характерная подстрока" в новом алгоритме для каждого правила создаётся одна, а не несколько? Если так, то не будут ли замедлять проверку подстроки com , org , net ?
Если я правильно понимаю, то домены будут учитываться вместе с остальными ключами указанными в правиле. Т.е. если мы имеем ||site.com^, то проверяться будут только те пути, в которых есть ключ site и ключ com вместе.
Отсутствует
Радик245
Для каждого правила выбирается только одна характерная подстрока - и в старом, и в новом алгоритме. Но предпочтительно выбираться будут те подстроки, которые используются меньшим количеством других правил. То есть в правиле "||site.com^" будет использоваться ключевое слово "site", а не "com". То, о чем пишет Lain_13, усложнило бы алгоритм и сказалось бы на быстродействии сильнее, чем одна лишняя проверка регулярным выражением на сотню адресов (здесь "одна на сотню" является лишь моим предположением, я не замерял).
Отсутствует
Владимиp Палант
Да, пожалуй это действительно излишне усложнило бы алгоритм. Согласен.
Кстати, я и не говорил, что операция поиска в хэш-таблице слишком ресурсоёмка. Я как-раз говорил о том, что генерация хэшей для всех подстрок (N-7 подстрок) слишком ресурсоёмко. Просто чем меньше таких подстрок, тем меньше операций поиска и экономия времени происходит как на генерации хэшей, так и на поиске подстрок.
Радик245
С другой стороны это подтверждает моё мнение о том, что указывать ключ вроде *.swf| вместо признака $object не стоит. Он всёравно не будет учтён, а лишь усложнит результирующую регулярку.
Владимиp Палант
Ещё одно кстати. Всё же выставь на обсуждение идею добавления маски-антипода для «^». Условно я её обозначаю как «~^», но это может быть любой удобный символ.
Как минимум правила вроде site.com/~^$image,script оно создавать позволит и если для какого-то одного конкретного случая потребуется сделать дополнительное правило site.com:~^/~^, то всё будет ОК. Просто сейчас этим всё чаще пользуются. Иногда специально, иногда просто так им удобнее. Сейчас же нет ни какой возможности чётко обозначить блокируемую структуру и приходится либо делать исключения, либо правила скрытия вместо блокировки.
Было бы интересно увидеть какую подстроку AdBlock считает наиболее уникальной в каждом правиле. Можно сделать отдельную страницу на которую бы выводилась таблица пар правило/подстрока если её открыть? Может такая уже есть? Желательно сортировать по-подстрокам, что б видно было какие правила сели на одну подстроку.
Отсутствует
Он всёравно не будет учтён
И это хорошо. А указывать можно для того, чтобы не блокировать все объекты, не проверив всего содержимого сайта.
Владимиp Палант
Кстати, какие правила быстрее: ||example.com^$object или ||example.com^*.swf ? Или это зависит от того, насколько далеко окажутся "example.com" и ".swf" ?
Отсутствует
Владимиp Палант
Внезапное применение моей идее с антиподом для «^»:
||sitename.~^^$third-party - заблокирует сайт sitename во всех доменных зонах (com, ru, ua, info, …)
Фактически упрощённый аналог Magic TLD.
Для хитро*опых вариантов вроде sitename.com.ua можно будет создать второе правило ||sitename.com.~^^$third-party и на том успокоиться — врядли там будет ещё .net.что-то и подобные.
Причём прошу заметить, что это заведомо более простое решение, чем Magic TLD, хоть и несколько менее универсальное.
Отредактировано Lain_13 (08-02-2011 18:29:34)
Отсутствует
Внезапное применение моей идее с антиподом для «^»:
||sitename.~^^$third-party - заблокирует сайт sitename во всех доменных зонах (com, ru, ua, info, …)
Полезно было бы!
это заведомо более простое решение, чем Magic TLD, хоть и несколько менее универсальное.
Кажется, наоборот, более универсальное:
правила вроде site.com/~^$image,script оно создавать позволит и если для какого-то одного конкретного случая потребуется сделать дополнительное правило site.com:~^/~^, то всё будет ОК. Просто сейчас этим всё чаще пользуются. Иногда специально, иногда просто так им удобнее. Сейчас же нет ни какой возможности чётко обозначить блокируемую структуру и приходится либо делать исключения, либо правила скрытия вместо блокировки.
А иногда и то, и другое: блокировать рекламу вроде ||example.com^$image , делать исключение вроде @@||example.com/img/$image и ещё скрывать рекламу, которая попала под исключение (сейчас я что-то не нахожу этих правил в подписке)! А так достаточно было бы двух правил блокировки.
Отредактировано Радик245 (08-02-2011 19:27:52)
Отсутствует
Радик245
Если ты про сдвоенные правила, то вот они:
Отсутствует
Lain_13
Это я видел. Не про сдвоенные я, а про тройные: блокировка, исключение и скрытие той рекламы, которая попала в исключение. Было у нас такое, причём не так уж давно.
Отредактировано Радик245 (08-02-2011 19:54:20)
Отсутствует
Lain_13
Какой-то не очень известный сайт. На него отчёт пришёл, если не ошибаюсь. Я сначала сделал блокировку с кучей исключений, а потом ты переделал на одно исключение вроде @@||example.com/*/$image , а рекламу, которая попала под это исключение, скрыл.
Сайт с видео.
Отредактировано Радик245 (08-02-2011 21:15:33)
Отсутствует
Lain_13
Не они. Наверное, ты уже что-то переделал.
Добавлено 08-02-2011 21:41:30
Нашёл: kinobanda.net
Сейчас правила переделаны, потому что ||kinobanda.net^$image сейчас нужно вроде всего для одной джифки, а остальное было бы в исключениях.
Отсутствует
> Кажется, наоборот, более универсальное:
Я тут подумал, а ведь «^» не считает точку за разделительный символ. Соответственно маска-антипод будет её поглощать вместе со всем остальным.
Это позволяет использовать её в качестве MagicTLD для двухуровневых доменов «первого» уровня, но с другой стороны оставляет шансы на ложное срабатывание — она ведь в случае site.name.ru при использовании правила ||site.~^^ поглотит не только ru, но и name и потому запрос окажется заблокирован.
Хотя шансы на такое ложное срабатывание в случаях когда был бы полезен MagicTLD достаточно ничтожны, что б их не учитывать.
Кстати, в качестве символа для маски-антипода можно использовать «@» — этот знак не может присутствовать в адресе элементов страницы, на сколько я помню. Символ «A» внутри вполне описывает то, что будет подходить под эту маску, что делает её несколько более интуитивно понятной. Применять этот символ первым в правиле и уж тем более сдваивать ни кто не будет, а потому пересечений с исключениями не должно быть. Пример: ||site.@^$third-party
Добавлено 09-02-2011 03:12:55
Не смотря на неполноценную замену MagicTLD это решение на много компактнее и быстрее в работе чем километровая регулярка со списками доменов первого уровня.
Отредактировано Lain_13 (09-02-2011 03:09:03)
Отсутствует