Board logo

标题: [改进建议] 似乎过滤规则对打开网页效率影响甚大 [打印本页]

作者: 285900537    时间: 2007-12-27 01:34     标题: 似乎过滤规则对打开网页效率影响甚大

似乎过滤规则对打开网页效率影响甚大。就如我的博客forerunner.yo2.cn而言,使用TW打开需要等待数分钟(我的过滤规则比较多,因为我喜欢在网上乱逛),但使用FF3Beta2打开,竟然只花了十多秒时间。这是在相同时间(晚间十二点左右)在相同系统环境下的尝试。

我翻看了一下theworld.ini文件,似乎感觉tw的黑名单过滤是单个页面对整个黑名单库进行逐个匹配,也就是说如果我有1000条左右的规则,那么我打开一个没有广告的页面也需要进行匹配1000次,这只是进行域名匹配。如果域名吻合匹配了,则进行网页HTML代码的匹配,(或许我有认识的错误或不专业的问题)
  1. #exd#*网站域名匹配*#HTML逐条匹配###替代内容
复制代码
就如下面所示,我猜测的匹配方式。(例举我的博客forerunner.yo2.cn为例)
  1. #exd#*17173.com*#AdCode001###<!--twadreplaceinfo--><!--规则1-->
  2. #exd#*17173.com*#AdCode002###<!--twadreplaceinfo--><!--规则2-->
  3. #exd#*forerunner.yo2.cn*#AdCode003###<!--twadreplaceinfo--><!--规则3-->
  4. #exd#*cnbeta.com*#AdCde004###<!--twadreplaceinfo--><!--规则4-->
  5. #exd#*bbs.cnbeta.com*#AdCde005###<!--twadreplaceinfo--><!--规则5-->
复制代码
以上规则是以并列形式存在的,也就是如下所示的结构:

├白名单;
├全局规则(通用规则);
├规则1:17173.com规则,AdCode001;
├规则2:17173.com规则,AdCode002;
├规则3:Forerunner.yo2.cn规则,AdCode003;
├规则4:cnBeta.com规则,AdCode4;
├规则5:bbs.cnBeta.com规则,AdCode5.


我认为这不是理想的状况,因为诸如17173这类广告满天飞,E版狂喷血的网站,广告何其多,规则何其多,如果按照目前的全体进行域名匹配一遍,实在是太夸张了,更何况有些网际超人、网际狂人和像我这样的网际浪客,整天飘来荡去的,规则必定会逐渐累积变得很多,虽然我们也想减少规则,但比起那些该死的讨厌的广告,我们还是会觉得这些规则是比较可爱的和可接受的。

所以我认为我们或许可以采用以下的方式进行匹配,这样可以减少大量的匹配,或许能够达到所谓“加速”或打开网页“减少卡”的情况,或许有些规则会导致部分用户浏览器假死的情况,又或者是浏览器比较猛的网站(如使用了needed版主的iframe通杀规则,而某个网站恰好比较恶搞搞了数十百来个这样的小的或display的iframe,我们的浏览器一定吃不消,假死也是极有可能的)。虽然我觉得我有些胡搅蛮缠,上面的理由也许比较牵强,但也说明了一个比较核心的问题,这也是本建议的比较核心的问题,那就是规则有时候会对浏览器的稳定或正常流行行为产生不良影响,严重的情况便是假死。

以下是我认为比较理想的方式,这种方式很可能可以改善我们浏览部分网页时的效率。

├白名单;
├全局规则(通用规则);
├匹配域名索引1:17173.com
│        ├17173.com站内规则1:#*17173.com*#AdCode001###<!--twadreplaceinfo--><!--规则1-->;
│        └17173.com站内规则2:#*17173.com*#AdCode002###<!--twadreplaceinfo--><!--规则2-->;
├匹配域名索引2:yo2.cn
│        └yo2.cn站内规则3:#*forerunner.yo2.cn*#AdCode003###<!--twadreplaceinfo--><!--规则3-->;
└匹配域名索引3:cnBeta.com
          ├ cnBeta.com站内规则4:#*cnbeta.com*#AdCode004###<!--twadreplaceinfo--><!--规则4-->;
          └ cnBeta.com站内规则5:#*bbs.cnbeta.com*#AdCode005###<!--twadreplaceinfo--><!--规则5-->.


如上面的结构图,如果要匹配forerunner.yo2.cn我的博客的话,17173的规则库只会匹配一次,而不是两次,cnbeta也是,这样我打开forerunner.yo2.cn,便减少了2次多余的匹配。如果规则比较多,那么减少量将是非常可观的。

如果我需要浏览17173,那么我也只会匹配一个cnbeta(只需匹配域名索引),那么我对于17173的匹配次数将是:

匹配次数=域名索引总数+17173规则库条数*HTML代码量*系数m

(其中域名索引总数<<规则总数)


而如果不改进的话,则是一个就比较恐怖的数字(如果你的规则量比较可观的话):

匹配次数=规则总数-17173规则库总数+17173规则库总数*HTML代码量*系数m

(其中规则总数>>域名索引总数)


[attach]37494[/attach]

我想,一个网站再NB也不会牛逼到规则库总数超过几十条吧,所以我认为可以把【bbs.cnbeta.com】放入【cnbeta.com】之下(如上面结构图的规则4和规则5)。因此通过两层关系,站点的规则库采用索引匹配,匹配域名索引之后忽视其他的域名索引,直接开始匹配这个域名索引下的规则库,效率大大增加,更有利于管理规则(如果开发组将之纳入计划的话)。

我说的不是很专业,事实上一些东西我也不是非常理解其原理,但使用规则的用户一定会注意到有些规则会大大降低浏览效率,有时候规则的先后顺序也影响过滤效果(这个理所当然,这个和匹配的原理有关,我觉得E版可以为我们总结些什么,因为他是规则版块的元老之一)。

上面的看法和观点望开发组能考虑,同时也接受广大发烧友(如我)的质疑和诘问,共同就这个功能的完善献计献策,供开发组考虑。

最后,献上一份迟到的圣诞节快乐祝语和一份提前的元旦快乐祝语,预祝广大同学们在1月7号之后的考试中取得满意成绩:)

[ 本帖最后由 285900537 于 2007-12-27 15:47 编辑 ]
作者: lgc121    时间: 2007-12-27 08:34

坐个板凳,听楼主讲天书
作者: tommy8o8    时间: 2007-12-27 08:38

楼主不管是皮还是其它都是长篇的,等高人来分析
作者: yjwgi    时间: 2007-12-27 10:15

不错。可以加快速度
作者: mutalisker    时间: 2007-12-27 10:33

e.....楼主, exd类型的过滤规则就是你说的那种实现方式啊
作者: tabris    时间: 2007-12-27 10:48

正则的效率还是低  
不如建立黑名单的时候自动生成通用过滤规则存在配置文件里 效率高
作者: 沉沉暮霭    时间: 2007-12-27 16:27

说实话,这帖子对我打击很大。

没想到躲到这里来还是有看不懂的帖子~~
作者: elkay    时间: 2007-12-27 16:30

现在就是先匹配域名,再匹配规则啊。

没有明显的察觉到对速度的影响
作者: ujuj127    时间: 2007-12-27 19:43

非常强大
支持楼主,
就是主线网站下面N条分线过滤系统
作者: needed    时间: 2007-12-28 00:19

难道你用exd  写17173的规则  打开163的时候会 匹配么 ?
    当然不会.
  不过, 写的不太完善的黑名单对浏览速度的确有影响...
作者: GreenBrowser    时间: 2007-12-28 08:08

原帖由 elkay 于 2007-12-27 16:30 发表 http://bbs.ioage.com/cn/images/common/back.gif
现在就是先匹配域名,再匹配规则啊。

没有明显的察觉到对速度的影响

这几天TW假死情况竟然少了好多,好像是因为改过黑名单的样子

1.现在除了填表功能鼠标手势方面跟GB还有些差距,浏览情况还算稳定

2.白名单自动消失的情况还时有发生,是我RPWT?
作者: 285900537    时间: 2007-12-28 10:37

原帖由 needed 于 2007-12-28 00:19 发表 http://bbs.ioage.com/cn/images/common/back.gif
难道你用exd  写17173的规则  打开163的时候会 匹配么 ?
    当然不会.
  不过, 写的不太完善的黑名单对浏览速度的确有影响...



如何在theworld.ini配置文件内进行域名匹配?
如何在百千条(目前我还只有四百多条的样子)中搜寻相匹配域名的规则?
使用exd对17173写100条规则,然后再为cmfu写5条规则,那么TheWorld是进行105次域名匹配还是2次域名匹配?
如果将LZ的帖子看完的话,很清晰的可以看到两种方式的匹配量的不同,这是一个数量级的差距。
我不使用时间复杂度来进行解释,也不牵涉其他的机器性能进行具体的演算,因为这个工作是很复杂而难以理解的。

我们例举一个非常实际的例子。
假设17173有50条规则;163有50条规则;17K有50条规则;等等,共有20个网站,那么规则总数是50*20=1000条。
按照目前的匹配方式,我需要匹配17K网站,那么:

第一步,对1000条规则进行域名匹配,匹配1000次;
第二步,找到17K的那50条规则,进行HTML代码匹配,设HTML代码量为A,比例系数为M,则匹配量是50AM;

统计:总共的匹配次数为:1000+50AM。

如果采用我所说的索引方式的匹配方式,则:

第一步,对20个域名进行匹配,匹配次数20次;
第二步,对17K内的50条规则进行匹配,匹配次数是50AM次;

统计,总共的匹配次数为20+50AM。

很容易地,也很明显的,1000+50AM>>20+50AM,节省了匹配次数的好处是效率的提高,稳定性的提高,以及其他的好处。

如果比较一番的话,有时候你会发现MX的过滤效率比TW高,但不排除MX对用户心理的暗示(过滤了什么,右下角有提示)会导致用户“感觉上效率高”的感觉。

至于不完善的黑名单。。。一般的,我认为只有不规范的网页需要过滤,才会诞生不完善的黑名单。。。而且,一般的,写黑名单的人都非常谨慎,尽可漏杀也不误杀,宁可少杀也不滥杀,这一点E版深有体会。
作者: needed    时间: 2007-12-28 10:56

域名 匹配跟 html 匹配不一样 ok ?
这样吧. 我们用数字来说明一下问题
   js的效率并不高, 比c++远远落后 . 我们测试一下 域名匹配所需要的时间
以下代码可以在资源收集器运行
  1. <script language="JavaScript">
  2. var  counter=1000;
  3. var host ='17173.com';
  4. var time1 = new Date().getTime();
  5. for(var i=0;i<counter;i++){
  6. if( host == '163.com')alert('true');
  7. }
  8. alert(new Date().getTime() - time1)
  9. </script>
复制代码
另外, js的计算周期为16ms(毫秒)

在我的电脑 p4 1.8 内存768  上
  裸奔,开了三个q 迅雷bt

前面是匹配次数 ,后面是所需时间, 单位毫秒 下同
次数: 0 ~ 1000   所需时间 0 (即瞬时或者 少于16ms
          10000                           20
           100000                        210~220
            1000000                       2073~  2153  

当你写了100w条规则, tw 用 脚本 需要域名判断只需要2秒.   c++ 呢? 我猜会在5分之1秒内完成


tw的黑名单需要改进, 或许索引是一个方向(因为自身管理不方便) 但绝对不是效率的问题
   
mt的过滤不见得比tw要先进...
作者: 285900537    时间: 2007-12-28 11:10

原帖由 needed 于 2007-12-28 10:56 发表 http://bbs.ioage.com/cn/images/common/back.gif


是的,MX只是比TW多了个用户暗示,所以“感觉上快”。

好吧,有具体的数据那就很好说话了,性能效率是其一。

其二是管理,LS说的很清楚,这是软肋,这一点以前很多帖子都反映了;
其三是稳定,其实这个说不准,变数很多,至少我感觉少匹配说不定能得到稳定的提升

这三点是顶楼帖子的核心,关于第一点数据已经证明不必多虑,非常感谢needed的数据;那么就只剩第二点和第三点了。

很高兴能够探讨这个问题。
作者: AY    时间: 2007-12-28 13:56

MT2 的黑名单便是采用 LZ 建议的匹配方法,可以看看 MT2 的 sitelist.xml 格式:
  1. <sp>
  2.     <m2filter d="*" version="1.0">
  3.         <blacklist/>
  4.         <whitelist/>
  5.     </m2filter>
  6.     <m2filter d="hezu123.com" version="1.0">
  7.         <blacklist>
  8.             <item mode="0">http://busjs.vodone.cn/</item>
  9.         </blacklist>
  10.         <whitelist/>
  11.     </m2filter>
  12.     <m2filter d="bbs.ioage.com" version="1.0">
  13.         <blacklist>
  14.             <item mode="0">http://bbs.ioage.com/cn/images/avatars/noavatar.gif</item>
  15.             <item mode="0">http://bbs.ioage.com/cn/customavatars/5906.png</item>
  16.             <item mode="0">http://bbs.ioage.com/cn/customavatars/10253.jpg</item>
  17.         </blacklist>        
  18.         <whitelist/>
  19.     </m2filter>
  20. </sp>
复制代码
页面连接的档案地址比域名要长,像 doubleclick 等的地址便往往超过 500 个字节。另外黑名单规则含通配符及正则,匹配上比纯文字要复杂。所以大量的黑名单规则对效率是会有影响的,这也是 TW 一直不支持右键添加过滤规则的原因,避免用户添加过量的规则影响效率。

而 MT2 的黑名单匹配方法则可以大大减低匹配量。因此 MT2 可以支持像 opera 般的方便添加过滤规则方式,而不用担心用户添加过量的规则,因为规则是添加到页面的域名之下的。

MT2 这个方式实在十分值得借鉴。
作者: needed    时间: 2007-12-28 14:02

假如,假如 mt 打开网页的速度比tw快.
   我严重支持ls的 意见. 可惜..可惜....

  不过还是那句话, tw的黑名单的确需要改进.   
     但个人觉得mt的黑名单并不比 tw的高效/ 注意.我没有说黑名单管理
作者: AY    时间: 2007-12-28 14:55

原帖由 needed 于 2007-12-28 10:56 发表 http://bbs.ioage.com/cn/images/common/back.gif
mt的过滤不见得比tw要先进...

MT2 的过滤是比 TW2 更灵活的,能写出更准确的通用过滤规则 (像我之前说过的例子 TW2 目前便不能过滤)。可以看看 MT2 支持的一些属性:

match_count - 在同一个 request 的匹配次数,比如可以注明 1,便可以只匹配 <head> 而不匹配其他,比如 document.write('<head>') 里面的 <head>

bound - 锁定匹配范围,比如确保匹配对应的 opening/closing tag,或匹配 <body onload...> 里面的 onload 而不匹配其他的 onload

max_bound_size - 锁定匹配字节上限,避免不必要的匹配,比如匹配目标 <a...</a> 只有 100 字节,4000 字节的 <a...</a> 便忽略

exclude - 豁免含关键字的匹配,比如匹配所有 <object...</object>,但豁免含 d27cdb6e-ae6d-11cf-96b8-444553540000 (flash)

[ 本帖最后由 AY 于 2007-12-28 14:56 编辑 ]
作者: yjhdeys    时间: 2007-12-28 14:59

虽然不懂这个 但是楼主认真和细心应该赞一个
作者: needed    时间: 2007-12-28 15:05

mt的便利不等于  高效......
作者: o080o    时间: 2007-12-28 15:46

牛人!!!!!

作者: AY    时间: 2007-12-28 15:53

原帖由 needed 于 2007-12-28 14:02 发表 http://bbs.ioage.com/cn/images/common/back.gif
假如,假如 mt 打开网页的速度比tw快.
   我严重支持ls的 意见. 可惜..可惜....

我测试过无数次,每次清除缓存然后同时打开 20 个不同网站的主页,在关闭过滤及插件的情况下(因为 IE 没有相关功能),IE, MyIE, MT1, MT2(beta2 之后版本), TW1, TW2, GB, Avant 所需要的时间相差一般不超过 5-10 秒,即平均每个页面相差不到 0.25-0.5 秒,而反覆测试亦没有固定那个最快的 (MT2 beta 2 及之前版本倒是特别慢)。使用同样的 IE 内核,宣染速度不可能有大分别。用户感觉到的速度分别应该主要是不一致的内容过滤所做成,一个 flash 便往往几百 k,过滤和没过滤所需的页面下载时间会相差很远,相信这个也是一些用户感觉苦花菜版较快的原因。

  不过还是那句话, tw的黑名单的确需要改进.   
     但个人觉得mt的黑名单并不比 tw的高效/ 注意.我没有说黑名单管理

可以再看看 12 楼的解说。
作者: elkay    时间: 2007-12-28 16:03     标题: 回复 17# 的帖子

这些本来就是正则表达式的特性,正则表达式本身就可以做到啊

只是用正则表达式写出来比较复杂,mt的这个看上去比较简洁而已

[ 本帖最后由 elkay 于 2007-12-28 16:04 编辑 ]
作者: AY    时间: 2007-12-28 16:03

原帖由 needed 于 2007-12-28 15:05 发表 http://bbs.ioage.com/cn/images/common/back.gif
mt的便利不等于  高效......

我是说 MT2 的黑名单高效,原理在 12 楼有解说。

另外我是说 MT2 的文本(正则)过滤比 TW2 的更灵活,并非说比 TW2 的更高效。文本(正则)过滤的匹配比黑名单复杂得多,加上 MT 可以使用 bound,很难比较效率。
作者: AY    时间: 2007-12-28 16:11

原帖由 elkay 于 2007-12-28 16:03 发表 http://bbs.ioage.com/cn/images/common/back.gif
这些本来就是正则表达式的特性,正则表达式本身就可以做到啊

只是用正则表达式写出来比较复杂,mt的这个看上去比较简洁而已

用正则表达式能匹配所有 classid 为 d27cdb6e-ae6d-11cf-96b8-444553540000,cfcdaa03-8be4-11cf-b84b-0020afbbccfa,6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,02bf25d5-8c17-4b23-bc80-d3488abddc6b 以的 <object...</object> 么?作用是禁止 activex object 但豁免 flash/wmp/qt/rp 等。

另外我早前在http://bbs.ioage.com/cn/viewthread.php?tid=40659&extra=&page=2 39 楼说的过滤如何实现?作用是删除所有统计 script,包括 external 及 inline 的。

[ 本帖最后由 AY 于 2007-12-28 16:32 编辑 ]
作者: AY    时间: 2008-1-2 16:56     标题: 回复 22# 的帖子

To elkay

请问 24 楼说的规则在 TW2 怎样用正则过滤?这些规则在 MT2/proxomitron 都可以轻易实现的。

用正则表达式能匹配所有 classid 为 d27cdb6e-ae6d-11cf-96b8-444553540000,cfcdaa03-8be4-11cf-b84b-0020afbbccfa,6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,02bf25d5-8c17-4b23-bc80-d3488abddc6b 以外的 <object...</object> 么?作用是禁止 activex object 但豁免 flash/wmp/qt/rp 等。

这个规则是禁止网页使用 flash/wmp/qt/rp 等以外的 <object>,可以去除一些 IE only 的广告及增加安全性。

另外我早前在http://bbs.ioage.com/cn/viewthread.php?tid=40659&extra=&page=2 39 楼说的过滤如何实现?作用是删除所有统计 script,包括 external 及 inline 的。

这个规则是禁止网页上统计用的 js,减小 cpu 占用及加强私隐。

[ 本帖最后由 AY 于 2008-1-2 17:06 编辑 ]
作者: elkay    时间: 2008-1-2 17:28     标题: 回复 25# 的帖子

正则表达式中
(?!pattern)和^
可以匹配除特定字符之外的字符

至于你说的统计,我实在看不出有什么难度?
只要有统计链接,这跟普通黑名单没有任何区别
作者: AY    时间: 2008-1-2 18:01

原帖由 elkay 于 2008-1-2 17:28 发表 http://bbs.ioage.com/cn/images/common/back.gif
正则表达式中
(?!pattern)和^
可以匹配除特定字符之外的字符

能提供完整规则么?

至于你说的统计,我实在看不出有什么难度?
只要有统计链接,这跟普通黑名单没有任何区别

问题是要删除 inline 的统计 script。
作者: elkay    时间: 2008-1-2 18:09     标题: 回复 27# 的帖子

随手找了个有flash的页面,按你的说法写了个例子
匹配除d27cdb6e-ae6d-11cf-96b8-444553540000之外的object
  1. <object[^>]*?clsid:(?!d27cdb6e-ae6d-11cf-96b8-444553540000)[\s\S]*?<\/object>
复制代码
至于统计,你给个实际页面,然后要告诉我要实现什么效果
作者: AY    时间: 2008-1-2 18:17

原帖由 elkay 于 2008-1-2 18:09 发表 http://bbs.ioage.com/cn/images/common/back.gif
至于统计,你给个实际页面,然后要告诉我要实 ...


再多举个例子说清楚一点。
我在任何网站都会过滤统计用的 js,因为这些 js 浪费 cpu,而且往往还要下载图档,影响页面加载时间。

在 proxomitron 我是用下面的过滤规则:
bound=$NEST(<script,</script>)     bound 确保只会匹配对应的 <script 及</script>
match=*(hitbox.com|qksrv.net|112.2o7.net|superstats.com|falkag.net|google-analytics.com|cyber-traffic.net|estat.com|surfaid.ihost.com|nedstat.nl|nedstatbasic.net|questionmarket.com|spylog.com|thecounter.com|survey-poll.comsageanalyst.net|hotlog.ru|addfreestats.com|bizrate.com|count-down.tv|counter.yadro.ru|extreme-dm.com|top.list.ru|count.e-city.tv|sageanalyst.net)*

在 maxthon 2.0 我可以用下面的过滤规则:
bound=<script.*?</script>     bound 确保只会匹配对应的 <script 及</script>
match=.*(hitbox.com|qksrv.net|112.2o7.net|superstats.com|falkag.net|google-analytics.com|cyber-traffic.net|estat.com|surfaid.ihost.com|nedstat.nl|nedstatbasic.net|questionmarket.com|spylog.com|thecounter.com|survey-poll.comsageanalyst.net|hotlog.ru|addfreestats.com|bizrate.com|count-down.tv|counter.yadro.ru|extreme-dm.com|top.list.ru|count.e-city.tv|sageanalyst.net).*

在 TW 要怎样写才能过滤这些统计 JS (需要包括 inline JS,即是 <script>...</script>,比如像 http://sports.espn.go.com/nba/index 的 hitbox 统计) 而不会出现我在 20楼 及 24楼 提出的错误及失效问题? 我十分肯定没有 bound 的话是不可能做得到的。


http://bbs.ioage.com/cn/viewthre ... p;extra=&page=2 39 楼
作者: elkay    时间: 2008-1-2 18:24     标题: 回复 29# 的帖子

我的意思是你给个实际页面,我不知道你要过滤的跟我认为的是不是一个东西

是不是类似这种?
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>

是的话就简单了
  1. <script[^<]*?google-analytics[\s\S]*?<\/script>
复制代码
其他的统计链接只需要维护google-analytics这部分的关键字就可以了
作者: jmdjy    时间: 2008-1-2 18:30

原帖由 285900537 于 2007-12-28 10:37 发表 http://bbs.ioage.com/cn/images/common/back.gif



如何在theworld.ini配置文件内进行域名匹配?
如何在百千条(目前我还只有四百多条的样子)中搜寻相匹配域名的规则?
使用exd对17173写100条规则,然后再为cmfu写5条规则,那么TheWorld是进行105次域名匹配还 ...


以前用数据库foxpro的时候,如果记录少的话,我喜欢用loca,比seek 少不了多少时间,差那几毫秒,但不用建索引呀。
方便很多。当然记录数一多,这样就不行了。

看看现在的规则有多少条记录?不过就一两千条吧,而且都是简单的记录。以现在的电脑速度,根本可以无视,可以认为是0秒时间内完成的,难道你非常计较那几百毫秒时间吗?

所以,在这个速度的争论上,是没必要的。功夫花在其它地方更好。
作者: AY    时间: 2008-1-2 19:01

原帖由 elkay 于 2008-1-2 18:24 发表 http://bbs.ioage.com/cn/images/common/back.gif
我的意思是你给个实际页面,我不知道你要过滤的跟我认为的是不是一个东西

是不是类似这种?
  1. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
复制代码
是的话就简单了

不是 external script,是 inline script,并且需要所有网站通用的:
在 TW 要怎样写才能过滤这些统计 JS (需要包括 inline JS,即是 <script>...</script>,比如像 http://sports.espn.go.com/nba/index 的 hitbox 统计)

[ 本帖最后由 AY 于 2008-1-2 19:03 编辑 ]
作者: elkay    时间: 2008-1-2 19:10     标题: 回复 32# 的帖子

就如你给的网站,要所有网站通用写成通用规则就可以
  1. <script[^>]*?>[^>]*?hitbox[\s\S]*?<\/script>
复制代码
我就不明白,这些原本正则表达式都可以做到的,mt干嘛非要自己搞一套东西出来
作者: AY    时间: 2008-1-14 22:19

原帖由 elkay 于 2008-1-2 19:10 发表 http://bbs.ioage.com/cn/images/common/back.gif
就如你给的网站,要所有网站通用写成通用规则就可以
  1. <script[^>]*?>[^>]*?hitbox[\s\S]*?<\/script>
复制代码

如果在 "hitbox" 之前有 ">",比如 "if(x>y)",你的规则就没有效了。我说的是能够通用的规则,并非针对个别网站的个别脚本的规则。

我就不明白,这些原本正则表达式都可以做到的,mt干嘛非要自己搞一套东西出来

你的规则必须要靠类似 "[^>]*?" 这样的 expression 来确保不会错误匹配红色的 tag <script>...</script><script>...hitbox...</script>,但这样做必须要知道 script 里面的代码,只能针对已知的 script,不能通用。

希望开发组会明白。
作者: chenzone    时间: 2008-1-14 22:56

这么高深啊 还是用就是了 问题留给你们解决了
作者: netwjx    时间: 2008-1-14 23:14

唉 楼主说了些现在就使用的方法 本来这个exd规则就是先域名 后内容的
只是 正则 实在不能要求它能十分快
另IE的渲染 也没有FF快  特别是出现特殊代码时IE假死 崩溃的几率比FF高很多了
最快的还是Opera(连接能力比IE和FF强不少 针对内容简单的网页速度会十分快)
作者: elkay    时间: 2008-1-15 00:35     标题: 回复 34# 的帖子

我都说了,只有根据实际情况才能真正想到解决问题的办法,通用性的考虑不可能完美的,你说的情况确实存在,但是不会影响到任何东西,因为根据不同的情况可以修改规则来达到目的,你说的mt能实现这种效果,但是他一样不能做到百分百通用,因为这些关键字必须要有实际的例子才能加上,你不可能一开始就知道那些关键字是你要过滤的,只能是看到一个加一个,这就解决问题了,看到一个就可以根据实际情况来改变规则啊,最后大家依然是在一条线上啊
作者: AY    时间: 2008-1-15 21:56

原帖由 elkay 于 2008-1-15 00:35 发表 http://bbs.ioage.com/cn/images/common/back.gif
我都说了,只有根据实际情况才能真正想到解决问题的办法,通用性的考虑不可能完美的,你说的情况确实存在,但是不会影响到任何东西,因为根据不同的情况可以修改规则来达到目的,你说的mt能实现这种效果,但是他一样不能做到百分百通用,因为这些关键字必须要有实际的例子才能加上,你不可能一开始就知道那些关键字是你要过滤的,只能是看到一个加一个,这就解决问题了,看到一个就可以根据实际情况来改变规则啊,最后大家依然是在一条线上啊

你是明白 bound 的作用了,但还是不明白 bound 的重要性。有 bound 和没有 bound 是有天渊之别的,举个例:

在 mt/proxomitron,透过 bound 一条简单规则便能准确过滤任何网站上所有含 doubleclick, googlesyndication, hitbox 的 script,不用看 script 的代码,也不用对个别网站添加规则。
bound=<script.*?</script>
match=.*(doubleclick|googlesyndication|hitbox).*

在 tw 呢?在 A 站看到 doubleclick 便需要根据情况加一条规则,在 B 站看到 googlesyndication 又需要根据情况加一条规则,在 C 站看到 hitbox 又再需要根据情况加一条规则... 但在 A 站又可以有 5 条不同的 doubleclick script (像 www.nba.com),在 B 站又可以有 doubleclick,googlesyndication,hitbox 3 条情况不同的 script (像 sports.espn.go.com)...你说需要添加多少条规则了?即使你能够在日常浏览的网站都根据情况准确过滤了,但当广告商更改 script 的源码时,即使仍然是 doubleclick, googlesyndication, hitbox,情况还是改变了,你的规则可能已经失效,或者出错。你需要找出失效/出错的规则,再根据新的情况修改...你说需要花多少精神时间?

bound 是 proxomitron 根据长期用户反馈的实际需要添加的。看看透过 bound,下面的 1 条 MT2 规则可以有多强大 - 通用 (任何网站适用),准确 (保证匹配对应的 <script...</script>,不用考虑个别情况,不怕 script 代码更改),方便 (不用查看 script 源码,添加新广告商像添加黑名单般容易)...

bound=<script.*?</script>
match=.*(.doubleclick.net|.googlesyndication.com|.superstats.com|.surfaid.ihost.com|.falkag.net|.hitbox.com|.specificpop.com|.112.2o7.net|.superstats.com|.addfreestats.com|.adserver.com|.advertising.com|.advertwizard.com|.dealtime.com|.fastclick.com|.gostats.com|.nedstat.nl|.nedstatbasic.net|.questionmarket.com|.spylog.com|.valueclick.com|.sitemeter.com|.extreme-dm.com|.survey-poll.com|.thecounter.com|.teocash.com|ShowBurstAd|adrevenue|adstream|adserver|admentor).*

不断提出 TW 这个过滤上的不足,是希望开发组能够明白 bound 的作用及重要性,然后加以能改进。记得开发组当初对这种文本过滤方式不太热衷,是用户(包括我)多番要求才加入吧。但既然加入了,希望能够做到符合一贯使用文本过滤的用户的基本需要。
作者: 414063207    时间: 2008-1-15 22:23

虽然看不懂,但希望高手们弄出个好的过滤
作者: elkay    时间: 2008-1-15 23:18

说了半天,最终还是回到易用性上面,你所说的只不过是相当于二次匹配而已,事实上这个bound是要牺牲一些性能的,从头说到尾只为了一点,就是易用性,我们一直承认mt的易用性比我们好,尤其是你们引以为傲的removeit,但是我个人对此持保留意见,如果一味以易用性为主,一开始就直接提供右键选择就可以了嘛,看看mt的过滤包,好好的正则被拆成一段一段,事实上这些工作都是要程序在后台完成的,实现这些效果的同时也就是把一些原本应该由人做的工作交给了程序,我只知道,程序是死的,但人是活的,一味要求一个死的程序来完成应该由人完成的工作是不现实的。
作者: AY    时间: 2008-1-16 03:05

原帖由 elkay 于 2008-1-15 23:18 发表 http://bbs.ioage.com/cn/images/common/back.gif
说了半天,最终还是回到易用性上面,

一方面是添加一个简单的通用规则,一劳永逸;另一方面是不断在新遇到的网站添加针对性规则,每个规则需要考虑实际情况,并且需要因应网站变化而不断修改。bound 无疑是大大提高了易用性,但 bound 同时亦避免了在添加有效规则前没法过滤的情况,及网站改变后过滤可能失效或出错的问题,换句话说 bound 同时增加了过滤规则的可靠性。

你所说的只不过是相当于二次匹配而已,事实上这个bound是要牺牲一些性能的

1 次较复杂的 match 和 2 次较简单的 match 哪个较影响性能需要根据实际情况测试过才知道。另外不要忘记这里第 2 次 match 只在第 1 次 match 匹配到的 bound 进行,并非 match 整个源文件。
tw 规则:
  1. <script[^>]*?>[^>]*?hitbox[\s\S]*?<\/script>
复制代码
mt 规则:
  1. bound=<script.*?<script>
  2. match=.*hitbox.*
复制代码

作者: zizhulin    时间: 2008-1-16 10:28

高手过招,很好。支持!关键是对TW的发展大有裨益啊!
作者: wapwap    时间: 2008-1-16 11:10

说实话,TW2的黑名单过滤确实没MT2文本过滤有效,就拿163广告过滤来说吧,TW2的黑名单过滤,没过多久就会失效,MT2的文本过滤就不会,这是我在双方都不升级过滤清单的情况下,对比试验
作者: xuyong    时间: 2008-1-16 11:46

支持技术上的探讨,尽管知道原理,不了解具体细节
作者: 285900537    时间: 2008-1-16 15:54

无论是MX的过滤机制,还是TW的过滤机制,都无外乎是正则表达式的匹配问题,不同的开发组对于具体的表现形式的理解的不同,使得相同或相似的技术在表层的表现方式千差万别。

而用户则不关心你的技术是如何实现的,他们注重的是自己能否正常工作、正常上网,是否让那些该死的广告去见上帝了。

而现在最根本的一个问题是,用户如何让该死的广告去见上帝?

TW和MX使用不同的方法达到相似的目的——让广告见上帝的目的。无论是变成天使去见上帝,还是被碎尸万段而升天。

TW需要用户在BBS中搜索相关过滤规则所在的帖子,copy相关的filter code,随后粘贴到黑名单内;
MX需要用户在资源站点中搜索相关过滤规则包,随后下载或直接安装相关过滤包。

不过不久的未来,通过插件,TW可以做到自动下载和升级Filter code。(目前不知道进展,但至少已经有了希望)

相信不久之后,就易用性方面而言,TW会有一个大的进步吧,相信将比MX更为便捷
(但有一个问题,TW的规则如何上传?MX是用户随意上传,TW可能是专人整理吧)
作者: 285900537    时间: 2008-1-16 16:15

但提高匹配效率、准确率,无论是Filter Code的书写者,还是程序开发者,抑或者是使用者,同样都是比较关心的。

我的确要让广告去见上帝,可要是没有百分百杀死广告,或者是出现了误杀情况,那就不好玩了。
用户很郁闷,他不知道哪条规则出了问题,于是全部删除。可无奈TW的黑名单管理过滤简陋,找了半天才找到(这是易用性方面的问题,暂时不提)。
Filter Code书写者也很郁闷,自己的规则需要修订,如果时间久远而不知道哪一条出问题的话,重来是经常的。

因此,规则的准确率是非常关键的,即便让技术倒退,规则变多,也必须保证准确性,这一点毋庸置疑。

第二,是效率问题。
本帖主要是关注第一层匹配,也就是站点URL与#*website*#的匹配。虽然楼上的不少数据证明这是“瞬间”的匹配,但就易用性而言,使用域名包匹配(间LZ顶楼的两张示意图),匹配次数减少(从技术上来说这也是瞬间的),但更容易实现以后的“易用性优化”(如果按照域名进行分类管理的话,那么新的匹配方式,也就是域名包匹配将是一个更好的方式)。

现在我们说说第二层过滤,也就是#filtercode###之间的匹配问题。楼上的AY和E版等人就此话题进行了不少探讨。
我就我所使用的经验共享一下吧。
诸位可以到广告过滤专版的规则讨论子栏中寻找《有关过滤Script代码的思考》(http://bbs.ioage.com/cn/viewthread.php?tid=49024&extra=page%3D1)一文,我使用的比较具体的数据和方法说明了 “脚本代码破坏过滤法” 对于过滤特定网页的效率远远大于常规的过滤手段(匹配首尾关键字的大段过滤)。

我想说的是,目前咱们的过滤机制非常好,对于大多数网站而言。但对于一些比较特殊的网站,譬如广告特多、广告代码经常换的网站(这类网站多数是门户网站)来说,则相对而言需要稍加改进。

需要纠正AY的一句话,世界上没有一劳永逸的事情,有的只是相对较长或较短的变化周期。呵呵。

我觉得效率和准确性是至关重要的,用户看你的“技术是否高明”,是看效果,而不是实现的手段。广告是否都统统去见上帝了?效率是不是比较高?准确性如何?为了达到这些标准,即便使用相对落后的技术或比较多余的手段,用户也会觉得这款软件真不赖的想法。

上海地铁早在十多年前就发明了地铁换乘一卡通,属于全球领先或相对领先的技术,但没有推广。为何,因为接触不灵敏等易用性方面的问题而没有得到实行,直到现在的“交通一卡通”的出现。换句话说,在其他的领域,或在相同的领域,易用性是和技术性放在同等高度或几乎放在同等高度上的。
作者: AY    时间: 2008-1-16 22:03

需要纠正AY的一句话,世界上没有一劳永逸的事情,有的只是相对较长或较短的变化周期。呵呵

这当然是相对而言。

但如果是单单过滤所有比如含 "hitbox" 的 script,包括 inline 或 external 的,mt2 的确可以一劳永逸,就像在黑名单加入 "hitbox" 过滤所有 "hitbox" 的档案 (但不能过滤 inline script),不会错得到那里的。但目前 tw2 就做不到,只能够在含有 "hitbox" 的网站找出 "hitbox" 源码针对性过滤。但 hitbox 只是浪费 cpu 的复杂统计,并非广告,在哪个网站出现无从得知,除非每个页面都检查一下源码。
作者: xingleiwuhen    时间: 2008-1-16 22:07

飘过。。。。。。。。。。。。。。。
作者: netwjx    时间: 2008-1-17 19:43

提供过滤调用接口  与其设计一个自己的过滤语言  不如交给现有的优秀语言




欢迎光临 世界之窗论坛 (http://bbs.theworld.cn/) Powered by Discuz! 7.2