zoukankan      html  css  js  c++  java
  • JavaScript性能优化

    JavaScript性能优化

    语言层次方面

    1.循环

    for (;;) 
    while ()
    // for(;;)和while循环的性能应该说基本(平时使用时)等价
    // 如果是循环变量递增或递减,不要单独对循环变量赋值,应该在它最后一次读取的时候使用嵌套的++或—操作符。
    // 如果要与数组的长度作比较,应该事先把数组的length属性放入一个局部变量中,减少查询次数。(即下文的‘减少对象查找’)
    
    for (in) // 效率极差,因为需查询散列键,尽量少用
    
    倒序循环
    达夫设备
    

    2.局部变量和全局变量

    局部变量的速度要比全局变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的栈当中的。
    

    3.减少对象查找

    因为JavaScript的解释性,所以a.b.c.d.e,需要进行至少4次查询操作,先检查a再检查a中的b,再检查b中的c,如此往下。应该尽量少出现这样的表达式,可利用局部变量,把它放入一个临时的地方进行查询。
    

    4.类型转换

    浮点数转换成整型:这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()。
    另外,上面对象查找中的问题不一样,Math是内部对象,所以Math.floor()其实并没有多少查询方法和调用的时间,速度是最快的。
    

    5.使用直接量
    影响较小,可忽略。栗子:

    var arr1 = [param1,param2,param3];// 直接量,引擎直接解释,较快
    var arr2 = new Array(param1,param2,param3); // 要调用一个Array内部构造器
    

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

    其实这些经验都基于几条原则:
    * 直接拿手头现成的东西比较快,如局部变量比全局变量快,直接量比运行时构造对象快等等。
    * 尽可能少地减少执行次数,比如先缓存需要多次查询的。
    * 尽可能使用语言内置的功能,比如串链接。
    * 尽可能使用系统提供的API,因为这些API是编译好的二进制代码,执行效率很高

  • 相关阅读:
    [匈牙利] 洛谷 P2526 小狗散步
    [匈牙利] 洛谷 P1129 矩阵游戏
    [树形dp] Jzoj P5233 概率博弈
    [线段树] Jzoj P4231 寻找神格
    [状压dp][期望] 洛谷 P2473 奖励关
    [倍增][双向链表] Jzoj P3101 开车旅行
    [高精度][数学] Jzoj P3771 小Z的烦恼
    [并查集][排序] Jzoj P2940 生成输入数据
    [dfs][概率] Jzoj P2941 贿赂
    [权值线段树] Jzoj P4417 神奇的字符串
  • 原文地址:https://www.cnblogs.com/qiuchen/p/5295223.html
Copyright © 2011-2022 走看看