【jquery仿dataList——性能优化】模板预编译思想提高性能10倍以上!!!

简介:
那撒,IE和google性能不减反增,求高手解释.......



 



前言

呵呵,当然,什么预编译什么性能提高5倍以上基本上市坑爹的,这里就是为了吸引阅读量,哈哈。

上当的大哥主动顶下哇???

正题

之前针对这个专题也写了很多文章了,到今天一个基本的框架已经成型,最近做了一次优化——关于模板的。

居然性能差距达10倍以上还真不是开玩笑呢!!!

我先简要说明下这个插件的流程

我们提供二维数据源+数据模板——》每行数据和数据模板进行数据组织生成最终html标签——》加入文档



 

优化处理

之前处理起来便是进行正则表达式替换,反正功能达到要求了也就没有管那么多,今天突然想到一招预编译方法(其实有参照啦)

改了后明显感觉到数据变化,有图有真相,请看!!!









看见了差距了吧!!!

最后附上代码:

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!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></title>
    <script src="http://www.cnblogs.com/scripts/jquery-1.7.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var data = [];
            var i;
            for (i = 0; i < 1000; i++) {
                var temp = {};
                temp.name = "name_" + i.toString();
                temp.age = "age_" + i.toString();
                temp.home = "home_" + i.toString();
                temp.test = "test_" + i.toString();
                data.push(temp);
            }
            var template = "<div>{name}</div><div>{age}</div><div>{home}</div><div>{test}</div><hr/>"
            var wl1 = $("#wl1");
            var wl2 = $("#wl2");
            var wl3 = $("#wl3");
            var wl4 = $("#wl4");
 
            //原始做法
            function old() {
                var now = new Date();
                var beginTime = now.getTime();
 
                var html = "";
                $.each(data, function (index, v) {
                    var tempHtm = template;
                    $.each(v, function (i, item) {
                        var regStr = "/\\{" + i + "\\}/g";
                        var reg = eval(regStr);
                        tempHtm = tempHtm.replace(reg, item);
                    });
                    html += tempHtm;
                });
                wl1.append(html);
                var endT = new Date();
                var endTime = endT.getTime();
                var spTime = (endTime - beginTime);
                wl3.append(""+i.toString()+"行数据,老方法代码大概执行:" + spTime + "毫秒");
            }
            //现在做法
            function update() {
                var now = new Date();
                var beginTime = now.getTime();
 
                var templateObj = [];
                var reg = /\{[A-Za-z]*\}/;
                var para = reg.exec(template);
                var tempHtml = template;
                while (para && para.length > 0) {
                    var len = para.index;
                    var temp = {};
                    temp.html = tempHtml.substr(0, len);
                    temp.field = para[0].substr(1, para[0].length - 2); ;
                    templateObj.push(temp);
                    tempHtml = tempHtml.substr(len + para[0].length);
                    para = reg.exec(tempHtml);
                }
                var end = {};
                end.html = tempHtml;
                templateObj.push(end);
 
                var html = "";
                $.each(data, function (index, dataItem) {
                    var tempHtm = "";
                    $.each(templateObj, function (i, item) {
                        if (item.field) {
                            tempHtm = tempHtm + item.html + dataItem[item.field];
                        } else {
                            tempHtm = tempHtm + item.html;
                        }
                    });
                    html += tempHtm;
                });
                wl2.append(html);
 
 
                var endT = new Date();
                var endTime = endT.getTime();
                var spTime = (endTime - beginTime);
                wl4.append(""+i.toString()+"行数据,新方法代码大概执行:" + spTime + "毫秒");
            }
            old();
            update();
        });
     
    </script>
</head>
<body>
    <div id="wl3">
    </div>
    <div id="wl4">
    </div>
    <div id="wl1">
    </div>
    <div id="wl2">
    </div>
</body>
</html>
 

 

 

 

 

 

 

 

本文转自叶小钗博客园博客,原文链接:http://www.cnblogs.com/yexiaochai/archive/2012/03/22/2410913.html,如需转载请自行联系原作者

 

 

 

 





相关文章
|
运维 JavaScript CDN
10个国内外jQuery的CDN性能大比拼
10个国内外jQuery的CDN性能大比拼
10个国内外jQuery的CDN性能大比拼
|
JavaScript
jQuery模板文件
jQuery模板文件
55 0
|
JSON 前端开发 JavaScript
Javascript:jQuery的ajax请求get请求模板
Javascript:jQuery的ajax请求get请求模板
287 0