本文是就Flutter
的数据更新形式来操做,而后经过以观测观测台的状态数据报告,来完成对代码执行效率的监控,并找到突破口。git
不论是Idea
仍是Android Studio
都提供了观测台的功能。 通常咱们使用的都是Observatory
的timeline
部分。 github
terminal
中输入
flutter run
,若是要使用真机测试则输入
flutter run --profile
。成功后会出现如图所示的网址,不过这个网址适合在Google浏览器中进行显示。
通常在timeline
中,咱们通常选用Flutter Developer
的选项。出现的渲染显示咱们通常会看到gpu
和ui
的渲染,以及重构过程。 浏览器
在性能优化以前,咱们须要知道Flutter
重构的逻辑。 在Android
中咱们知道绘制须要的三个步骤是 measure
、layout
、draw
。 而Flutter
对应的是build
、layout
、paint
。 他的重构是基于一种标脏和从新建立的方式进行的,因此咱们的性能影响通常来自于一个复杂界面的不断重建。可能你只须要修改一个很小的部分,也就是很小的一个子树须要进行修改,那么在代码没有规范的状况下,可能会出现整个界面的刷新,这样咱们的性能可能就要降低了数倍。 对于个人代码而言,就是整个界面的代码都获得了重建的,可是这是基于自己代码仍是简单的缘由,若是代码是很是复杂的,那会获得怎样毁灭性的结果,也是可想而知。性能优化
测试代码位于包
test
:WanAndroid-Flutteride
Timer
自动更新的。
int _num = 0;
@override
void initState() {
// TODO: implement initState
super.initState();
Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
_num = timer.tick;
});
});
}
复制代码
在initState()
函数中,咱们作了一件事情,就是一个初始化,而且这是一个每1s进行一次更新的。函数
在源码中,这个数据更新处于两种位置:Main页面、组件化的_buildBottom。组件化
![]() |
![]() |
---|
经过Observatory
的观测,咱们可以看到两种位置进行更新,他们重构所须要进行的步骤是彻底不同的程度的,更况且个人页面逻辑是处于一个还算简单的状态呢。post
以上就是个人学习成果,若是有什么我没有思考到的地方或是文章内存在错误,欢迎与我分享。性能
相关文章推荐: 手撕Flutter学习