vladmir
Первую цитату и я не совсем понял (речь о правилах вроде ##[id*="banner"] без указания сайта, но это надо объяснять понятнее), а вторая цитата значит то, что сейчас для оптимизации правил используются «ключи». Ключ — это последовательность знаков из правила блокировки — три или более знаков (букв, цифр…), разделённых «разделительными символами» (перечисленные на сайте Adblock Plus и ещё, только для ключей, точка). Сначала сверяется с адресами элементов ключ, а при совпадении — всё правило.
Отредактировано Йцукен (31-05-2011 11:24:36)
Отсутствует
vladmir
Радик дал правильный пример: ##[id*="banner"]
Но тоже не объяснил почему. Для начала уточню, что мы говорим не о какой-то фишке адблока. Все правила скрытия это обычные CSS-селекторы позволяющие адресовать объекты на страницах. Данное правило хоть и основано на свойстве ID объекта, но не полном ID, а лишь на его фрагменте. Это означает, что вместо выполнения максимально оптимизированного (в самом движке CSS) поиска по точному ID будет выполняться построчное сравнение его с каждым. Ещё хуже если правило основывается на фрагменте свойства style. Хуже потому, что обычно строка со стилем весьма длинная и объектов с указанным стилем намного больше. Таким образом поиск идёт ещё дольше.
Если у правила скрытия указать точный ID или Class последнего объекта в строке (например, mail.google.com##.Bu:first-child + .Bu + .Bu ← вот этого), то такой объект будет очень быстро найден, проверены остальные условия и он будет скрыт, но если указать тэг объекта без класса или ID, то будут перебраны все объекты этого типа (snesorama.us##DIV[id^="post_message_"] + DIV ← вот как здесь).
Но если в селекторе не указан ни ID, ни класс, ни тип объекта, то перебираются абсолютно все объекты на страницу. Если приходится ещё и выполнять полнотекстовый поиск ([id*="banner"] ← как здесь), то это работает уже во много раз медленнее. И чем больше на странице объектов, тем хуже.
Так пример Радика можно существенно ускорить если точно указать, что нужно скрывать объекты типа DIV: ##DIV[id*="banner"].
В таком варианте сначала будет выполняться поиск DIV'ов и только после этого для найденных объектов будет проверяться свойство ID.
Оптимизация обычных правил блокировки заключается в том, в нём требуется наличие "ключа". Я и Радик уже писали, что значит "ключ" в данном случае.
Что нам это даёт? Каждому правилу в подписке и частному ставится в соответствие такое слово-ключ. Если ключей несколько (/uploads/smiles/* ← здесь два, а вот тут один → /240x400_, а вот тут → //li.ru/*? ← нет ключей вовсе), то выбирается тот, который реже всего встречается. Таким образом к каждому слову-ключу привязывается от 1 до N правил.
Когда адблок проверяет URL-адрес элемента он разбивает адрес на такие же ключи и выполняет поиск наличия у себя в базе таких слов-ключей. Если ни чего не находит, то пропускает строку. Этот поиск выполняется весьма быстро. Если же находит, то строка сверяется с каждым правилом привязанным к найденному ключу. Если хоть одно правило подходит, то запрос блокируется, а иначе AdBlock переходит к проверке следующего совпавшего ключа и так пока не переберёт все правила привязанные ко всем найденным в строке ключам. Если снова не находит соответствий, то запрос таки пропускается.
Кстати, о правилах без ключей и регулярных выражениях — они все сверяются с _каждым_ запросом. Когда таких правил 1-2 десятка, то это не заметно, но когда их сотни, а может и тысячи, то это становится проблемой и заметно влияет на скорость проверки запросов и создаёт задержки в загрузке страницы. Собственно ради того, что б избежать тотальной проверки всех правил против всех запросов и была придумана оптимизация. Раньше она работала несколько иначе, а до появления оптимизации правил подписки вообще превращали в нагромождения сверхсложных регулярных выражений для того, что б сократить число отдельно проверяемых правил до минимума. Если посмотреть на подписку Хакруса, то там можно найти кошмарики вроде:
/80x15|88x15|88x31|88x32|100x100|100x35|120x60|120x240|120x120|120x140|120x240|120x600|125x125|160x80|200x100|234x60|240x400|380x60|392x72|400x40|468x60|468x80|470x60|480x60|600x100|728x60|728x90|800x60/ /[-\/\._\(&=\?]ad_?(d?s(?!\.)(c|e)?rvi?(ng)?e?r?|\d\.|(x|sv?)(\d?|\.js)|sc?(?!(_|\/))|vert.*|view|tech|trix|type|_?str(eam|ing)|code|case|cli(ck|ent)s?)[-\/\._\)\?=](?!etr)/$~stylesheet /[-\/\._\(&=]ad_?(action|butler|brite|bottom|codes?\d*|function|ima?ge?s?|_?id(?!=&)|js(?!\.php)|.php|box_?|farm|v(?!=?(&|off))|x\.js|-.*|l(ink|og|ayer))[-\/\._\)&=\|](?!s(ea)?rch)/$~stylesheet /[-\/\._\(&=]ad_?(man|mentor|module|mosaic|pops?|parse|revolver|s(dk|end|ize|tome|onar|cripts?)|s?remote|type|-?f(low|rame|etch))[-\/\._\)&=]/ /[-\/\._&=](dime|(euro|pay)s?4?|fine|fast|mega|precision|specific|swf\?|value)[_-]?(stream|xchange|(c|k)lick)(?!\.(jpg|png))/
Это 5 регулярных выражений. Причём первое ещё и довольно не оптимальное. Это отголоски того, что было.
И это лишь часть того, что там творится (← яркий пример того как не нужно делать подписку).
О регулярках говорить не хочу. Это отдельная, сложная и не очень-то нужная тема. АдБлок их поддерживает, но пользоваться ими крайне не рекомендуется именно из-за того, что они не подлежат оптимизации.
Отредактировано Lain_13 (20-04-2011 20:26:43)
Отсутствует
Чёй-то у меня Симанки 2.0.14 с Адблокплюсом 1.3.6 начала тормозить так конкретно.
Раньше такого не былоtm
Отключил в ней Адблокплюс - прекратилось.
В Симанки 1.1.19 с адблокплюсом 1.0.2 - всё как и было - замечательно (а 2.0.14 и 1.1.19 у меня всегда запущены одновременно).
Да, фильтры все ручные, нажитые годами непосильным трудом.
Это из-за фильтров? ... или где
Отсутствует
vladmir
Вероятно. Сделай бэкап файла настроек и попробуй с моими подписками, например. ↓
И кинь правила все свои под спойлер в мою тему (в подписи ссылка).
Вдруг что полезное найду для подписки.
Отредактировано Lain_13 (03-05-2011 19:49:12)
Отсутствует
Lain_13
Не, я публиковать не буду, там куча просто картинок, которые мне на постоянных сайтах не нужны - не рекламные. И вообще кавардак - эт как в неубранную квартиру гостей звать.)))
Я ещё поэксперементирую, может быть причина комплексная у меня всё же.
Отсутствует
Всё же не из-за адблокплюса тормоз у меня и только в твитере. Там напихано скриптов до-фи-га. И такое впечатление последнее время ещё добавили. Ленту поиска прокручиваешь далеко вниз, открываешь твит вправо - и там зависон. А в самом начале если по твиту жамкнуть, то норм. И это от версии Gecko зависит.
У меня зависает в Firefox 3.5.19 и SeaMonkey 2.0.14 (Gecko 1.9.1.19). На Gecko 2.0.х не висит.
Отсутствует
Владимиp Палант
Хотя вот ещё такой эффект в SM 2.0.14 + Adblock Plus 1.3.6
Нажимаю на строчку в списке объектов страницы XML request - выделяются рамками все элементы в html страницы (ну не все, если точно, - на части страницы).
Не по всем строчкам XML request-ов срабатывает.
Вижу на сайте твитера. Но на других сайтах мне как-то и не приспичивало особо по строчкам XML щёлкать.
http://forum.mozilla-russia.org/uploaded/2011-05-06_110806.png
В SM 2.1b3 + Adblock Plus 1.3.6 ничего не выделяется из XML request-ов. Те же строчки в твитере перебирал.
В FF 3.5.19 + Adblock Plus 1.3.6 - как в SM 2.0.14 - выделяются-мигают. А и на картинки некоторые так же по всей странице густая сетка выделения и на скрипты.
То есть по версии движка.
Вроде бы что-то такое здесь было в теме, я уж искать не буду - что вижу написал просто.
Отсутствует
Добрый день всем.
Дня три назад AdBlock перестал блокировать рекламу вконтакте.
Стоит WinXP Pro SP3, Mozilla Firefox 4.0.1, AdBlock 1.3.6 с подписками RuAdlist + EasyList (русский), EasyList English, Fanboy's List.
Пробовал переустанавливать сам плагин, удалять и добавлять подписки заново.
Помогите.
Спасибо.
Отсутствует
Нет, ничего такого не ставил.
С мозиллой и ее плагинами ничего не далал вообще, т.е. какого-то определенного момента, что бы я что-то изменил, что могло вызвать проблему, не помню.
Стоят сейчас
AdBlock Plus
Download Status Bar
Forecast Fox Weather
Russian Spellchecking dictionary
Microsoft .NET Assistant (этот сам когда-то появился и стоит disabled) - зачем он нужен не знаю.
Отсутствует
nevermind1982
Вот это странно. Дело в том, что у меня есть там аккаунт, а вот рекламы я там не вижу. Ну кроме как в некоторых играх.
Давай ты когда наткнёшься на рекламу создашь отчёт и кинешь ссылку на него в тему, указанную у меня в подписи.
В меню адблока "Сообщить о проблеме на сайте" или как-то так.
Отсутствует
Кинул в теме по ссылке в подписи "тема на форуме".
Спасибо.
Отсутствует
Но если в селекторе не указан ни ID, ни класс, ни тип объекта, то перебираются абсолютно все объекты на страницу.
Разве вот такое правило не оптимизируется?
Отредактировано CoolCmd (07-05-2011 19:05:02)
леса живет в лису?
Отсутствует
Вышел Adblock Plus 1.3.7. Основные изменения:
Полный список изменений: http://adblockplus.org/ru/changelog-1.3.7
Отсутствует
CoolCmd
##.classname > *
Это правило скрытия, а не блокировки. Оптимизироваться АдБлоком оно не может.
А с точки зрения CSS это просто отвратительное правило. Мало того, что перебираются все объекты, так ещё для каждого приходится выполнять довольно медленную операцию перехода на уровень выше для проверки объекта—родителя.
Запомни: CSS-селекторы разбираются справа налево по-объектам. Соответственно слева должен быть максимально чётко обозначенный объект.
Отсутствует
Т.е. если например страница состоит из 100 картинок и текста, а правилами должно быть убрано 50 картинок, то в первом потоке грузится вся страница (все 100 картинок) независимо от правил адблока, а во втором потоке (либо в остальных N потоках) - картинки постепенно убираются исходя из правил адблока.
Загрузка страницы существенно замедлится, поскольку начнут выполняться скрипты, которые Adblock Plus обычно блокирует. А они еще и запустят загрузку уймы всякого ужаса...
Владимир Палант, возможно, стоит сделать короче название вводимого расширением пункта в меню «Вид»
Да, всё никак руки не дойдут сделать это для всех переводов. Давно уже планируется изменить "Adblock Plus" на "ABP" в этом пункте меню и подобных.
Владимиp Палант, сделайте пожалуйста кнопки отключения "Установки AdBlock Plus..." в меню Инструменты и "AdBlock Plus: элементы открытой страницы" в меню Вид.
http://adblockplus.org/en/faq_customization#menu_remove (прошу прощения, но на русский пока что никто не перевел)
Нажимаю на строчку в списке объектов страницы XML request - выделяются рамками все элементы в html страницы (ну не все, если точно, - на части страницы).
Это в Adblock Plus 1.3.7 исправлено.
Соответственно слева должен быть максимально чётко обозначенный объект.
Наверное все-таки справа?
Отсутствует
А с точки зрения CSS это просто отвратительное правило. Мало того, что перебираются все объекты, так ещё для каждого приходится выполнять довольно медленную операцию перехода на уровень выше для проверки объекта—родителя.
Ты уверен что в лесе нет никаких оптимизаций css? Например в моем примере логично было сделать getElementsByClassName('classname') и перебрать детей. И все бы быстро работало.
Я этого проверить не могу, т.к. querySelectorAll() нихрена не оптимизирован и скорее всего о скорости работы css ничего сказать не может.
Наверное все-таки справа?
Присоединяюсь к вопросу.
Отредактировано CoolCmd (10-05-2011 18:08:45)
леса живет в лису?
Отсутствует
CoolCmd
Оптимизации есть - для селекторов по ID и по классу элемента. Подробности здесь: https://developer.mozilla.org/en/CSS/Wr … icient_CSS
CSS не применяется на "готовый" документ после загрузки. Он применяется к каждому новому элементу в процессе загрузки страницы. И к каждому элементу, когда его свойства меняются. Поэтому CSS и работает справа налево - точкой отсчета является элемент и нужно понять, подходит ли он под правило. При этом лучше всего не заставлять браузер переходить к другим элементам.
Отсутствует
Владимиp Палант
> Наверное все-таки справа?
Да.
Добавлено 10-05-2011 18:37:28
CoolCmd
С другой стороны если такое правило применяется к одному конкретному сайту и на том сайте практически нет динамических изменений на странице (а не как на твиттере), то такое правило будет вполне приемлемо.
Отредактировано Lain_13 (10-05-2011 18:37:28)
Отсутствует
aleks_123
Влияет на колонку "Попаданий" - там показывается количество срабатываний для каждого фильтра.
Отсутствует
Желающие могут подправить названия пунктов меню в моём переводе — у меня английская локаль и я не знаю точно, что там должно быть.
Отредактировано Lain_13 (10-05-2011 19:36:39)
Отсутствует