提高html页面的性能,提高HTML页面性能的技巧

微软的开发周期中很重要的一块是调整产品的性能。性能调整也是开发者应当留心的关键部分之一。经过多年发展,业界对于如何优化Win32程序性能已经有非常多的了解。

现在开发者遇到的问题之一是不太清楚是什么导致DTHML和HTML页面运行快或者慢。当然,有一些很简单的方法——比如不要使用2MB大的图片。我们曾经使用过另外一些有趣的技巧提高了DHTML页面的性能,希望它们能帮助你改善自己的页面性能。

这里我使用了一个建立Table的程序例子。其中用document.createElement()和element.insertBefore()方法创建了1000行(Row)的表(Table)。每行有一列(Cell)。Cell中包含的内容称为"Text"。这段代码能有多糟呢?这么小的程序又能有多大调整余地呢?请看介绍。

一开始我写了一段自认为会很快的程序,我尽量避免一些低级问题----像没有显式定义变量、或者在一个页面中同时使用VBScript和Javascript。程序如下:

var tbl, tbody, tr, td, text, i, max;

max = 1000;

tbl = document.createElement("TABLE");

tbl.border = "1";

tbody = document.createElement("TBODY");

tbl.insertBefore(tbody, null);

document.body.insertBefore(tbl, null);

for (i=0; i

tr = document.createElement("TR");

td = document.createElement("TD");

text = document.createTextNode("Text");

td.insertBefore(text, null);

tr.insertBefore(td, null);

tbody.insertBefore(tr, null);

}

我在PII233/64MB内存/NT4.0/IE5.0的机器上运行这段程序。页面从本机上装载。从开始装载页面到页面完全安静下来(所有的事件均已经运行,屏幕显示完成)的时间为2328毫秒,这也是本次测试的基线(我称之为Test1)。

这个页面中,一个很耗时的操作是频繁引用全局对象,如“document”、“body”、“window”等。引用所有这些类似的全局变量远比引用一个本地变量代价高昂。

因此我作了第一次改进尝试:缓存(Cache)document.body到本地变量“theBody”中:

增加了如下代码:

var theBody = document.body;

然后修改这一行:

document.body.insertBefore(tbl, null);

将之改为:

theBody.insertBefore(tbl, null);

这次修改并没有太大影响到整体时间,它只缩短了3 ms。但它已经表明,如果在循环中也有document.body对象而对其引用做出修改,带来的好处将是可观的。

随后,我缓存了document对象----在我们这个测试中,document对象共被引用了3002次。修改后代码如下:

var tbl, tbody, tr, td, text, i, max;

max = 1000;

var theDoc = document;

var theBody = theDoc.body;

tbl = theDoc.createElement("TABLE");

tbl.border = "1";

tbody = theDoc.createElement("TBODY");

tbl.insertBefore(tbody, null);

theBody.insertBefore(tbl, null);

for (i=0; i

tr = theDoc.createElement("TR");

td = theDoc.createElement("TD");

text = theDoc.createTextNode("Text");

td.insertBefore(text, null);

tr.insertBefore(td, null);

tbody.insertBefore(tr, null);

}

此次运行时间只有2100ms,节约了大约10%的时间。使用本地变量而不是直接引用document对象平均每次节约了0.4毫秒。

一个常用的优化性能的方法是:当脚本不需要立即运行时,在

下面是使用了defer属性修改后的代码版本:

function init() {

var tbl, tbody, tr, td, text, i, max;

max = 1000;

var theDoc = document;

var theBody = theDoc.body;

tbl = theDoc.createElement("TABLE");

tbl.border = "1";

tbody = theDoc.createElement("TBODY");

tbl.insertBefore(tbody, null);

theBody.insertBefore(tbl, null);

for (i=0; i

tr = theDoc.createElement("TR");

td = theDoc.createElement("TD");

text = theDoc.createTextNode("Text");

td.insertBefore(text, null);

tr.insertBefore(td, null);

tbody.insertBefore(tr, null);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值