| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • 限制图片上传长宽的java…

  • 网页对联广告代码效果大全

  • 一行代码生成Google SiteMap

  • 几行代码轻松搞定网页的简繁…

  • 网页常用小技巧—javasc…

  • HTML语言剖析(七)表格标记

  • 网站首页head区代码规范

  • 页边距的设定技巧(HTML)

  • 在线播放器代码大全

  • 制作三维表格效果

  • Q
    您现在的位置: 我是IT人 >> 网站制作 >> JSP >> 文章正文
    提高代码性能技巧谈—以创建千行表格为例           
    提高代码性能技巧谈—以创建千行表格为例
    作者:网络 文章来源:转载 点击数: 更新时间:2006-1-19
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
     

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

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

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

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

    <html>
    <body>
    <script>
    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<max; 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);
    }
    </script>
    </body>
    </html>


    在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);
    View the second sample.

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

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

    <html>
    <body>
    <script>
    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<max; 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);
    }
    </script>
    </body>
    </html>
    View the third sample.

    [1] [2] [3] 下一页  

    文章录入:54iter    责任编辑:54iter 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |