Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分,
我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM;但 Vue 项目中仍然存在项目首屏优化、
Webpack 编译配置优化等问题,所以我们仍然需要去关注 Vue 项目性能方面的优化,
使项目具有更高效的性能、更好的用户体验。
<template>
<div class="home">
<ul>
<li
v-for="user in activeUsers"
:key="user.id">
{
{
user.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data(){
return {
users:[{
id:1,name:'zhangsan',isActive:true},{
id:2,name:'lisi',isActive:true},{
id:3,name:'wangwu',isActive:false},{
id:4,name:'maliu',isActive:true},]
}
},
computed: {
activeUsers: function () {
return this.users.filter(function (user) {
return user.isActive
})
}
}
}
</script>
1. 当我们需要进行数值计算,并且依赖于其它数据时,应该使用 computed,
因为可以利用 computed 的缓存特性,避免每次获取值时,都要重新计算;
2.当我们需要在数据变化时执行异步或开销较大的操作时,应该使用 watch,
使用 watch 选项允许我们执行异步操作 ( 访问一个 API ),
限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。
这些都是计算属性无法做到的。
随着项目功能的不断完善 代码的累积 项目中的庞大代码数量
造成我们打包时的长时间等待 尤其是我们在开发阶段留下的过多的测试代码
例如最常见不过的console 消耗我们的时间 并且占有一定的内存
安装插件
npm install babel-plugin-transform-remove-console --save-dev
const prodPlugins = []
if (process.env.NODE_ENV === 'production') {
prodPlugins.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: ['transform-remove-console']
}
这样配置后 再次打包 包中就没有console了
问题:当运行npm run serve时 也会删除console 但是开发阶段我们需要
改善babel.config文件:
现在 只有在打包时会删除console
项目中的默认入口文件时main.js文件 不管是打包 还是开发阶段使用的都是这一文件
在卡法阶段我们可能调用一端口返回假数据 为调试我们的代码 但是在上线后我们需要用正式接口
可能不止一个
但是我们左右手动更改较为麻烦 且容易出错
module.exports={
chainWebpack:config=>{
config.when(process.env.NODE_ENV === 'production',config=>{
config.entry('app').clear().add('./src/prod_env.js')
})
config.when(process.env.NODE_ENV === 'development',config=>{
config.entry('app').clear().add('./src/dev_env.js')
})
}
}
开发时,使用 npm run serve 命令,NODE_ENV 的值就是 developmnent ,所以会将 dev.env.js 作为入口文件
部署时,使用 npm run build 命令,NODE_ENV 的值就是 production,所以会将 prod_evn.js 作为入口文件
通常情况下 项目中通过import方式引入的包 会将整个包下载到客户端 这可能会导致程序的加载速度非常慢
将线上环境中用到一些依赖,比如 vue、vueRouter 、axios 等,
使用 cdn 节点的方式引用,而不是打到包里去
此项目中 将项目上线后仍然需要用到的一些依赖包从prod_evn.js文件中删然后在 public/index.html 中使用 cdn 节点引用
首先修改我们上线时的入口文件
然后在 public/index.html 中加入如下引用
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.core.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.snow.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.bubble.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/lib/theme-chalk/index.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.min.js"></script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-quill-editor.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.7.0/echarts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/index.js"></script>