优化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 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
node.js缺少mysql模块运行报错的解决方法
Nov 13 Javascript
canvas实现环形进度条效果
Mar 23 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
Apr 01 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
layui form表单提交后实现自动刷新
Oct 25 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
配置支持SSI
2006/11/25 PHP
php实现的在线人员函数库
2008/04/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
webpack入门必知必会
2017/01/16 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
python中模块查找的原理与方法详解
2017/08/11 Python
python模块常用用法实例详解
2019/10/17 Python
python实现人工蜂群算法
2020/09/18 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
会议邀请书范文
2014/02/02 职场文书
2014年国培研修感言
2014/03/09 职场文书
安全生产宣传标语
2014/06/06 职场文书
人力资源管理求职信
2014/08/07 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
PHP RabbitMQ消息列队
2022/05/11 PHP