aot 执行前变成机器码 c c++ dart发布过程
jit 边编译变运行 pythony dart开发过程中
这个rn的话,它本质上是通过这个JAVA vm,对吧?这个JavaScript的一个虚拟机来调用原生的一个接口的,所以它通信起来的话。其实相对来说是比较低效的,
react gs对吧?这个gs叉儿,然后这个flex布局对吧?还有这个的话来做一些网络请求对吧?flex布局对吧?这个npm npm和no的话,这些就是node相关的一个东西了,还有red话是来做一些状态管理的
通过我们的JAVA,一个vm JAVA的一个虚拟机,然后之后的话再通过我们安卓或者iOS的一个桥接给它转成对应原生相关的一个API,转成对应原生的相关的API
它就是通过这个scare引擎,你记记清楚这个东西啊,这个东西的话是非常重要的,它是这个安卓的底层的话,是基于这个scare引擎,然后这个scare引擎的话,给我们的CPU和gpu提供数据,提供数据,然后呢,
这个CPU和gpu。再给它渲染出来对应的画面,然后最终的话,我们开发出来这个APP才给它显示出来了,
flutter的话,
我们也需要开发自己的APP,开发自己的APP的话,我们基于什么东西呢?我们是基于flutter的框框架,然后之后的话来写我们的der t相关的一个代码,也就是说这里的话我们写的是der t的一个代码,写完der t这个代码之后的话,经过我们的我们是基于这个flutter的框架的,所以是经过这个flutter的框架。进行一个翻译,经过翻译之后的话,然后呢,把对应的一些东西给到我们的scare scare的话,再给我们的CPU和gpu提供相关的一个数据,然后最终的话给它渲染出来对应的一个图片,
对应的一个图像,然后之后的话给它显示出来
但如果是rn呢rn的话,它就是这样的一个开发流程了,什么开发流程呢?我们开发这个app,开发这个app的时候,我们是基于什么东西呢?我们是基于这个JavaScript,JavaScript gs对吧?我们的gs叉对吧?还有我们的什么CSS对吧?它还包括一些很多其他相关的一个东西,对不对啊?还有这个react gs对吧?还有我们的一些其他东西吧,包包包括我们刚才说的这个呃re ducts。等等等,我们是基于很多这些东西,相关性东东西进行开发的,但是这些东西啊,它并不能说直接给我们的这个scare这样一个框架提供数据,它是不能这样来做的,它需要怎么做呢?它需要通过我们的两个东西,第一个东西的话就是我们的JavaScript的一个vm JavaScript的一个虚拟机,还有一个东西的话就是我们。原生对应东西的一个桥接它,必须通过这样一个桥接,桥接之后的话,把它转成原生相关的一个东西,转成原生相关的一个东西之后,然后呢,再由我们的原生给这个scare提供数据,提供数据之后的话scare,然后负责再生成我们对应的一个渲染数据给我们CPU和gpu,然后他们再生成对应的一个图像,然后之后的话,我们的屏幕再把这个图像给显显出来。所以很明显,在我们的这个位置,它是存在很大性能的一个消耗的很大性能,一个消耗啊,
第一个gpu gpu,它想表达什么意思呢?它其实想表达意思,
它是将信号同步到UI线程,将信号同步到UI线程。像什么样的一个信号,同步到UI线上呢?然后将我们的信号同步到这个UI线程之后的话UI线程之后的话,我们这个就会将我们的一个代码给它生成一个东西,叫做这个图层树,叫做layer layer tree对吧?生成一个图形树,
我们后面的话再讲flu这个v的时候我们也会讲到它对应的一个数,这样的一个结构啊,会讲到数这样结构,总之的话它会生成一个东西。叫图层数生成这样东西,生成这个东西之后的话,
图层数它会在gpu里面,在gpu这个线程里面的话,进行一个合成,合成之后的话,它就会把它合成的这个东西交给scare,交给scare,然后scare的话就会就会通过它的一个绘制,然后呢,把对应的一个数据再交给gpu gpu的话。
你看就是我这里还来不及对某一张图像显示,因为这里速度更快嘛,你这里还来。来不及对某一张图像进行显示的时候,这个时候它又生成了一张图像,而生成图像的时候它是怎么做呢?它是从上往下进行覆盖的,
从上往下进行覆盖的。那这个时候的话,有可能它这张图像啊,本来我应该是显示这张图像的,但因为我这里速率更快,所以呢,这一幅图像我正在从上往下一次性覆盖,那已经覆盖的时候的话诶,我上面覆盖了一部分了,但是下面这里的话还没完全覆盖完,这个时候我取出一张图像的话,很有可能就取出来的是我们的下一帧图像和上一帧图像的一个结合体,最后在这个位置进行一个显示了,很容易产生这个问题啊,
你可以通过这个锁对吧?通过这个锁的话,你就是在我这里还没有对对这个图像真正进行应用之前的话,我是不允许它写入的,对吧?在我这里在读取之前的话,我给给它上一把锁,上一把锁之后的话,别人就写入不了,
等我解锁之后的话,你再对这个东西做一个写入,那这个是没问题的,但是锁这个东西啊,它其实是非常消耗 它其实有个等待的一个时间,等待一个时间的话,其实它是相对来说是比较消耗性能的,而且你这个锁如果没有控制好的话,很容易出问题对吧?
有可能你这一幅图还没有显示完的时候,另外一幅图正在生成,那就有可能在这里最终显示的时候显示出来就是这一幅图像是包含两次的画面的,上面这里是下一次的画面,而下面这里的话是我们上一次的画面,出现这种问题。
vsync vertical 垂直
展示数据
export PATH=${FLUTTER_HOME}/bin:$PATH
export PATH=${FLUTTER_HOME}/bin/cache/dart-sdk/bin:$PATH
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"