优化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实现UTF8编码转换成gb2312编码
Dec 22 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
Jun 10 Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
浅谈Javascript常用正则表达式应用
Mar 08 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
Python单元测试实例详解
2018/05/25 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
上海期货面试题
2014/01/31 面试题
大型会议接待方案
2014/03/01 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
社区灵活就业证明
2014/11/03 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
保姆聘用合同
2015/09/21 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书