区块链技术博客
www.b2bchain.cn

六、性能核心思想,走最短的路求职学习资料

本文介绍了六、性能核心思想,走最短的路求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

六、性能核心思想,走最短的路

如果我们要从 JS 的角度去分析,如何做性能优化,那么,我们需要分析的东西就太多了。

但是我们学习的目的并不是把每一个可能涉及到性能优化的知识点都过一遍,而是掌握这种思维,不同的场景,我们需要做不同的思考,但是背后的某种底层思维,一定是一致的。这种思维就是,尽量 走最短的路

这是什么意思呢?我们举一个例子。

案例分析优化思维

我想要定义一个方法,该方法的功能是计算两个数字的和。但是,由于部分字符串也能转换为数字,因此我期望这个功能更加强大一点,所以传入的参数,除了数字之外,也支持字符串。这个方法能够准确的计算出字符串数字的和。

先粗糙的实现一个方法:

type Target = number | string; function add(num1: Target, num2: Target) {   if (typeof num1 === 'number' && typeof num2 === 'number') {     return num1 + num2;   }    let _num1, _num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   } else {     _num1 = num1;   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   } else {     _num2 = num2;   }    return _num1 + _num2;  }

这个方法的原理很很简单,如果只是数字的话,那么就是方法直接相加。但是如果参数出现了字符串,那么在函数内部,执行的过程就会不一样。

例如 add(1, 2) 的执行,性能一定会高于 add('1', '2') 。为什么?我想大家都能够说出来原因:当参数作为字符串时,需要判断的逻辑更多,走的路更长。

那么再思考一下当参数其中一个为字符串 add('1', 2) ,和都为字符串 add('1', '2') 时,谁的性能消耗更多一点?

当然是都为字符串。因为当都为字符串时,需要经历的判断更多,走的路更长一点。

因此给我们的思考就是,在使用该方法时,就要优先传入数字作为参数。

我们再思考一个问题,从代码简洁程度上来说, add 方法有更简洁的实现,我们为什么要单独判断是否都为数字然后直接就返回结果呢?

代码更简洁的实现

function add(num1, num2) {   let _num1 = num1, _num2 = num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   }    return _num1 + _num2; }

思考一下使用场景,如果我们仅支持数字,是不是add方法就超级简单。

function add(num1, num2) {   return num1 + num2; }

那么提前判断参数都为数字并且返回结果的目的,就是在于,给使用时,提供一个大多数场景都会用到的更短路径。这样我们在使用时,可以有一个策略「参数只传数字」让性能达到极致。

当然,add 方法毕竟比较简单,即使是性能消耗最严重的使用方式我们也几乎可以忽略不计,因此这里用作于学习。不过我们在实践场景里就有许多可类比的场景。

排序算法分析

六、性能核心思想,走最短的路

关于算法的文章推荐:_超详细十大经典排序算法总结_

学习算法的过程中,排序算法是不可避免要学习的知识。可是排序的方式很多种,冒泡排序,选择排序,插入排序,归并排序等等,那么到底哪种算法,才是最适合当前应用场景的?这就需要我们了解各种算法的实现原理,以及实现成本,选择一种最合适的最短路径。

在衡量算法性能时,有两个我们比较重视的维度需要我们掌握,时间复杂度与空间复杂度。

时间复杂度:算法执行所消耗的时间,通常用O来表示

例如,一个数组,有10项,那边循环一次,时间复杂度,就是O(10),如果我们使用冒泡排序算法对该数组进行排序,那么每一项都会去循环一次,因此实践复杂度就是 O(10 * 10) ,即为 O(10²)。

六、性能核心思想,走最短的路

如果我们要从 JS 的角度去分析,如何做性能优化,那么,我们需要分析的东西就太多了。

但是我们学习的目的并不是把每一个可能涉及到性能优化的知识点都过一遍,而是掌握这种思维,不同的场景,我们需要做不同的思考,但是背后的某种底层思维,一定是一致的。这种思维就是,尽量 走最短的路

这是什么意思呢?我们举一个例子。

案例分析优化思维

我想要定义一个方法,该方法的功能是计算两个数字的和。但是,由于部分字符串也能转换为数字,因此我期望这个功能更加强大一点,所以传入的参数,除了数字之外,也支持字符串。这个方法能够准确的计算出字符串数字的和。

先粗糙的实现一个方法:

type Target = number | string; function add(num1: Target, num2: Target) {   if (typeof num1 === 'number' && typeof num2 === 'number') {     return num1 + num2;   }    let _num1, _num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   } else {     _num1 = num1;   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   } else {     _num2 = num2;   }    return _num1 + _num2;  }

这个方法的原理很很简单,如果只是数字的话,那么就是方法直接相加。但是如果参数出现了字符串,那么在函数内部,执行的过程就会不一样。

例如 add(1, 2) 的执行,性能一定会高于 add('1', '2') 。为什么?我想大家都能够说出来原因:当参数作为字符串时,需要判断的逻辑更多,走的路更长。

那么再思考一下当参数其中一个为字符串 add('1', 2) ,和都为字符串 add('1', '2') 时,谁的性能消耗更多一点?

当然是都为字符串。因为当都为字符串时,需要经历的判断更多,走的路更长一点。

因此给我们的思考就是,在使用该方法时,就要优先传入数字作为参数。

我们再思考一个问题,从代码简洁程度上来说, add 方法有更简洁的实现,我们为什么要单独判断是否都为数字然后直接就返回结果呢?

代码更简洁的实现

function add(num1, num2) {   let _num1 = num1, _num2 = num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   }    return _num1 + _num2; }

思考一下使用场景,如果我们仅支持数字,是不是add方法就超级简单。

function add(num1, num2) {   return num1 + num2; }

那么提前判断参数都为数字并且返回结果的目的,就是在于,给使用时,提供一个大多数场景都会用到的更短路径。这样我们在使用时,可以有一个策略「参数只传数字」让性能达到极致。

当然,add 方法毕竟比较简单,即使是性能消耗最严重的使用方式我们也几乎可以忽略不计,因此这里用作于学习。不过我们在实践场景里就有许多可类比的场景。

排序算法分析

六、性能核心思想,走最短的路

关于算法的文章推荐:_超详细十大经典排序算法总结_

学习算法的过程中,排序算法是不可避免要学习的知识。可是排序的方式很多种,冒泡排序,选择排序,插入排序,归并排序等等,那么到底哪种算法,才是最适合当前应用场景的?这就需要我们了解各种算法的实现原理,以及实现成本,选择一种最合适的最短路径。

在衡量算法性能时,有两个我们比较重视的维度需要我们掌握,时间复杂度与空间复杂度。

时间复杂度:算法执行所消耗的时间,通常用O来表示

例如,一个数组,有10项,那边循环一次,时间复杂度,就是O(10),如果我们使用冒泡排序算法对该数组进行排序,那么每一项都会去循环一次,因此实践复杂度就是 O(10 * 10) ,即为 O(10²)。

六、性能核心思想,走最短的路

如果我们要从 JS 的角度去分析,如何做性能优化,那么,我们需要分析的东西就太多了。

但是我们学习的目的并不是把每一个可能涉及到性能优化的知识点都过一遍,而是掌握这种思维,不同的场景,我们需要做不同的思考,但是背后的某种底层思维,一定是一致的。这种思维就是,尽量 走最短的路

这是什么意思呢?我们举一个例子。

案例分析优化思维

我想要定义一个方法,该方法的功能是计算两个数字的和。但是,由于部分字符串也能转换为数字,因此我期望这个功能更加强大一点,所以传入的参数,除了数字之外,也支持字符串。这个方法能够准确的计算出字符串数字的和。

先粗糙的实现一个方法:

type Target = number | string; function add(num1: Target, num2: Target) {   if (typeof num1 === 'number' && typeof num2 === 'number') {     return num1 + num2;   }    let _num1, _num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   } else {     _num1 = num1;   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   } else {     _num2 = num2;   }    return _num1 + _num2;  }

这个方法的原理很很简单,如果只是数字的话,那么就是方法直接相加。但是如果参数出现了字符串,那么在函数内部,执行的过程就会不一样。

例如 add(1, 2) 的执行,性能一定会高于 add('1', '2') 。为什么?我想大家都能够说出来原因:当参数作为字符串时,需要判断的逻辑更多,走的路更长。

那么再思考一下当参数其中一个为字符串 add('1', 2) ,和都为字符串 add('1', '2') 时,谁的性能消耗更多一点?

当然是都为字符串。因为当都为字符串时,需要经历的判断更多,走的路更长一点。

因此给我们的思考就是,在使用该方法时,就要优先传入数字作为参数。

我们再思考一个问题,从代码简洁程度上来说, add 方法有更简洁的实现,我们为什么要单独判断是否都为数字然后直接就返回结果呢?

代码更简洁的实现

function add(num1, num2) {   let _num1 = num1, _num2 = num2;    if (typeof num1 === 'string') {     if (isNaN(parseInt(num1))) {       return '请传入争取的参数';     }     _num1 = parseInt(num1);   }    if (typeof num2 === 'string') {     if (isNaN(parseInt(num2))) {       return '请传入争取的参数';     }     _num2 = parseInt(num2);   }    return _num1 + _num2; }

思考一下使用场景,如果我们仅支持数字,是不是add方法就超级简单。

function add(num1, num2) {   return num1 + num2; }

那么提前判断参数都为数字并且返回结果的目的,就是在于,给使用时,提供一个大多数场景都会用到的更短路径。这样我们在使用时,可以有一个策略「参数只传数字」让性能达到极致。

当然,add 方法毕竟比较简单,即使是性能消耗最严重的使用方式我们也几乎可以忽略不计,因此这里用作于学习。不过我们在实践场景里就有许多可类比的场景。

排序算法分析

六、性能核心思想,走最短的路

关于算法的文章推荐:_超详细十大经典排序算法总结_

学习算法的过程中,排序算法是不可避免要学习的知识。可是排序的方式很多种,冒泡排序,选择排序,插入排序,归并排序等等,那么到底哪种算法,才是最适合当前应用场景的?这就需要我们了解各种算法的实现原理,以及实现成本,选择一种最合适的最短路径。

在衡量算法性能时,有两个我们比较重视的维度需要我们掌握,时间复杂度与空间复杂度。

时间复杂度:算法执行所消耗的时间,通常用O来表示

例如,一个数组,有10项,那边循环一次,时间复杂度,就是O(10),如果我们使用冒泡排序算法对该数组进行排序,那么每一项都会去循环一次,因此实践复杂度就是 O(10 * 10) ,即为 O(10²)。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 六、性能核心思想,走最短的路求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们