Thoughts on SwiftUI vs. React, Vue, Flutter, etc.

很高兴看到 UI 开发的「范式」再一次实现了跨平台的大统一。

「用编程语言声明式表达 UI」部分,React,如 Jordan 所说 (“using the programming language itself to express the UI structure as a function of the varying inputs.”),应该是主要贡献,即使 swiftUI 没有说,”React(JSX) -> Flutter(Dart) -> SwiftUI” 这个影响链应该是被公认得,当然这个 idea 好像可以追溯到 P Wadler 或者 QT quick?但绝对是 React popularized (带火) 得。

「Reconciliation(即如何 patch 视图的更新)」 部分,基本上可以分为 functional update (setState) 和 data-binding(或 reactivity,或 observable 但并非类似 Rx 系基于 Stream 的observable……) 两个流派。后者因为能静态收集的依赖关系更多,在可能的(编译期)性能优化上要有优势得多。从这个角度上来说 SwiftUI 其实更接近 Vue(cc @尤雨溪 ) 或者更激进的 svelte,这个 idea 不知道要追溯到哪里…Knockout,WPF?

「状态管理 source of truth」部分,虽然大家通常认为 Redux 是 Flux 的变种,不过我觉得功劳显然应该来自 Redux 借鉴的 Elm(Elm 其实对上面也有功劳毕竟人家是以一种非 Stream 的新 FRP 作为卖点发表的 paper)……这个在 WWDC 上是从传统的 Event Bus 角度来引入的,再往上我就追溯不动了……

除此之外,swiftUI 倒是还一并包含了一堆各种社区里的亮点……

「性能」,类似 rust 用 struct 做 view 的 RAII,这个直接 ARC/GC 都省了

「类型」,view tree 是 statically typed 的,这个在此之前 Reason 做过尝试

「工具」,能看到 storyboard,framer,android studio 的影子但是 way better

「样式」,CSS in JS 迈出了一步, 但哪有重头搞来得漂亮啊,modifier 也比 HOF 好

其他补充,

– SwiftUI 在渲染 pipeline 上也能比 RN 省好几个步骤直接 talk to Metal

– 本来我以为 Android Kotlin 凭借更大更开放的社区应该走得更快,现在看来 Jetpack composer 完成度也比不了

– Facebook 主要用的 React-inspired 的 ComponentKit (iOS) 和 Litho (Android) 虽然都很成熟也开源但出于竞争对手关系注定成不了平台标准

– 考虑对 effects 隔离和复用,React Hooks 仍然是超前的部分,其他框架中好像还只能依赖设计模式(不确定)

所以 apple「拥有平台 + 拥有整个技术栈 + 闷声发大财」,能做的事情真得是很多。

欢迎指正,想到再更。

    原文作者:黄玄
    原文地址: https://zhuanlan.zhihu.com/p/68264279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞