优化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之解决IE下不渲染的bug
Jun 29 Javascript
JavaScript中几种常见排序算法小结
Feb 22 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
Jquery焦点与失去焦点示例应用
Jun 10 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
jQuery 选择同时包含两个class的元素的实现方法
Jun 01 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
Javascript实现跨域后台设置拦截的方法详解
Aug 04 Javascript
vue 实现一个简单的全局调用弹窗案例
Sep 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Django model序列化为json的方法示例
2018/10/16 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
struct与class的区别
2014/02/03 面试题
2014年五四青年节活动方案
2014/03/29 职场文书
小学生倡议书范文
2014/05/13 职场文书
2014年幼师工作总结
2014/11/22 职场文书
银行实习推荐信
2015/03/27 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
升职自荐书
2019/05/09 职场文书