优化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 Event学习第八章 事件的顺序
Feb 07 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
May 10 Javascript
浅谈javascript中的Function和Arguments
Aug 30 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
JavaScript错误处理和堆栈追踪详解
Apr 18 Javascript
详谈构造函数加括号与不加括号的区别
Oct 26 Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 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中的观察者模式
2010/03/24 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Python下简易的单例模式详解
2019/04/08 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
介绍一下gcc特性
2015/10/31 面试题
中学运动会广播稿
2014/01/19 职场文书
中班中秋节活动反思
2014/02/18 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL