每日 30 秒 ⏱ 该不应优雅

简介

可读性、性能、Spread、Reducejavascript

优雅三连击 中有同窗提到了 可读性 这个关键词,就小二我的的观点 在某个范围内使用比较经常使用到的小技巧,能够提高必定的可读性,文中提到的短路运算在初始化变量是提高可读性的,而且在不少提倡优化if 语句的时候,短路运算符也能够起到对简单条件语句的优雅。前端

// 优雅前
if (name == '') {
    name = 'anonymous'
}

// 优雅后
name = name || 'anonymous'
复制代码

毕竟可读性能使得代码方便理解,甚至作到不须要注释,也包括让人能阅读愉快。但不能滥用这些方法来把代码全都揉成一团,这个度怎么把握就是一门学问,不少时候与我的习惯和经验都有必定的关系。java

优雅不是一蹴而就,而是在丑化的代码中慢慢优雅。-- 鲁迅git

Spread

ES6的新语法糖 spread 甜得不得了,可是你知道它并不比Object.assign() 快吗?github

const user = { name: 'xiaoer', height: '183' }; 

// ES6 - spread
const useSpread = { age: 18, ...params };

// Object.assign()
const useAssign = Object.assign({}, { age: 18 }, params);
复制代码

这两种方法 spread 语法显然更优雅,可是在 性能基准测试Object.assign() 肉眼可见的快了50%-60%。后端

基准测试

Reduce

Array.reduce() 能够和大程度上提高代码的可读性,可是你知道 loop 其实更快嘛?数组

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Array.reduce
numbers.reduce((count, i) => count + i, 0);

// loop
function sum(arr) {
    let count = 0;
    for (let i = 0; i < arr.length; i++) {
        count += arr[i]
    }
    return count;
}

sum(numbers);
复制代码

很显然 Array.reduce() 的写法更优雅,可是在 性能基准测试for 循环 肉眼可见的快了90%。微信

基准测试

怎么办

上面两个关于优雅的例子性能对比之下,不知道该不应继续使用优雅方法?是否是本身以前写的代码都糟糕极了jsp

其实没必要于太过纠结该不应,新的 ES6 语法糖很大程度上是为了提高开发体验和功能, 而且一些小技巧能够提高可读性和愉悦感,当遇到海量数据须要考虑优化时选择 性能,当其余较为繁琐的代码选择可读性,若是你真的很在乎这个能够看看这几个建议:函数

何时可读性优先

  • 其实如今的硬件性能已经很是快了,处理数据很少不少时候牺牲一点性能换取可读性是应该的,毕竟开发和维护在不少时候并非一我的的事情,而是一整个团队几百号人。
  • 有的时候项目开发中上级给你分配了好几个新人,出于开发进度和新人的不熟练,能够选择可读性优先,并在后期维护时对性能分析并选取优化性能。
  • 编写实例代码或者教程、类库时,考虑到读者的水平不必定都同样时,也能够优先可读性在后续文章或者迭代中补充说明。小二在写文章的时候,就是这样把不少概念拆开来,使得阅读时只须要聚焦一个知识点,并经过不断更新来完善其余知识。
  • 我的项目那确定是怎么舒服怎么来,毕竟是要愉悦本身。

何时性能优先

  • 其实性能优先和可读性优先都是相对的。
  • 当项目在运行时发现了特别明显的卡顿等性能问题时,就须要优先考虑性能了。
  • 在处理大量数据时就须要考虑性能了。有的同窗会说项目哪里有这么多数据,还真别说小二作过一个很是蛋疼的项目,后端直接返回几万条数据让前端来处理。别说话吻我,我不想回忆这段过去了。
  • 更多的取舍应该要出于项目实际状况进行选择,有些性能问题是能够提早预知的,必定程度的分析需求能够节省不少代码时间。

其余

一块儿成长

在困惑的城市里总少不了并肩同行的 伙伴 让咱们一块儿成长。

  • 若是您想让更多人看到文章能够点个 点赞
  • 若是您想激励小二能够到 Github 给个 小星星
  • 若是您想与小二更多交流添加微信 m353839115

微信公众号

本文原稿来自 PushMeTop

相关文章
相关标签/搜索