内容简介:本文项目基于Vue-Cli3,想知道如何正确搭建请看我之前的文章:「Vue实践」项目升级vue-cli3的正确姿势
本文项目基于Vue-Cli3,想知道如何正确搭建请看我之前的文章:
「Vue实践」项目升级vue-cli3的正确姿势
1. 接口模块处理
1.1 axios 二次封装
很基础的部分,已封装好的请跳过。这里的封装是依据 JWT
紧接着的是响应拦截器(即异常处理)
这里做的处理分别是会话已失效和登陆超时,具体的需要根据业务来作变更。
最后是导出基础请求类型封装。
其中给 get 请求加上时间戳参数,避免从缓存中拿数据。
浏览器缓存是基于url进行缓存的,如果页面允许缓存,则在一定时间内(缓存时效时间前)再次访问相同的URL,浏览器就不会再次发送请求到服务器端,而是直接从缓存中获取指定资源。
1.2 请求按模块合并
模块的请求:
utils/api/index.js :
1.3 global.js中的处理
在 global.js 中引入:
写接口的时候就可以简化为:
2.Vue组件动态注册
来自 @SHERlocked93:Vue 使用中的小技巧
我们写组件的时候通常需要引入另外的组件:
写小项目这么引入还好,但等项目一臃肿起来...啧啧。 这里是借助 webpack ,使用 require.context() 方法来创建自己的模块上下文,从而实现自动动态 require 组件。
这个方法需要3个参数:
-
要搜索的文件夹目录
-
是否还应该搜索它的子目录
-
一个匹配文件的正则表达式。
在你放基础组件的文件夹根目录下新建 componentRegister.js :
最后我们在 main.js 中
我们就可以随时随地使用这些基础组件,无需手动引入了。
3. 页面性能调试:Hiper
我们写单页面应用,想看页面修改后性能变更其实挺繁琐的。有时想知道是「正优化」还是「负优化」只能靠手动刷新查看 network 。而 Hiper 很好解决了这一痛点(其实 Hiper 是后台静默运行 Chromium 来实现无感调试)。
Hiper官方文档
我们开发完一个项目或者给一个项目做完性能优化以后,如何来衡量这个项目的性能是否达标?
我们的常见方式是在 DevTool 中的 performance 和 network 中看数据,记录下几个关键的性能指标,然后刷新几次再看这些性能指标。
有时候我们发现,由于样本太少,受当前「网络」、「CPU」、「内存」的繁忙程度的影响很重,有时优化后的项目反而比优化前更慢。
如果有一个工具,一次性地请求N次网页,然后把各个性能指标取出来求平均值,我们就能非常准确地知道这个优化是「正优化」还是「负优化」。
并且,也可以做对比,拿到「具体优化了多少」的准确数据。这个 工具 就是为了解决这个痛点的。
安装
性能指标
| Key | Value |
|---|---|
| DNS查询耗时 | domainLookupEnd - domainLookupStart |
| TCP连接耗时 | connectEnd - connectStart |
| 第一个Byte到达浏览器的用时 | responseStart - requestStart |
| 页面下载耗时 | responseEnd - responseStart |
| DOM Ready之后又继续下载资源的耗时 | domComplete - domInteractive |
| 白屏时间 | domInteractive - navigationStart |
| DOM Ready 耗时 | domContentLoadedEventEnd - navigationStart |
| 页面加载总耗时 | loadEventEnd - navigationStart |
用例
此外,还可以配置 Cookie 访问
4. Vue高阶组件封装
我们常用的 <transition> 和 <keep-alive> 就是一个高阶(抽象)组件。
所有的高阶(抽象)组件是通过定义 abstract 选项来声明的。高阶(抽象)组件不渲染真实 DOM 。 一个常规的抽象组件是这么写的:
4.1 防抖/节流 抽象组件
关于防抖和节流是啥就不赘述了。这里贴出组件代码:
改编自:Vue实现函数防抖组件
通过第三个参数 isDebounce 来控制切换防抖节流。 最后在 main.js 里引用:
使用:
使用:
抽象组件是一个接替Mixin实现抽象组件公共功能的好方法,不会因为组件的使用而污染DOM(添加并不想要的div标签等)、可以包裹任意的单一子元素等等
至于用不用抽象组件,就见仁见智了。
5. 性能优化:eventBus封装
中央事件总线eventBus的实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信。它是实现非父子组件通信的一种解决方案。
而 eventBus 实现也非常简单
我们在使用中经常最容易忽视,又必然不能忘记的东西,那就是: 清除事件总线 eventBus 。
不手动清除,它是一直会存在,这样当前执行时,会反复进入到接受数据的组件内操作获取数据,原本只执行一次的获取的操作将会有多次操作。本来只会触发并只执行一次,变成了多次,这个问题就非常严重。
当不断进行操作几分钟后,页面就会卡顿,并占用大量内存。
所以一般在vue生命周期 beforeDestroy 或者 destroyed 中,需要用vue实例的 $off 方法清除 eventBus
可当你有多个 eventBus 时,就需要重复性劳动 $off 销毁这件事儿。 这时候封装一个 eventBus 就是更佳的解决方案。
5.1 拥有生命周期的 eventBus
我们从Vue.init中可以得知:
每个Vue实例有自己的 _uid 作为唯一标识,因此我们让 EventBus 和_uid`关联起来,并将其改造:
实现来自:让在Vue中使用的EventBus也有生命周期
使用:
组件中使用:
6. webpack插件:真香
6.1 取代 uglifyjs 的 TerserPlugin
在二月初项目升级Vue-cli3时遇到了一个问题: uglifyjs 不再支持webpack4.0。找了一圈,在 Google 搜索里查到 TerserPlugin 这个插件。
我主要用到了其中这几个功能:
-
cache,启用文件缓存。 -
parallel,使用多进程并行来提高构建速度。 -
sourceMap,将错误消息位置映射到模块(储存着位置信息)。 -
drop_console,打包时剔除所有的console语句 -
drop_debugger,打包时剔除所有的debugger语句
作为一个管小组前端的懒B,很多时候写页面会遗留 console.log ,影响性能。设置个 drop_console 就非常香。以下配置亲测有效。
更多的配置请看Terser Plugin
6.2 双端开启 gzip
开启gzip压缩的好处是什么?
可以减小文件体积,传输速度更快。gzip是节省带宽和加快站点速度的有效方法。
-
服务端发送数据时可以配置 Content-Encoding:gzip,用户说明数据的压缩方式
-
客户端接受到数据后去检查对应字段的信息,就可以根据相应的格式去解码。
-
客户端请求时,可以用 Accept-Encoding:gzip,用户说明接受哪些压缩方法。
6.2.1 Webpack 开启 gzip
这里使用的插件为: CompressionWebpackPlugin
具体配置:
gzip后的大小从277KB到只有~91.2KB!
6.2.2 扩展知识: Nginx 的 gzip 设置
打开 /etc/nginx/conf.d 编写以下配置。
Nginx 尝试查找并发送文件 /path/to/bundle.js.gz 。如果该文件不存在,或者客户端不支持 gzip ,Nginx则会发送该文件的未压缩版本。
保存配置后,重新启动 Nginx :
6.2.3 如何验证 gzip ?
通过使用 curl 测试每个资源的请求响应,并检查 Content-Encoding :
显示 Content-Encoding:gzip ,即为 配置成功 。
求一份深圳的内推
目前本人在(又)准备跳槽,希望各位大佬和HR小姐姐可以内推一份靠谱的深圳前端岗位! 996.ICU 就算了。
-
微信:
huab119 -
邮箱:
454274033@qq.com
作者掘金文章总集
-
「从源码中学习」面试官都不知道的Vue题目答案
-
「从源码中学习」Vue源码中的JS骚操作
-
「从源码中学习」彻底理解Vue选项Props
-
「Vue实践」项目升级vue-cli3的正确姿势
-
为何你始终理解不了JavaScript作用域链?
公众号
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 武装你的小程序——开发流程指南
- 玫琳凯如何用新技术武装自己的“个性化”技能?
- 全副武装!Android UI 自动化测试在 RxImagePicker 中的实践历程
- 最强多层感知机?谷歌科学家用β-LASSO武装MLP,缩小与卷积网络的差距
- 前端科普系列(三):CommonJS 不是前端却革命了前端
- 前端科普系列(三):CommonJS 不是前端却革命了前端
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大连接
[美] 尼古拉斯•克里斯塔基斯(Nicholas A. Christakis)、[美] 詹姆斯•富勒(James H. Fowler) / 简学 / 中国人民大学出版社 / 2013-1 / 59.90元
[内容简介] 1. 本书是继《六度分隔》之后,社会科学领域最重要的作品。作者发现:相距三度之内是强连接,强连接可以引发行为;相聚超过三度是弱连接,弱连接只能传递信息。 2. 本书讲述了社会网络是如何形成的以及对人类现实行为的影响,如对人类的情绪、亲密关系、健康、经济的运行和政治的影响等,并特别指出,三度影响力(即朋友的朋友的朋友也能影响到你)是社会化网络的强连接原则,决定着社会化网络的......一起来看看 《大连接》 这本书的介绍吧!