moment.js开发时是大家处理日期对象的利器。大量的api,简便时区和国际化支持。
而现在他的作者都觉得他太大了,不建议在新项目中使用它。
让我们来看看为什么?
1.太大了200多k的体积,即便在压缩之后还有60多k的大小。对于追求首屏加载的网页来说太慢了。
2.处理速度太慢了,格式化时间用时长。由于moment为了兼容老版本的浏览器,比如IE8(我呸),未能使用最新的api,处理速度慢也是理所应当。
3.可变的。多人共同开发的时候,极易出错。
const one = new moment();
const two = one.add(1, 'days')
console.log(one); //Wed Sep 16 2020 17:31:28 GMT+0800
console.log(two); //Wed Sep 16 2020 17:31:28 GMT+0800
4.很难调试。这里大家还可以试试其他的,我记得只有"",NaN,null时momentcai'才会返回undefined。
moment(undefined) //Tue Sep 15 2020 17:33:00 GMT+0800
这一旦后端没返回,莫名奇妙的错误能让你查很久。
所以来看看这个库吧,date-fns(https://github.com/date-fns/date-fns#readme)。
- 现代的: 可以在webpack, Browserify, or Rollup中使用,也tree-shaking(用到什么打包什么).
- 原生时期对象: 使用原生对象,类型安全。
- 纯函数和不可变:使用函数式编程,总是返回一个日期对象。
- TypeScript & Flow:支持ts和flow.js
- 轻量的: 大小只有20几k,而这还没有tree-shaking
- I18n: 国际化
大家有没有对这个包开始感兴趣了。
不过以下几种情况的话,大家还是老老实实用回moment
- 你在维护老项目
- 你需要适配IE8及其以下浏览器
- 使用的组件库中日期组件等是基于moment设计的
- 你开的应用是极其复杂的时间的应用,为了更好的依赖支持,还是建议你使用moment。
当然反过来说,如果你追求极致的轻量,还可以试试day.js,只有3Kb。对SEO和加载会非常有帮助。
关注我给大家带来更多前端有趣的知识。
#前端##moment##程序员##JavaScript#