文档章节

Javascript的代码性能建议

Maculish
 Maculish
发布于 2015/11/27 14:18
字数 644
阅读 15
收藏 0

1、尽量使用变量和常量,减少使用数组和对象成员

2、尽量减少使用动态作用域

  • 避免使用with语句

  • 由于try-catch也会改变作用域链,最好将错误处理委托给一个函数来处理用以避免catch中过多访问局部/全局变量

  • 减少使用eval语句(非常危险)

3、小心使用闭包

  • 由于闭包跨越作用域,导致性能下降

  • 由于闭包与其关联作用域对象共享活动对象,导致关联对象无法销毁(直到闭包被销毁),这带来额外内存开销,IE中会导致内存泄漏

4、尽量减少使用嵌套成员,最好在一个‘.’操作符就能够访问到对象成员

5、属性或方法在原型链中的位置越深,效率越低,实例成员的访问速度优于原型成员

6、如许多次访问对象成员、数组元素、跨域变量和多级嵌套成员,应尽量使用局部变量替代

7、字符串连接

  • 使用+和+=运算符在非IE7及以下版本的浏览器中效率都高于其他方式连接

  • 使用+和+=时,尽量将被连接字符串变量放在左边,并且尽量避免产生临时变量

    举例如下:

    var str = "abc";

    str += "def" + "ghi";

    由于表达式的从左到右计算的特点,"def"+"ghi"先执行并产生临时字符串"defghi",然后执行str+"defghi";

    可以改为:str += str + "def" + "ghi"; 这样执行就是(str + "def") + "ghi",不会产生临时字符串;

    当然如果程序如下,也会产生临时字符串:

    str = "def" + str + "ghi";

    这个将会产生两个临时字符串,"def"+str产生一个,然后其结果和"ghi"的合并还会产生一个;

  • IE7及以下版本浏览器中,Array.prototyp.join方法的效率远远高于+和+=,但在其他浏览器中数组连接字符串的效率是最低的

  • String.prototyp.concat的效率也稍慢于+和+=

8、使用Object/Array直接量来初始化

  • 例如:

    var obj = new Object();

    obj.name = 'Maculish';

    obj.age = 22;

    obj.gender = 'M';

    var arr = new Array();

    arr[0] = 'Maculish';

    arr[1] = 22;

    arr[2] = 'M';

    和以下用直接量创建的对象/数组相比,直接量创建的大小会更小,运行速度会更快

    var obj = {

    name: 'Maculish',
    
    age: 22,
    
    gender: 'M'
    

    };

var arr = ['Maculish', 22, 'M'];

尤其是要初始化的对象属性越多或数组元素越多,则性能优势越明显。

© 著作权归作者所有

Maculish
粉丝 1
博文 7
码字总数 3726
作品 0
程序员
私信 提问
10 个你需要了解的最佳 javascript 开发实践

原文:Top 10 “Must Follow” JavaScript Best Practices Javascript 的很多扩展的特性是的它变得更加的犀利, 同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。 尽管很多的开发人员...

justjavac
2013/10/15
690
1
好程序员Web前端教程分享JavaScript开发技巧

好程序员Web前端教程分享JavaScript开发技巧,相信知道Web前端的小伙伴都熟悉,Javascript的很多扩展的特性是的它变得更加的犀利,同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站,那...

好程序员IT
06/24
8
0
最大限度利用 JavaScript 和 Ajax 性能

简介 在 web 早期,优化 web 页面的性能通常意味着避免了使用不必要的 HTML 标记,将 JavaScript 代码量控制到最小,并尽量减小所有图片文件大小,否则上网冲浪者会走开去泡杯咖啡来等待页面...

IBMdW
2011/08/08
3K
3
编写更好的jQuery代码的建议及优化方法

讨论jQuery和javascript性能的文章并不罕见。然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码。好的代码会带来速度的提升。快速渲染和响应意味...

乐派电影
2014/04/12
286
0
高效的jQuery代码编写技巧总结

最近写了很多的js,虽然效果都实现了,但是总感觉自己写的js在性能上还能有很大的提升。本文我计划总结一些网上找的和我本人的一些建议,来提升你的jQuery和javascript代码。好的代码会带来速...

Jesons
2014/12/02
143
0

没有更多内容

加载失败,请刷新页面

加载更多

【TencentOS tiny】深度源码分析(4)——消息队列

消息队列 在前一篇文章中【TencentOS tiny学习】源码分析(3)——队列 我们描述了TencentOS tiny的队列实现,同时也点出了TencentOS tiny的队列是依赖于消息队列的,那么我们今天来看看消息...

杰杰1号
19分钟前
6
0
Hive

这就是那个 JAVA 类 package cn.itcast.bigdata;import java.util.HashMap;import org.apache.hadoop.hive.ql.exec.UDF;public class PhoneNbrToArea extends UDF{privat......

Garphy
19分钟前
6
0
Springboot开发,第二天

SpringBoot学习,第二天 目录:1、Springboot整合Listener 2、Springboot访问静态资源 3、异常处理 4、热部署 一、SpringBoot整合Listener 两种方式完成组件的注册 1、通过注解扫描完成组件的...

有一个小阿飞
23分钟前
7
0
BeginnersBook Perl 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并...

ApacheCN_飞龙
35分钟前
5
0
我的Java秋招面经大合集

阿里面经 阿里中间件研发面经 蚂蚁金服研发面经 岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。 我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。 然后我...

Java技术江湖
40分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部