优化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 相关文章推荐
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
Dec 08 Javascript
JavaScript mapreduce工作原理简析
Nov 25 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
Jun 21 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
javascript 缓冲运动框架的实现
Sep 29 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
Oct 12 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 Javascript
详解基于vue的服务端渲染框架NUXT
Jun 20 Javascript
jQuery无冲突模式详解
Jan 17 jQuery
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
Vue中axios拦截器如何单独配置token
Dec 27 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 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内存缓存Memcached类实例
2014/12/08 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
浅述python中argsort()函数的实例用法
2017/03/30 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
Python笔记之工厂模式
2019/11/20 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
商场总经理岗位职责
2014/02/03 职场文书
周年庆典主持词
2014/04/02 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
统计学教授推荐信
2014/09/18 职场文书
迁户口计划生育证明
2014/10/19 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
学生检讨书范文
2015/01/27 职场文书
龙猫观后感
2015/06/09 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
利用Redis实现点赞功能的示例代码
2022/06/28 Redis