优化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 相关文章推荐
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
javascript获取网页宽高方法汇总
Jul 19 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
Jul 09 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
RequireJS简易绘图程序开发
Oct 28 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
老生常谈JavaScript面向对象基础与this指向问题
Oct 16 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
vue实现倒计时获取验证码效果
Apr 17 Javascript
Vue项目移动端滚动穿透问题的实现
May 19 Javascript
详解vue实现坐标拾取器功能示例
Nov 18 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
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
Python基于select实现的socket服务器
2016/04/13 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
什么是设计模式
2012/06/17 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
会议开幕词
2015/01/28 职场文书
社区结对共建协议书
2016/03/23 职场文书