在线情况
楼主
  • 头像
  • 级别
  • 徽章
  • 职务总版主
  • 声望+14
  • 积分1530
  • 经验278129
  • 文章2378
  • 注册2003-06-14
慎用expression属性来写CSS
当一个页面由expression来定义的CSS的元素数量较多, 则会严重降低当前页面的性能. 比如页面的翻滚, 并影响其它正常JS脚本的执行性能,和事件的执行性能.


expression样式定义的JS代码, 包括每一次鼠标移动(比如文字区与空白区移动),点击, 都有可能会重新触发执行.

当一个页面依赖expression CSS的元素很少时,影响也会相应的尽可能降到最低水平.


下面为转文:


  在很久很久以前,微软ie开发团队为ie增加了一个强大的属性expression,它够让我们在CSS里编写javascript代码。

  expression的出现是我们的福音,因为ie前期的开发并不重视W3C标准,早期版本不支持许多特性,比如CSS2里面的min-width、:hover伪类等,利用expression我们可以披着javascript的马甲写着“表现代码”。

  在经过许多年以后,expression被曝露存在有效率问题,通过expression运行的代码会被不断执行,从而导致CPU急剧上升,浏览器假死,系统崩溃,自动重启,主板爆电容。。。 -_-!


值得高兴的是,这个问题很快让老九童鞋解决,他通过重置绑定expression的样式来清除事件。


[code]<style type="text/css">  
#div1{  
    float:left;max-width:200px;height:1000px;background:green;  
    top:expression(test());  
}  
</style>  
<script type="text/javascript">  
    var i = 1;  
    function test(){  
       document.getElementById('div1').style.background='red';  
       document.getElementById('div1').style.marginTop='100px';  
       document.getElementById('div1').style.top='auto';  //此行为重置绑定TOP清除expression的样式
       document.getElementById('div1').innerHTML = "危险,看着状态栏,试一下单击,双击,移动鼠标,滚动中轴!test函数被执行了"+(i++)+"次";  
 
    }  
</script>  
<div id="div1">危险,看着状态栏,试一下单击,双击,移动鼠标,滚动中轴!</div>  [/code]

不清除样式演示: http://tommyfan.com/blog/demos/expression/test_1.html
带清除样式演示: http://tommyfan.com/blog/demos/expression/test_2.html
asp技术学习感谢您的参与
Page created in 0.0137 seconds with 4 queries.