Android开发/iOS来发/flutter开发/跨平台开发

Flutter学习之路(1)

2019-07-26  本文已影响0人  楼上那位

React Native: Learn once,Write anywhere!

Java: Write once, Run anywhere!

跨平台的方案发展历史

JS 消息队列.png

Javascript 是单线程,但是不代表他就是在一个单线程中完成 html 解析、 构建Dom树和Render树 、布局、 绘制等等一系列的操作。这些操作是由浏览器内核在多个线程的协同写完成的,比如: GUI 渲染线程、JS引擎线程、事件触发线程、定时器线程、异步请求线程...

JS引擎执行异步代码而不用等待,是因有为有 消息队列和事件循环. 消息就是注册异步任务时添加的回调函数

主线程在执行完当前循环中的所有代码后,就会到消息队列取出这条消息(也就是message函数),并执行它。到此为止,就完成了工作线程对主线程的通知,回调函数也就得到了执行。如果一开始主线程就没有提供回调函数,AJAX线程在收到HTTP响应后,也就没必要通知主线程,从而也没必要往消息队列放消息
Dart 是怎样实现并发的呢?在Flutter 中引入了isolate 的概念,isolate(隔离区)与常规的线程有较大的区别(线程之间不共享内存)可以视为一个Worker,每一个Worker中维护着MicroTask 和 Event 队列,执行逻辑如下图:

isolate 线程.png

更多细节我们后续有专门的章节为大家讲解。

Dart 与 Javascript的优势在哪里?
  1. Javascript 优势在于 标准统一, 应用范围广,正如Atwood 定律描述: 凡是能用Javascript写出来的系统,最终都会用Javascript写出来。目前由于Node.js 、Vue、React、Angular等框架的出现,让Javascript成了前后端通吃的全栈开发语言。 Javascript 借鉴了其他语言的特性: 函数是一等公民原型链等...

  2. Dart 是Google Fuchsia系统的官方开发语言,能够解决Javascript本身存在的缺陷

Google 为何不直接采用Javascript作为跨平台开发语言而是采用Dart?
Flutter 会支持热更新

Flutter高性能的其中一个重要因素就是因为Dart在发布期是AOT,目前阶段支持的可能性比较小, 另外苹果也不允许除了JSCore之外的其他动态编译/解释执行环境。

Flutter 为何不支持直接操作摄像机、GPS等硬件?

按照我们的理解做一个APP大部分业务功能都是页面的布局渲染,很少牵涉到调用摄像机等底层的硬件设备。如果Flutter 作为一个UI渲染引擎,也要做这个的话其实就是做了一个操作系统了。

什么时候用Native 开发?什么时候用Flutter开发 ?

原生适用于需要频繁与操作系统底层能力进行交互, 大部分纯渲染交互的场景用Flutter就可以了

当前跨平台方案的对比

img

Tips

  1. 怎样判断一门语言是否是AOT还是JIT? 通常来说,看代码在执行前是否需要编译即可。如果需要编译,通常属于 AOT;如果不需要,则属于 JIT. AOT 的典型代表是 C/C++,它们必须在执行前编译成机器码; 而JIT 的代表则包含了如 lua、Javascript 、Python 等几乎所有的脚本语言

  2. 怎样判断一个技术能否成为大前端的主流? 判断一个技术是否能成为未来大前端主流技术发展的趋势,主要参考以下几方面:

    • 是否能减少对底层宿主环境的依赖
    • 能否隔离各终端系统差异
    • 能否从原理和运行机制及生态等方面优于现有技术,或者为现有技术瓶颈提供新的解决方案
    • 能够为开发者提供统一且标准化的能力
  3. 跨平台方案的选择要注意的方面
    不能仅仅依赖编程语言、性能、技术架构等因素,要从开发效率、社区活跃度社区支持、构建发布、CI等工程化方面考虑

大前端的永恒主题: 效率、质量、性能 用尽量完整的技术栈和工具链去隔离各终端系统差异,向开发者提供统一而标准化的能力。结合这三大主题看看新技术是否能够推动去解决业务现阶段的实际问题,以及具体的落地场景。如果只是把”完成“落地作为目标,而忽略了我们具体要通过它去解决什么问题,可能是本末倒置了,所以我们要有升维思考 降维打击的思考力。

到此我们已经了解了Flutter 相关的背景知识,留给大家一个问题:Flutter是如何渲染的?

参考链接:

Flutter's Rendering Pipeline
深入理解跨平台方案的历史发展逻辑
React Native、Flutter等跨平台方案怎么选?
Android中的AOT、JIT
Code Push / Hot Update / out of band updates
javac 编译与JIT编译
Flutter热更新与热加载

上一篇 下一篇

猜你喜欢

热点阅读