用事实证明cssText性能不一定高
在cnblogs上看到一个名为sandy的人发表了一个博文:用事实证明cssText性能高
对作者本人不做任何评论。但是作者坚持认为cssText比style快,拒绝承认事实,让人感到惋惜。
我觉得有必要让大家听到不同的声音,是真是假,自己做分辨。
我测试的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>用事实证明cssText比较慢</title>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<style type="text/css">
</style>
<script type="text/javascript">
function Timer(){
this.startTime = (new Date()).getTime();
}
Timer.prototype.timeEnd=function(){
alert((new Date()).getTime() - this.startTime)
}
function testLong(isSlow){
var t = new Timer();
var i = 100000;
if(isSlow){
var x = document.documentElement.style;
while(i--){
x.cssText = "border-bottom:1px solid red;padding-top:10px"
}
}else{
var x = document.documentElement.style;
while(i--){
x.borderBottom = "1px solid red"
x.paddingTop="10px"
}
}
t.timeEnd()
}
</script>
</head>
<body>
<div class='left'>
<pre>
<code>
var i = 100000;
var x = document.documentElement.style;
while(i--){
<font color=red>x.borderBottom = "1px solid red"</font>
<font color=red>x.paddingTop="10px"</font>
}
</code>
</pre>
<input type="button" value="快速" onclick="testLong()" />
</div>
<div class='mid'>
<pre>
<code>
var i = 100000;
var x = document.documentElement;
while(i--){
<font color=red>x.cssText= "border-bottom:1px solid red;padding-top:10px"</font>
}
</code>
</pre>
<input type="button" value="慢速" onclick="testLong(true)" />
</div>
</body>
</html>
原作者一开始用标示符深度的问题,掩盖真相,在大家指正标示符深度问题后,亦然坚持自己的意见,认为cssText快,而不面对客观事实。
我的结论也未必正确,欢迎大家指正和讨论。
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
Post Comment
只针对测试代码!
cssText 仅对一个属性赋值.
style.property 是对多个属性赋值.
由于 js 和 css 共享, 不能并行(css3 一些属性例外), 因此,
在 alert 时间差时, css 是不渲染的. 那么肯定结果是 cssText 快.
测试中把 document.documentElement.style;加到循环里面是为了添加时间么? 拿出来会不会对结果更好.