返回列表 发帖

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

似乎过滤规则对打开网页效率影响甚大。就如我的博客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

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




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

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

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

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

[ 本帖最后由 285900537 于 2007-12-27 15:47 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?加入 我们
liuyis[AT]live.com

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

TOP

飘过。。。。。。。。。。。。。。。

TOP

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

这当然是相对而言。

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

TOP

但提高匹配效率、准确率,无论是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的一句话,世界上没有一劳永逸的事情,有的只是相对较长或较短的变化周期。呵呵。

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

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

TOP

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

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

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

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

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

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

相信不久之后,就易用性方面而言,TW会有一个大的进步吧,相信将比MX更为便捷
(但有一个问题,TW的规则如何上传?MX是用户随意上传,TW可能是专人整理吧)
liuyis[AT]live.com

TOP

支持技术上的探讨,尽管知道原理,不了解具体细节

TOP

说实话,TW2的黑名单过滤确实没MT2文本过滤有效,就拿163广告过滤来说吧,TW2的黑名单过滤,没过多久就会失效,MT2的文本过滤就不会,这是我在双方都不升级过滤清单的情况下,对比试验

TOP

高手过招,很好。支持!关键是对TW的发展大有裨益啊!

TOP

原帖由 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.*
复制代码

TOP

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

TOP

虽然看不懂,但希望高手们弄出个好的过滤

TOP

返回列表