优化代码性能

电玩女神 2023-03-01 09:13 24阅读 0赞

优化代码性能(javascript描述)

1. 避免不必要的属性查找

  1. 在计算机领域中,计算的复杂度是使用O符号表示的,最简单的算法是常数O(1),下面列出常见的算法类型的负责度

























标记 描述
O(1) 常数 不管多少值,执行的时间都是恒定的。一般表示简单值和存储在变量中的值
O(log n) 对数 总的执行时间和值的数量相关,但是要完成算法并不定要获取每个值。例如:二分查找
O(n) 线性 总执行时间和值的数量直接相关。例如:遍历某个数组中所有元素
O(n^2) 平方 总执行时间和值的数量有关,每个值至少要获取N次。例如:插入排序
  1. var value = 5;
  2. var sum = 10 + value;
  3. alert(sum);

该代码进行了四次常量值查找:数字5,变量value,数字10和变量sum。以上代码的整体复杂度被认为是O(1)。

  1. var value = first5second10};
  2. var sum = value.first +value.second;
  3. alert(sum);

这段代码使用两次属性查找来计算sum的值。进行一两次属性查找并不会导致显著的性能问题,但是进行成百上千肯定会减慢执行速度。以上代码的整体复杂度被认为是O(n)。

注意获取单个值的多重属性查找。例如,请看一下代码

  1. var query = window.location.herf.substring(window.location.href.indexOf("?"));

这段代码中有6次属性的查找:window.location.href.substring()有3次,window.location.href.indexOf()又有3次。只要数一数代码中的点的数量,就可以确定属性查找的次数了。这段代码由于两次用到了window.location.href,同样的查找进行了两次,因此效率特别不好。
一旦多次用到对象属性,应该将其存储在局部变量中。第一次访问该值会是O(n),然后后续的访问都是O(1),这就会节省很多重复的查询。例如之前的代码可以重写如下:

  1. var url = window.location.href;
  2. var query = url.substring(url.indexOf("?"));

这个版本中只有4次属性查询,相对于原始版本中节省33%,在更大的脚本中进行这种有优化,倾向于获得更多改进

优化循环(常用方法)

  1. 减值迭代——大多数循环使用一个从0开始、增加到某个特定值的迭代器。在很多情况下,从最大值开始,在循环中不断减值的迭代器更加高效
  2. 简化终止条件——由于每次循环中都会计算终止条件,所以必须保证它尽可能快,也就是说避免属性查找或其他O(n)的操作
    用一个例子来描述这种改动。以下是一个基本的for循环

    for(var i = 0;i<values.length;i++){
    let el= values[i]
    //执行内容
    }

这段代码中变量I从0递增到values数组中的元素总数。假设值的处理顺序无关紧要,那么循环可以改为i减值

  1. for(var i = values.length-1;i>=0;i--){
  2. let el= values[i]
  3. //执行内容
  4. }

这里变量i每次循环之后都会减1。在这个过程中,将终止条件从vales.length的O(n)调用简化成了0的O(1)调用。

其他性能注意事项

  1. Switch语句较快—— 如果有一系列复杂的if-else语句,可以转换成单个switch语句则可以得到更快的代码。还可以通过将case语句按照最可能的到最不可能的顺序进行组织,来进一步优化switch语句
  2. 位运算符较快—— 单进行数学运算的时候,位运算操作要比任何别运算或者算数运算快。选择性地用位运算替换算数运算可以极大提升复杂计算的性能。
  3. 优化DOM交互——在javascript各个方面中。dom毫无疑问是最慢的一部分。dom操作与交互要消耗大量的时间,因为它们往往需要重新渲染整个页面或者某一部分。进一步说,看似细微的操作也可能要花很久来执行,因为dom要处理非常多的信息。一句话,尽量减少dom的操作。

发表评论

表情:
评论列表 (有 0 条评论,24人围观)

还没有评论,来说两句吧...

相关阅读

    相关 优化代码性能

    优化代码性能(javascript描述) 1. 避免不必要的属性查找 在计算机领域中,计算的复杂度是使用O符号表示的,最简单的算法是常数O(1),下面列出常

    相关 Java 代码性能优化总结

    Java 代码性能优化总结 前言   代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢

    相关 JAVA代码优化性能

    在创建对象时的几个关键应用规则      1、避免在循环体中创建对象,即使该对象占用内存空间不大,      2、尽量及时使对象符合垃圾回收标准。      3、不要采用

    相关 Java--代码性能优化总结

    前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它

    相关 Java 代码性能优化总结

    代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 本文的内容有些来自网络,有些来自平时工作和学习,当然这不重要,重要的是这些代码优化的细节是否真真正正地有用