1. 前言
所以我们在开发项目之前,最好先了解一下项目性能优化的几种方式,在项目初期就打好基础,以免后期维护过于麻烦。
这节课我们主要讲解一些性能优化的小建议,在项目开发之前最好看一看,知道开发的重点需要注意哪些地方。
2. uni-app 运行原理
视图层和逻辑层分离,减少了项目的耦合程度,并且逻辑层的运算不会影响到视图层的渲染,窗体动画会比较稳。而两层分离也有一个缺点,就是这两层互相通信会有损耗。
3. 性能优化建议
3.1 长列表优化
我们开发项目时,我们经常会循环长列表,将长列表中的数据逐一展示在项目中,但是你开发过程中,有没有出现过一旦数据过多项目加载会变得很慢的问题呢?
长列表的应用有许多需要我们注意的地方,或许你在开发过程中没有注意下面几个问题造成长列表加载过慢,我们来具体看看。
3.1.1 长列表差量数据更新
如果你长列表的数据中,每个列表都有可能差量更新,则需要将长列表中的每个 item 都做成一个组件。不然其中每个 item 更新,都会造成整个长列表的重新加载,严重良妃系统资源,我们来举个例子。
实例:
<template>
<view>
<view class="thumb" v-for="item in testdata">
<view>{{item}}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
testdata: ["评价1","评价2","评价3","评价4","评价5"]
}
}
}
</script>
<style>
.thumb{
text-align: center;
margin-top: 20px;
}
</style>
// thumbitem.vue 将每个 item 包装成组件
<template>
<view>
<!-- 显示 item 信息 -->
<view>{{item}}</view>
<!-- 点赞按钮,点击触发 thumb 方法 -->
<button @click="thumb(index)">点赞数:{{thumbs}}</button>
</view>
</template>
<script>
export default {
props:['item'],
data() {
return {
thumbs:
};
},
methods: {
// 每次触发 thumb 方法,点赞数 thumbs 变量就加 1
thumb(){
this.thumbs +=
}
}
}
</script>
3.1.2 长列表无差量数据更新
// index.vue 循环加载长列表
<template>
<view>
<view class="thumb" v-for="item in testdata">
<ThumbItem :item='item'></ThumbItem>
</view>
</view>
</template>
<script>
Import ThumbItem from "components/thumbitem/thumbitem.vue"
export default {
components: {
ThumbItem
},
data() {
return {
testdata: ["评价1","评价2","评价3","评价4","评价5"]
}
}
}
</script>
<style>
.thumb{
text-align: center;
margin-top: 20px;
}
</style>
我们在开发过程中,不需要每次都将长列表的 item 包装成组件,每个 item 需要差量数据更新的时候,才需要包装成组件。
组件在页面初始化时会占用更多的内存,并且遍历节点也会更慢,每个组件渲染时都会触发一次通信,太多组件就会阻塞通信。所以我们要将好刀用在刀刃上,不分情况到处使用反而会适得其反。深层节点的嵌套也是同样的道理,我们开发的时候要注意尽量避免深层节点嵌套。
在实际项目开发中,长列表一般是由逻辑层处理后返回的,数据是变化的,如果长列表中的数据需要展示在页面上,那么我们就将长列表定义在 data 中,如果变量不需要展示在视图中,我们尽量将变量定于在 data 外部。
因为data 中的数据每次发生变化,视图层都要重新渲染页面。这样做可以尽量避免资源的浪费,这条建议同样也适用于其他变量。
3.2 减少一次性加载的节点数量
所以如果数据过多,建议进行分页加载。比如:服务端要返回1000条数据,可以一次加载100条,500ms 后再进行下一次加载。
3.3 尽量避免两层频繁通信
3.3.1 scroll-view 组件的使用
3.3.2 图片、动画加载问题
3.4 使用nvue代替vue
因为 nvue 是基于 weex 的原生渲染,可以有效提高页面的流畅程度。
如果对项目启动速度有更高的要求,如果项目支持的话,甚至可以将项目设置为纯 nvue 项目,这样整个应用都使用原生渲染,不加载 webview 框架,这样项目的启动速度会更快。
4. 小结
本小节可以先浏览一遍项目开发中性能优化的这几个建议,大体记得哪些方面需要注意。等项目用到的时候,再来结合课程应用到实际项目中,这样也会理解的更加深刻。