如何优化JavaScript脚本的性能(3)

作者:海啸 来源:海啸的地盘 时间:2008-02-19 21:47:00 

DOM相关

推荐:苏沈小雨htmlDOM方法中文手册chm

插入HTML

很多人喜欢在JavaScript中使用document.write来给页面生成内容。事实上这样的效率较低,如果需要直接插入HTML,可以找一个容器元素,比如指定一个div或者span,并设置他们的innerHTML来将自己的HTML代码插入到页面中。

对象查询

使用[“”]查询要比.items()更快,这和前面的减少对象查找的思路是一样的,调用.items()增加了一次查询和函数的调用。

创建DOM节点

通常我们可能会使用字符串直接写HTML来创建节点,其实这样做无法保证代码的有效性

字符串操作效率低

所以应该是用document.createElement()方法,而如果文档中存在现成的样板节点,应该是用cloneNode()方法,因为使用createElement()方法之后,你需要设置多次元素的属性,使用cloneNode()则可以减少属性的设置次数——同样如果需要创建很多元素,应该先准备一个样板节点。

定时器

如果针对的是不断运行的代码,不应该使用setTimeout,而应该是用setInterval。setTimeout每次要重新设置一个定时器。

其他

脚本引擎

据我测试Microsoft的JScript的效率较Mozilla的Spidermonkey要差很多,无论是执行速度还是内存管理上,因为JScript现在基本也不更新了。但SpiderMonkey不能使用ActiveXObject

文件优化

文件优化也是一个很有效的手段,删除所有的空格和注释,把代码放入一行内,可以加快下载的速度,注意,是下载的速度而不是解析的速度,如果是本地,注释和空格并不会影响解释和执行速度。

总结

本文总结了我在JavaScript编程中所找到的提高JavaScript运行性能的一些方法,其实这些经验都基于几条

原则:

直接拿手头现成的东西比较快,如局部变量比全局变量快,直接量比运行时构造对象快等等。

尽可能少地减少执行次数,比如先缓存需要多次查询的。

尽可能使用语言内置的功能,比如串链接。

尽可能使用系统提供的API,因为这些API是编译好的二进制代码,执行效率很高

同时,一些基本的算法上的优化,同样可以用在JavaScript中,比如运算结构的调整,这里就不再赘述了。但是由于JavaScript是解释型的,一般不会在运行时对字节码进行优化,所以这些优化仍然是很重要的。

当然,其实这里的一些技巧同样使用在其他的一些解释型语言中,大家也可以进行参考。

参考
http://www.umsu.de/jsperf/ 各种浏览器的测试对比
http://home.earthlink.net/~kendrasg/info/js_opt/

标签:JavaScript,优化,性能
0
投稿

猜你喜欢

  • Python 敏感词过滤的实现示例

    2021-07-04 12:17:28
  • 详解django自定义中间件处理

    2023-09-30 08:19:12
  • js中常用的Tab切换效果(推荐)

    2024-02-27 11:48:23
  • 将有安全问题的SQL过程删除,比较全面

    2007-08-06 14:46:00
  • Python干货实战之八音符酱小游戏全过程详解

    2021-08-20 11:21:27
  • Pytorch创建张量的四种方法

    2023-11-20 15:25:36
  • MYSQL必知必会读书笔记第四章之检索数据

    2024-01-18 03:34:40
  • python+selenium开发环境搭建图文教程

    2022-10-17 13:04:05
  • OpenCV-Python实现人脸磨皮算法

    2022-12-29 18:00:06
  • Python中的super()方法使用简介

    2021-03-06 21:27:35
  • MASA Blazor入门详细教程

    2023-04-08 17:51:29
  • SQL Server 交叉表查询 case

    2012-01-05 19:31:38
  • Django多个app urls配置代码实例

    2021-11-23 10:01:13
  • Python3使用requests模块实现显示下载进度的方法详解

    2021-03-26 21:14:52
  • Python实现日期判断和加减操作详解

    2021-06-17 09:20:02
  • pytorch分类模型绘制混淆矩阵以及可视化详解

    2023-01-17 17:35:43
  • Windows 7下Python Web环境搭建图文教程

    2023-06-12 07:10:51
  • git本地分支和stash内容报错消失的问题

    2023-10-19 01:48:47
  • Python使用Selenium爬取淘宝异步加载的数据方法

    2021-05-17 05:31:57
  • 开源MySQL公司停止提供企业版源代码tar包

    2009-01-14 13:02:00
  • asp之家 网络编程 m.aspxhome.com