css样式表表达式Expression优化
IE浏览器中CSSExpression特性的最大的问题:会反复执行,每秒钟可能执行了成百上千次,有严重的性能问题。
如何对CSSExpression进行优化呢?
至少:如果我们将CSSExpression在匹配的元素中仅执行一次,性能将会提升很大。
old9在《CSSExpressionReloaded》一文中提供了一个解决方案:
在CSSExpression语句体里,将触发该Expression的CSS属性重置。
例如:
div{zoom:expression(function(el){el.style.zoom="1";alert(el.tagName);}(this));}补充几点:
CSSExpression执行在任意一个匹配的元素上。
在CSSexpression内,“this”关键字指向当前匹配的HTML元素。
CSS属性选用一些不常用的属性来触发,触发完重置回默认值。
最近在Ajaxian的文章《CreatingaquerySelectorforIEthatrunsat“nativespeed”》中看到作者DionAlmaer也提供了一个类似的解决方式:
div{-singlex:expression(this.singlex?0:(function(t){alert(t.tagName);t.singlex=0;})(this));}但此代码并没有完全解决CSSExpression最大的性能问题。因为每次触发还是要去执行Expression脚本,比如你滚动鼠标的中间滚轮。
最后强调,仅是对CSSExpression做了优化,但并未说CSSExpression就不存在其他方面的问题。