优化Vue中date format的性能详解


Posted in Javascript onJanuary 13, 2020

在很多项目中,都需要将长整型的日期格式转换成其他的日期格式,而在Vue中,我们可以利用自定义相应的 filter 过滤器来进行 date format 的功能。如果直接引入 moment 的方法,在利用 npm run build --report 时,会发现 moment.js 的文件相当大。显而易见,这么小的功能点却大大影响了项目的性能。

本文主要是利用 npm run build --report 来分析打包文件的大小,进而对 date format 的功能点进行优化。

自定义 'date-format' 过滤器

我们可以先看一下自定义date-format过滤器及使用的方法。

安装moment

npm install moment --save

自定义过滤器filter

// src/filters/index.js

import Vue from 'vue'
import moment from 'moment'

// 自定义过滤器
Vue.filter('date-format', function (value, formatStr = 'YYYY-MM-DD HH:mm:ss') {
 return moment(value).format(formatStr)
})

在入口文件main.js加载过滤器

import './filters' // 加载过滤器

使用'date-format'过滤器

<template>
 <div class="page">
 <div class="delivery-wrapper">
  <span class="title">送达时间</span>
  <span class="delivery">{{dateTime | date-format}}分钟</span>
 </div>
 </div>
</template>

<script>
export default {
 name: '',
 components: {},
 data () {
 return {
  dateTime: 1578794429153
 }
 }
}
</script>

<style scoped lang="stylus"></style>

如上,{{dateTime | date-format}}即可将dateTime: 1578794429153转换成 dateTime: 2020-01-12 10:00:29

结果图

优化Vue中date format的性能详解

npm run build --report 分析图

优化Vue中date format的性能详解

分析图中,文件占据的面积越大表示其文件的大小越大。很明显,moment.js差不多占据了整个打包文件的1/3 。而我们只是用来转换日期这样的很小功能点。

使用 date-fns 代替 moment

安装 date-fns

npm install date-fns --save

方法一: import { format } from 'date-fns'

修改src/filters/index.js文件

import Vue from 'vue'
// import moment from 'moment'

import { format } from 'date-fns'

// 自定义过滤器
Vue.filter('date-format', function (value, formatStr = 'yyyy-MM-yy HH:mm:ss') {
 return format(value, formatStr)
})

npm run build --report 分析图

优化Vue中date format的性能详解

方法二: import { format } from 'date-fns'

修改src/filters/index.js文件

import Vue from 'vue'
// import moment from 'moment'

// import { format } from 'date-fns'
import format from 'date-fns/format'

// 自定义过滤器
Vue.filter('date-format', function (value, formatStr = 'yyyy-MM-yy HH:mm:ss') {
 return format(value, formatStr)
})

npm run build --report 分析图

优化Vue中date format的性能详解

总结

压缩后的包文件大小从 66.61KB -> 16.06KB -> 5.52KB

观察第一张图,可以很明显的看出:在使用Webpack将moment.js打包在构建结果中时,会占据很大的文件空间;而打包后的date-fns的文件要小很多。另外,date-fns里有很多函数。如果直接使用 import { format } from 'date-fns' 表示引入date-fns所有包文件;而 import format from 'date-fns/format' 只是导入date-fns下的format文件。

参考文献

date-fns —— 轻量级的 JavaScript 日期库
date-fns官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript入门教程(7) History历史对象
Jan 31 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
跟我学习javascript的基本类型和引用类型
Nov 16 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
归纳下js面向对象的几种常见写法总结
Aug 24 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
Aug 14 Javascript
JavaScript实现简单计算器功能
Dec 19 Javascript
JS document文档的简单操作完整示例
Jan 13 #Javascript
JavaScript数组排序小程序实现解析
Jan 13 #Javascript
JS document form表单元素操作完整示例
Jan 13 #Javascript
JS校验与最终登陆界面功能完整示例
Jan 13 #Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 #Javascript
JS表格的动态操作完整示例
Jan 13 #Javascript
JavaScript实现模态对话框实例
Jan 13 #Javascript
You might like
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php二维码生成以及下载实现
2017/09/28 PHP
javascript 解析url的search方法
2010/02/09 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
个人求职简历的自我评价
2013/10/19 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
暑期社会实践感言
2014/02/25 职场文书
给全校老师的建议书
2014/03/13 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
办理护照工作证明
2014/10/10 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书