美文网首页
Flutter 开篇

Flutter 开篇

作者: Ray_lawq | 来源:发表于2019-07-25 19:01 被阅读0次

什么是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 曾阿牛 余生

相关文章

网友评论

      本文标题:Flutter 开篇

      本文链接:https://www.haomeiwen.com/subject/petkrctx.html