`
muyu
  • 浏览: 218509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

提高JavaScript性能的三个小知识

阅读更多

---------------

木鱼说

---------------

我只把有关例子的句子或改编了下:)

 

---------------

正文

---------------

Tip 1: Cache your objects!

for (i=0;i<document.images.length;i++)
document.images[i].src="blank.gif"

 对象“document.images”被多次访问。由于浏览器必须在每次循环寻找“document.images”两次,实现的代码性能不高。如果页面上有10个图片,Images对象将被调用20次。过度访问JavaScript对象会影响浏览器性能,更不要提计算机内存了。

 

"cache your object"意味着,把需要重复访问的对象存储在一个用户定义的变量,供以后使用。性能提升会非常明显。下面是修改后的版本:

 

var theimages=document.images
for (i=0;i<theimages.length;i++)
theimages[i].src="blank.gif"

 

document.images[]引用的次数不仅仅减少一半,每次引用,浏览器就不必首先遍历document.images,而是径直访问容器数组。

 

在调用高度嵌套的DHTML对象时,记得使用这个技巧呀!比如document.all.myobject, 或  document.layers.firstlayer等。

 

有很多这样的例子,请看prototype.js中的用法:

for (var i = 0, length = properties.length; i < length; i++) {
  //code here
}

 

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

 

for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);

 

    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for (var i = 0, length = arguments.length; i < length; i++) {
      if (Object.isArray(arguments[i])) {
        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }

 

Tip 2: Cache your scripts!

 

把js代码放到文件里。

 

<script type="text/javascript" src="imagescript.js"></script>

  

在yahoo的如何建设高性能网站博客里也提到了这一点,请参看http://developer.yahoo.com/performance/rules.html

 

Tip 3: Understand the cost of your objects

 

事实上,一些JavaScript对象很少宽容浏览器。请看下面的例子:

 

-object.innerText //IE only
-object.innerHTML

 

你知道第二个属性比第一个要求更多的系统资源调用次数吗?如果你刚好在IE里、刚好要改变某个<div>或<span>里的文本内容,innerText将是非常高效的选择。另一个例子就是CSS属性“display”和“visibility”;前者明显比后者开销大。

 

---------------

参考文章

---------------

http://www.javascriptkit.com/javatutors/efficientjs.shtml

 

该网站有很多实用、短小的文章,非常不错!

分享到:
评论

相关推荐

    JavaScript程序设计课件:面向对象概述.pptx

    JavaScript程序设计 面向过程与面向对象 6.1.1 面向过程与面向对象 1、概念 面向过程(Procedure Oriented)也可称之为“面向记录”,是一种以过程为中心的编程思想。它注重的是具体的步骤,只有按照步骤一步一步...

    syllabus:纽约大学高级JavaScript课程的教学大纲

    探索该语言的一些鲜为人知但有用的功能,例如如何在不同的浏览器上调试JavaScript问题并提高性能。 使用第三方JavaScript库创建交互式网页。 实验室中提供了计算机,但建议您带一台笔记本电脑进行课堂练习。先决...

    JAVA毕业设计之springboot063知识管理系统(springboot+mysql)完整源码.zip

    以下是关于该项目的500字资源介绍:项目结构:本项目采用经典的MVC(Model-View-Controller)架构,分为前端、后端和数据库三个部分。前端使用HTML、CSS和JavaScript进行页面设计和交互实现;后端使用Spring Boot...

    how-javascript-works:有关javascript工作原理,事件循环,服务工作者等的知识

    第十二章:网络层探秘及如何提高其性能和安全性 第十三章:CSS 和 JS 动画底层原理及如何优化其性能 第十四章:解析,语法抽象树及最小化解析时间的 5 条小技巧 第十五章:类和继承及 Babel 和 TypeScript 代码转换...

    SpringBoot项目基于多维分类的知识管理系统.zip

    SpringBoot项目基于多维分类的...总体来说,SpringBoot项目基于多维分类的知识管理系统以其全面的功能、稳定的性能和优秀的用户体验,为企业和团队提供了一个高效的知识管理和协作平台,有助于促进知识的积累和流通。

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    jQuery权威指南-源代码

    《jQuery权威指南》除了理论知识丰富而全面外,它还有一个最大的特点就是注重实战,每个知识点都有一个完整的案例,包括需求分析、代码实现和结果展示三个部分,而且还包含两个综合性的案例,它的实践性之强是目前...

    JAVA上百实例源码以及开源项目源代码

     QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...

    java开源包1

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包11

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包2

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包3

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包6

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包5

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包10

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包4

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包8

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包7

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包9

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    Node应用程序构建—使用MongoDB和Backbone.pdf

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包。Backbone.js是面向客户端的JavaScript框架。MongoDB是一种NoSQL的数据库。三者结合使用,可以构建出高效的Web引用。 《Node应用程序构建——使用MongoDB...

Global site tag (gtag.js) - Google Analytics