返回列表 发帖
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 这个方式实在十分值得借鉴。

TOP

原帖由 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 编辑 ]

TOP

原帖由 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 楼的解说。

TOP

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

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

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

TOP

原帖由 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 编辑 ]

TOP

回复 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 编辑 ]

TOP

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

能提供完整规则么?

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

问题是要删除 inline 的统计 script。

TOP

原帖由 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 楼

TOP

原帖由 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 编辑 ]

TOP

原帖由 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,不能通用。

希望开发组会明白。

TOP

原帖由 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 的作用及重要性,然后加以能改进。记得开发组当初对这种文本过滤方式不太热衷,是用户(包括我)多番要求才加入吧。但既然加入了,希望能够做到符合一贯使用文本过滤的用户的基本需要。

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

返回列表