- 主题:我遇到了一个神奇的 IE Bug...
我写的一个复杂的页面渲染引擎,在构造出大量 div 之后,只要 click 鼠标之后,系统就会停顿很久(我用的 setTimeout),间隔会超过 500ms。但是我用 IE dev tool 的 profiler 分析了几十秒,我得脚本总耗时不超过 128ms(唯一入口是这个 update...)
完全不可理喻啊,难道是由于 click 事件在这些 div 之间 bubbling ?怎么都像 IE8 的 bug 啊。
我完全没有捕捉任何鼠标事件 -_-b
_SM_cn_monadic_phantom_sample_Test_update 114 128.00 4.00
_SM_cn_monadic_phantom_render_Visualization_evolve 114 124.00 116.00
_SM_cn_monadic_phantom_master_AxisScenario_update 114 124.00 .00
> COST = 883,0 : /COST = 60,0 :
> COST = 891,0 : /COST = 62,0 :
> COST = 4202,0 : /COST = 63,0 :
> COST = 869,0 : /COST = 62,0 :
> COST = 815,0 : /COST = 63,0 :
> COST = 705,0 : /COST = 62,0 :
> COST = 1082,0 : /COST = 63,0 :
> COST = 491,0 : /COST = 63,0 :
--
FROM 125.34.222.*
相信微软 相信IE8
【 在 nullgate (空门·恨只恨我们家鬼害家神) 的大作中提到: 】
: 标 题: 我遇到了一个神奇的 IE Bug...
: 发信站: 水木社区 (Sun Jul 12 23:09:05 2009), 站内
:
: 我写的一个复杂的页面渲染引擎,在构造出大量 div 之后,只要 click 鼠标之后,系统就会停顿很久(我用的 setTimeout),间隔会超过 500ms。但是我用 IE dev tool 的 profiler 分析了几十秒,我得脚本总耗时不超过 128ms(唯一入口是这个 update...)
:
: 完全不可理喻啊,难道是由于 click 事件在这些 div 之间 bubbling ?怎么都像 IE8 的 bug 啊。
:
: 我完全没有捕捉任何鼠标事件 -_-b
:
: _SM_cn_monadic_phantom_sample_Test_update 114 128.00 4.00
: _SM_cn_monadic_phantom_render_Visualization_evolve 114 124.00 116.00
: _SM_cn_monadic_phantom_master_AxisScenario_update 114 124.00 .00
:
:
: > COST = 883,0 : /COST = 60,0 :
: > COST = 891,0 : /COST = 62,0 :
: > COST = 4202,0 : /COST = 63,0 :
: > COST = 869,0 : /COST = 62,0 :
: > COST = 815,0 : /COST = 63,0 :
: > COST = 705,0 : /COST = 62,0 :
: > COST = 1082,0 : /COST = 63,0 :
: > COST = 491,0 : /COST = 63,0 :
:
: --
: 您把作家写成一个脚踏大地、头顶青天的伟人……事实上,作家总要比社会
: 上的普通人小得多,弱得多。因此,他对人世间生活的艰辛比其他人感受得更深
: 切、更强烈。对他本人来说,他的歌唱只是一种呼喊。艺术对于艺术家来说是一
: 种痛苦,通过这个痛苦,他使自己得到解放,去忍受新的痛苦。他不是巨人,而
: 只是生活这个牢笼里一只或多或少色彩斑斓的鸟。
: 卡夫卡
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 125.34.222.*]
--
FROM 60.177.183.*
相信他们有bug还是相信他们没有bug?
【 在 wbz (66死了,88没落了,怀念) 的大作中提到: 】
: 相信微软 相信IE8
--
FROM 222.130.191.234
没看太明白,停顿跟用setTimeout是怎么个关系,还有这个update是怎么做的,拼html还是dom操作,click鼠标是在任意位置,还是在渲染出来的div上?
【 在 nullgate (空门·恨只恨我们家鬼害家神) 的大作中提到: 】
: 我写的一个复杂的页面渲染引擎,在构造出大量 div 之后,只要 click 鼠标之后,系统就会停顿很久(我用的 setTimeout),间隔会超过 500ms。但是我用 IE dev tool 的 profiler 分析了几十秒,我得脚本总耗时不超过 128ms(唯一入口是这个 update...)
: 完全不可理喻啊,难道是由于 click 事件在这些 div 之间 bubbling ?怎么都像 IE8 的 bug 啊。
: 我完全没有捕捉任何鼠标事件 -_-b
: _SM_cn_monadic_phantom_sample_Test_update 114 128.00 4.00
: _SM_cn_monadic_phantom_render_Visualization_evolve 114 124.00 116.00
: _SM_cn_monadic_phantom_master_AxisScenario_update 114 124.00 .00
--
FROM 114.243.191.*
典型的代码
function foo()
{
update();
setTimeout("foo()", 50);
}
update() 里面有很复杂的逻辑,但是在我这个例子里面,其实什么也没干(没有改变任何 dom)
click 是在那堆 div 上面(很复杂的 dom 结构,一大堆 div + img absolute 布局)
另外,点的即便不在那堆 div 上面也会烂掉。 orz
如果连续点击甚至可以出 3000ms 这种延迟
【 在 sayinger (言者) 的大作中提到: 】
: 没看太明白,停顿跟用setTimeout是怎么个关系,还有这个update是怎么做的,拼html还是dom操作,click鼠标是在任意位置,还是在渲染出来的div上?
--
修改:nullgate FROM 125.34.222.*
FROM 125.34.222.*
我发现连续点击那个区域可以导致 CPU 负荷达到 100% (因为是双核,所以只是其中一个,我实在是膜拜 IE8 了)。莫非 IE8 处理 click 事件需要遍历整个 dom tree?就连我用 javascript 写的鼠标事件处理器效率都没有这么低啊。
我放弃了,我去睡觉了。
【 在 sayinger (言者) 的大作中提到: 】
: 没看太明白,停顿跟用setTimeout是怎么个关系,还有这个update是怎么做的,拼html还是dom操作,click鼠标是在任意位置,还是在渲染出来的div上?
--
FROM 125.34.222.*
【 在 nullgate (空门·恨只恨我们家鬼害家神) 的大作中提到: 】
: 我发现连续点击那个区域可以导致 CPU 负荷达到 100% (因为是双核,所以只是其中一个,我实在是膜拜 IE8 了)。莫非 IE8 处理 click 事件需要遍历整个 dom tree?就连我用 javascript 写的鼠标事件处理器效率都没有这么低啊。
bubbling不是从叶子到根走一遍吗?
: 我放弃了,我去睡觉了。
--
修改:roy FROM 211.151.91.*
FROM 211.151.91.*
【 在 nullgate (空门·恨只恨我们家鬼害家神) 的大作中提到: 】
: 典型的代码
: function foo()
: {
: update();
: setTimeout("foo()", 50);
如果没有这句,click就不会引发延迟么?话说回来50ms的间隔对于update()是不是短了点,如果里面有大量计算的话,调大点试试呢。至于click事件,应该是会从叶子走到根,再从根走回叶子的,dom太复杂开销会大些,不过也不应该这么严重。
: }
: update() 里面有很复杂的逻辑,但是在我这个例子里面,其实什么也没干(没有改变任何 dom)
: click 是在那堆 div 上面(很复杂的 dom 结构,一大堆 div + img absolute 布局)
: 另外,点的即便不在那堆 div 上面也会烂掉。 orz
: 如果连续点击甚至可以出 3000ms 这种延迟
--
FROM 202.106.68.*
50ms 才 20fps 呢。没有这个事件我咋测量这个延迟呢?我也不理解啊,这个 dom 是很复杂,一个 div 画布上有上千个 absolute 定位的 div/img。等我有空了整理一个版本出来演示一下吧
【 在 sayinger (言者) 的大作中提到: 】
: 如果没有这句,click就不会引发延迟么?话说回来50ms的间隔对于update()是不是短了点,如果里面有大量计算的话,调大点试试呢。至于click事件,应该是会从叶子走到根,再从根走回叶子的,dom太复杂开销会大些,不过也不应该这么严重。
--
FROM 131.107.0.*
据说IE8有个gif相关的bug?
【 在 nullgate (空门·恨只恨我们家鬼害家神) 的大作中提到: 】
: 我写的一个复杂的页面渲染引擎,在构造出大量 div 之后,只要 click 鼠标之后,系统就会停顿很久(我用的 setTimeout),间隔会超过 500ms。但是我用 IE dev tool 的 profiler 分析了几十秒,我得脚本总耗时不超过 128ms(唯一入口是这个 update...)
: 完全不可理喻啊,难道是由于 click 事件在这些 div 之间 bubbling ?怎么都像 IE8 的 bug 啊。
: 我完全没有捕捉任何鼠标事件 -_-b
: ...................
--
FROM 207.46.92.*