优化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 相关文章推荐
FLASH 广告之外的链接
Dec 16 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
javascript实现画不相交的圆
Apr 07 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
js如何获取网页所有图片
May 12 Javascript
关于Stream和Buffer的相互转换详解
Jul 26 Javascript
响应式框架Bootstrap栅格系统的实例
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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
读jQuery之八 包装事件对象
2011/06/21 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Python计算两个日期相差天数的方法示例
2017/05/23 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
keras 多任务多loss实例
2020/06/22 Python
个人自荐信
2013/12/05 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
工程质量月活动方案
2014/02/19 职场文书
《雷雨》教学反思
2014/02/20 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
公司承诺书怎么写
2014/05/24 职场文书
小学班级特色活动方案
2014/08/31 职场文书
党课培训心得体会
2014/09/02 职场文书
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python