什么是Flutter?
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。
其实也就是一种客户端的跨平台技术,相似的技术有RN、Weex、cordova、ionic、kotlin-native等等。(PS:大公司都有一个一统天下的想法啊!)。
RN、Weex、Flutter 有什么不同点?
一、RN:
1.Facebook出品,编程语言JavaScript;
2.采用三层来实现(其实就是JS调用原生来实现跨平台),如图:

1.JavaScript作为上层
2.其中 C++ 实现的动态连结库(.so),作为中间适配层桥接
3.原生作为下层
二、Weex:
1.阿里巴巴出品,编程语言JavaScript(支持Vue 和 Rax)
2.实现原理和RN一样,也是JS调用原生(这里就不多说了)
三、Flutter:
1.Google 出品,编程语言 Drat
2.通过Skia渲染的(Skia在2D方面比较强,3D有可能用的OpenGL)
Skia是一套底层渲染框架,自己渲染,不用再调用原生渲染;所以在兼容、扩展、速度方面会比RN和Weex强。
那么什么是渲染框架呢?
1.首先CPU处理逻辑和数据
2.然后交给GPU处理图形数据(包括展示什么内容,显示到屏幕的哪些地方(像素点))
3.然后在显示到屏幕上
通过上边的逻辑,一个开放人员,想让编写一个界面,然后需要掌握和硬件通话的能力(调用硬件通讯的接口),这是多么的繁琐和恐怖。
就这样“高级语言”应用而生,分装一个中间层,“高级语言”和硬件通讯,开发人员使用“高级语言”开发。
iOS调用图:

上边可以看出OpenGL/Metal + UIKit = "高级语言"
OpenGL 其实就是一个渲染框架,苹果原来使用的就是这个框架,现在改用metal框架
而上边提到的Skia 和OpenGL是一样功能
顺便来一张Flutter的图:

OpenGL 、Metal 、Skia有什么不同呢?
1.OpenGL:支持2D,3D;OpenGL最大好处是广泛的硬件兼容性,但为此做出的牺牲就是过大的系统开销(Drivers Overhead),最大问题即绘制调用(Draw Call)吞吐能力大大降低。
2.Metal : 支持2D,3D;苹果自己出品,肯定在iOS设备上秒OpenGL几条街(据说是4倍)
3.Skia:支持2D(好像不支持3D,不太确定)

所以他是一个优化过的2D库,比OpenGL效率高
这也就说明Flutter 在渲染方面会比原生更快(因为原生使用的是OpenGL,使用Metal的不太知道谁更胜一筹)
而安卓方面,使用的是 Skia + OpenGL (这个结论也不太确定,等大神来指正)

总结:
1.Flutter 使用的是Skia,而Skia又比OpenGL快,所以Flutter比使用OpenGL的原生快(更比RN和Weex快)
2.在2D方面是Flutter和Metal的天下,而3D方面是OpenGL和Metal的天下,那么Metal你要上天吗?[偷笑]
3.OpenGL在兼容性上是无敌的(支持的最广)
猜想:
1.因Skia不支持3D或者是支持的不好,导致安卓使用Skia+OpenGL双框架(或者只使用OpenGL)
2.也因为上边的这个原因导致的好多人说Dart使用的OpenGL渲染(Flutter中文网就说是OpenGL),而Flutter官方说是Skia
特别感谢:Hank 曾阿牛 余生
网友评论