世界之窗论坛's Archiver

285900537 发表于 2007-12-27 01:34

似乎过滤规则对打开网页效率影响甚大

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

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

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

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

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

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

[quote]
├白名单;
├全局规则(通用规则);
├匹配域名索引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-->.
[/quote]

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

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

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

(其中域名索引总数<<规则总数)
[/quote]

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

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

(其中规则总数>>域名索引总数)
[/quote]

[attach]37494[/attach]

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

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

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

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

[[i] 本帖最后由 285900537 于 2007-12-27 15:47 编辑 [/i]]

lgc121 发表于 2007-12-27 08:34

坐个板凳,听楼主讲天书

tommy8o8 发表于 2007-12-27 08:38

楼主不管是皮还是其它都是长篇的,等高人来分析:lol:

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

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

没想到躲到这里来还是有看不懂的帖子~~:lol:

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

[quote]原帖由 [i]elkay[/i] 于 2007-12-27 16:30 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=455688&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
现在就是先匹配域名,再匹配规则啊。

没有明显的察觉到对速度的影响 [/quote]
这几天TW假死情况竟然少了好多,好像是因为改过黑名单的样子:loveliness:

1.现在除了[size=4][color=red]填表功能[/color][/size]与[size=4][color=red]鼠标手势[/color][/size]方面跟GB还有些差距,浏览情况还算稳定

2.白名单自动消失的情况还时有发生,是我RPWT?:sweat:

285900537 发表于 2007-12-28 10:37

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


如何在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++远远落后 . 我们测试一下 域名匹配所需要的时间
以下代码可以在资源收集器运行[code]<script language="JavaScript">
var  counter=1000;
var host ='17173.com';
var time1 = new Date().getTime();
for(var i=0;i<counter;i++){
if( host == '163.com')alert('true');
}
alert(new Date().getTime() - time1)
</script>[/code]另外, 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

[quote]原帖由 [i]needed[/i] 于 2007-12-28 10:56 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=455944&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
[/quote]

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

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

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

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

很高兴能够探讨这个问题。

AY 发表于 2007-12-28 13:56

MT2 的黑名单便是采用 LZ 建议的匹配方法,可以看看 MT2 的 sitelist.xml 格式:[code]<sp>
    <m2filter d="*" version="1.0">
        <blacklist/>
        <whitelist/>
    </m2filter>
    <m2filter d="hezu123.com" version="1.0">
        <blacklist>
            <item mode="0">http://busjs.vodone.cn/</item>
        </blacklist>
        <whitelist/>
    </m2filter>
    <m2filter d="bbs.ioage.com" version="1.0">
        <blacklist>
            <item mode="0">http://bbs.ioage.com/cn/images/avatars/noavatar.gif</item>
            <item mode="0">http://bbs.ioage.com/cn/customavatars/5906.png</item>
            <item mode="0">http://bbs.ioage.com/cn/customavatars/10253.jpg</item>
        </blacklist>        
        <whitelist/>
    </m2filter>
</sp>[/code]页面连接的档案地址比域名要长,像 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

[quote]原帖由 [i]needed[/i] 于 2007-12-28 10:56 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=455944&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
mt的过滤不见得比tw要先进... [/quote]
MT2 的过滤是比 TW2 更灵活的,能写出更准确的通用过滤规则 (像我之前说过的例子 TW2 目前便不能过滤)。可以看看 MT2 支持的一些属性:

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

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

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

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

[[i] 本帖最后由 AY 于 2007-12-28 14:56 编辑 [/i]]

yjhdeys 发表于 2007-12-28 14:59

虽然不懂这个 但是楼主认真和细心应该赞一个:lol:

needed 发表于 2007-12-28 15:05

mt的便利不等于  高效......

o080o 发表于 2007-12-28 15:46

牛人!!!!!
:loveliness: :loveliness: :loveliness:

AY 发表于 2007-12-28 15:53

[quote]原帖由 [i]needed[/i] 于 2007-12-28 14:02 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=456016&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
假如,假如 mt 打开网页的速度比tw快.
   我严重支持ls的 意见. 可惜..可惜....[/quote]
我测试过无数次,每次清除缓存然后同时打开 20 个不同网站的主页,在关闭过滤及插件的情况下(因为 IE 没有相关功能),IE, MyIE, MT1, MT2(beta2 之后版本), TW1, TW2, GB, Avant 所需要的时间相差一般不超过 5-10 秒,即平均每个页面相差不到 0.25-0.5 秒,而反覆测试亦没有固定那个最快的 (MT2 beta 2 及之前版本倒是特别慢)。使用同样的 IE 内核,宣染速度不可能有大分别。用户感觉到的速度分别应该主要是不一致的内容过滤所做成,一个 flash 便往往几百 k,过滤和没过滤所需的页面下载时间会相差很远,相信这个也是一些用户感觉苦花菜版较快的原因。

[quote]  不过还是那句话, tw的黑名单的确需要改进.   
     但个人觉得mt的黑名单并不比 tw的高效/ 注意.我没有说黑名单管理 [/quote]
可以再看看 12 楼的解说。

elkay 发表于 2007-12-28 16:03

回复 17# 的帖子

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

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

[[i] 本帖最后由 elkay 于 2007-12-28 16:04 编辑 [/i]]

AY 发表于 2007-12-28 16:03

[quote]原帖由 [i]needed[/i] 于 2007-12-28 15:05 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=456056&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
mt的便利不等于  高效...... [/quote]
我是说 MT2 的黑名单高效,原理在 12 楼有解说。

另外我是说 MT2 的文本(正则)过滤比 TW2 的更灵活,并非说比 TW2 的更高效。文本(正则)过滤的匹配比黑名单复杂得多,加上 MT 可以使用 bound,很难比较效率。

AY 发表于 2007-12-28 16:11

[quote]原帖由 [i]elkay[/i] 于 2007-12-28 16:03 发表 [url=http://bbs.ioage.com/cn/redirect.php?goto=findpost&pid=456109&ptid=48440][img]http://bbs.ioage.com/cn/images/common/back.gif[/img][/url]
这些本来就是正则表达式的特性,正则表达式本身就可以做到啊

只是用正则表达式写出来比较复杂,mt的这个看上去比较简洁而已[/quote]
用正则表达式能匹配所有 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 以[color=Red]外[/color]的 <object...</object> 么?作用是禁止 activex object 但豁免 flash/wmp/qt/rp 等。

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

[[i] 本帖最后由 AY 于 2007-12-28 16:32 编辑 [/i]]

页: [1] 2 3

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.