优化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 document.referrer 用法
Apr 30 Javascript
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
jQuery自动完成插件completer附源码下载
Jan 04 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
Feb 23 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
强大的 Angular 表单验证功能详细介绍
May 23 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
vue 录制视频并压缩视频文件的方法
Jul 27 Javascript
vue项目实现分页效果
Mar 24 Vue.js
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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
vue生命周期的探索
2019/04/03 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python实现员工管理系统
2018/01/11 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
省级四好少年事迹材料
2014/01/25 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python