« 清华大学免费地址列表更新 (20070418) | Main | freeip.thu.pac 20070423 Data time: THU 2007.04.18 06:10 »
April 23, 2007
Quaful 发布 windtear 版自动代理脚本导致浏览器死锁补丁
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://windtear.net/archives/2007/04/23/001215.html http://windtear.net/archives/2007/04/23/001215.html Quaful 发布 windtear 版自动代理脚本导致浏览器死锁补丁 相关链接: freeip.thu.pac 20070423 Data time: THU 2007.04.18 06:10 freeip.cer.pac 20070423 Data time: CER 2007.04.15 http://www.newsmth.org/bbscon.php?bid=99&id=1071727 发信人: Quaful (夸父|毕业倒计时), 信区: NewSoftware 标 题: [原创] windtear 版自动代理脚本导致浏览器死锁(含补丁) 发信站: 水木社区 (Mon Apr 23 11:14:19 2007), 站内 前段时间我发过一篇文章,描述了自动代理脚本导致Firefox或者IE死锁的问题。当时给出 了临时解决方案,即死锁时重起网卡。不过显然这并不是很方便的方案。 { http://www.newsmth.org/bbscon.php?bid=99&id=1065616 发信人: Quaful (夸父|毕业毕业), 信区: NewSoftware 标 题: [原创]关于浏览器假死的一种原因及临时解决办法 发信站: 水木社区 (Fri Apr 13 10:06:34 2007), 站内 } 今天我终于克服惰性,认真研究了一下死锁的位置,看看能不能用什么补丁把它绕过去。结 果跟了5分钟就发现了问题出在自动代理脚本中调用的函数:isInNet() 上(可见我忍受了 这么久死锁-重起网卡-再死锁-再重起网卡的痛苦是多么的不值得,惰性真是人类的大敌啊 )。isInNet() 这个函数倒不会因为 dns 解析失败就死掉,但是它明显会变得很慢。 Firefox 和 IE 都有这个问题,并且实际上有人已经发现了: Firefox: http://www.clasohm.com/blog/one-entry?entry_id=14866 “Even one call to isInNet() can be fatal for Firefox. If the DNS server for the host name is not reachable, the call will only time out after a couple of seconds. And during this time, Firefox will be completely unresponsive. No display updates, no response to keyboard or mouse input.” IE: http://support.microsoft.com/kb/315810/en “Browser Is Slow to Respond When You Use an Automatic Configuration Script” ...... 看到了吧,上面是一连串的 isInNet() 的调用,如果域名不能解析的话,每个调用会有5到 40秒的延迟,就算5秒吧,这里有482次调用,那么延迟就是 5*482=2410秒=40分钟。所以浏 览器基本上就跟死掉一样了。 windtear 当年写的这个自动代理脚本造福了教育网的大众,这个脚本的普及度也相当高, 呵呵。不过因为这点考虑不周,也让我郁闷了好久。不过现在原因找到了,解决起来也简单 ,在 windtear 版的脚本基础上打一个补丁就行了: 加一句:if ( isResolvable(host) ) { ... } 判断一下域名能否解析,不能解析就不要再 调这几百次的 isInNet() 了。 |
Posted by windtear at April 23, 2007 11:15 AM