您的位置:首页 > Web前端 > JavaScript

案例-js-模块化创建dom与字符串创建dom的耗时比较(性能优化)

2017-06-21 14:42 405 查看
模块化创建dom与字符串创建dom的耗时比较

模板创建:主要是正则表达式匹配,替换数据

字符串创建:字符串,替换数据

一共两个文件,

index.html ,list.txt

看截图:



index.html 源码

<!doctype html>
<html lang="en">
<head>
<!--声明当前页面的编码格式 国际编码 UTF-8 中文编码 GBK-->
<meta charset="UTF-8">
<!--声明当前页面的三要素-->
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>模块与模板创建的耗时比较</title>
<style type="text/css">
*{margin: 0;padding: 0;}
body,html{font-size:12px;}
.app{width: 1088px;margin: 50px auto;font-family: "微软雅黑";}
.product{width: 100px;float: left;border: 1px solid #ccc;margin: 10px;}
.product:hover{border: 1px solid #F55B24;}
.content{padding: 10px}
.content .price{width: 100%;line-height: 40px;height: 40px;}
.price .price-text{color: #F55B24;float: left;}
.price .price-text span{color: #fff;font-size: 12px;background: #F55B24;font-weight: 400;vertical-align: top;}
.price .sum{color: #999;font-size: 12px;float: right;}
.title{color: #666;font-size: 12px;}
.store{width: 100%;color: #999;font-size: 12px;line-height: 30px;}
.store .store-title{float: left;}
.store .adress{float: right;}
input{position:absolute;top:10px;left:10px;}

.app{width:49%;min-height:300px;border:1px solid #eee;float:left;}
#app1{float:right;}
</style>
</head>
<body>
<div id="app" class="app"></div>
<div id="app1" class="app"></div>
<input type="button" value="模板创建计时" onclick="modulBtn()" />
<input type="button" value="字符串创建计时" onclick="strBtn()" style="left:100px;"/>
<input type="button" value="打印耗时" onclick="showLog()" style="left:200px;"/>
<script type="text/template" id="app_tpl">
<div class="product">
<div class="content">
<p class="price">
<span class="price-text">¥{#price#} <span>包邮</span></span>
<span class="sum">{#sales#}人付款</span>
</p>
<p class="title">{#title#}</p>
<p class="store">
<span class="store-title">{#store#}</span>
<span class="adress">{#adress#}</span>
</p>
</div>
</div>
</script>
<script type="text/javascript">
var strArr = [];
var modulArr = [];
//封装工具函数
var Util = {
//获取模版
tpl: function(id){
return document.getElementById(id).innerHTML;
},
//获取数据
ajax: function(url,callback){
//创建xmlhttp对象
// var xmlhttp = new XMLHttpRequest();;
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E){
xmlhttp = false;
}
}

if(!xmlhttp && typeof XMLHttpRequest!= 'undefined')
{
xmlhttp = new XMLHttpRequest();
}

//订阅事件
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState === 4)
{
if (xmlhttp.status === 200)
{
var data = JSON.parse(xmlhttp.responseText);
callback && callback(data);
}
}
}
//open方法
xmlhttp.open("get",url,true);
//send方法
xmlhttp.send(null)
}
}
// 模板创建

var tpl = Util.tpl("app_tpl");
function modulBtn(){
var html = '';
document.getElementById('app').innerHTML = '';
var startTime=new Date().getTime();
Util.ajax("data/list.txt",function(data){
var res = data.rows.list;
var len = res.length;
for(var i=0;i<len;i++){
html += matchFn(tpl,res[i]);
};

document.getElementById('app').innerHTML = html;
var endTime=new Date().getTime();
var myTime=endTime-startTime;
modulArr.push(myTime);
console.log('模板创建-完毕,总个数:'+len+',总耗时:'+myTime);
console.log(modulArr);

startTime = endTime = myTime = res = len = html = null;
});

};
function matchFn(tpl,res){
return tpl.replace(/\{#(\w+)#\}/g,function(match,$1){
return res[$1] === undefined ? '' : res[$1];
});
};

// 字符串创建
function strBtn(){
var html = '';
document.getElementById('app1').innerHTML = '';
var startTime=new Date().getTime();
Util.ajax("data/list.txt",function(data){
var res = data.rows.list;
var len = res.length;
for(var i=0;i<len;i++){
html += fromString(res[i]);
};
document.getElementById('app1').innerHTML = html;

var endTime=new Date().getTime();
var myTime=endTime-startTime;
strArr.push(myTime);
console.info('字符串创建-完毕,总个数:'+len+',总耗时:'+myTime);
console.log(strArr);
startTime = endTime = myTime = res = len = html = null;
});

}

function fromString(res){
var str ='<div class="product">'+
'<div class="content">'+
'<p class="price">'+
'<span class="price-text">¥'+res.price+' <span>包邮</span></span>'+
'<span class="sum">'+res.sales+'人付款</span>'+
'</p>'+
'<p class="title">'+res.title+'</p>'+
'<p class="store">'+
'<span class="store-title">'+res.store+'</span>'+
'<span class="adress">'+res.adress+'</span>'+
'</p>'+
'</div>'+
'</div>'

return str;
}
function showLog(){
console.clear();
console.log('模板创建耗时:');
console.log(modulArr);
console.log('字符串创建耗时:');
console.log(strArr);
}
</script>
</body>
</html>


list.txt [b]源码[/b]

{"rows": {
"list": [
{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
},{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
},{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
},{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
},{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
},{
"price":"798.00",
"sales":"1650",
"title": "帛薇儿2017春装",
"store": "pokwai服饰旗舰店",
"adress": "广东 深圳"
}
]
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: