ComponentKit 简介 ComponentKit 使用功能性和声明性(declarative)的方法来进行创建界面,和以往不同的是,ComponentKit 使用单向数据流的形式从 不可变的模型 News Feed 移植到 ComponentKit ComponentKit 极大地提升了 News Feed 的 UI 响应速度和稳定性,也让整个软件的内部编码更容易理解。 引入了 ComponentKit 之后,我们能够维护更少的代码,有更少的 bug 需要修复,有更大的测试覆盖率:我们现在可以有更多的时间做羞羞的事情了 ComponentKit 已经在生产环境的 News 很希望你也能在你的开发环境中使用 ComponentKit,然后给我们反馈。 我们重新定义了如何在 iOS 上开发界面,希望你也能用 ComponentKit 开发出更优雅的 App。 快速入门 ComponentKit 已经在 CocoaPods 中可用了,只需要在 Podfile 添加如下代码即可: pod 'ComponentKit', '~> 0.9' pod try ComponentKit
一、简介 ComponentKit是基于React思想的一个iOS原生UI开发框架。它通过函数式和声明的方式构建UI。目前用于Facebook的News Feed模块。 由上述设计思想,引出ComponentKit 三大特点 描述性 如上面例子,相对传统的构建UI(手工创建,设置属性,计算布局)。 这里虽然每次新建或者更新都会重建Component树,但是ComponentKit会计算新旧Component的差异,最小化更新UI。 如下图,5个Component只生成4个UI元素 ComponentKit内部还会对已有的UI进行复用。 ComponentKit 需要写 ObjC++,Swift 不支持 ObjC++ ,和Swift混编比较麻烦。 文章来自:QQ空间开发团队
基于这样的需求,我们重新盘点了市面上比较成熟的排版渲染引擎 ComponentKit,新的开发框架比如 React Native,甚至参考 Android 的排版系统。 针对这个场景,对比分析现有主流的界面开发库,分别是 Xcode 自带的 Storyboard/Xib,Facebook 主导的开源组件 ReactNative、ComponentKit,以及本文的 Pluto ● ComponentKit 跟 Pluto 其实很类似,区别最大的地方在于 Component 不支持 JSON/XML 这种静态表达样式的功能,以及事件动态绑定的功能。 我们有思考过在 ComponentKit 的基础上增加 JSON 表达样式的功能。但是 ComponentKit 直接使用了原生视图,并没有一个中间的虚拟视图层,所以性能上也是问题。改造成本太高。
基于这样的需求,我们重新盘点了市面上比较成熟的排版渲染引擎 ComponentKit,新的开发框架比如 React Native,甚至参考 Android 的排版系统。 针对这个场景,对比分析现有主流的界面开发库,分别是 Xcode 自带的 Storyboard/Xib,Facebook 主导的开源组件 ReactNative、ComponentKit,以及本文的 Pluto ● ComponentKit 跟 Pluto 其实很类似,区别最大的地方在于 Component 不支持 JSON/XML 这种静态表达样式的功能,以及事件动态绑定的功能。 我们有思考过在 ComponentKit 的基础上增加 JSON 表达样式的功能。但是 ComponentKit 直接使用了原生视图,并没有一个中间的虚拟视图层,所以性能上也是问题。改造成本太高。
基于这样的需求,我们重新盘点了市面上比较成熟的排版渲染引擎 ComponentKit,新的开发框架比如 React Native,甚至参考 Android 的排版系统。 针对这个场景,对比分析现有主流的界面开发库,分别是 Xcode 自带的 Storyboard/Xib,Facebook 主导的开源组件 ReactNative、ComponentKit,以及本文的 Pluto ComponentKit 跟 Pluto 其实很类似,区别最大的地方在于 Component 不支持 JSON/XML 这种静态表达样式的功能,以及事件动态绑定的功能。 我们有思考过在 ComponentKit 的基础上增加 JSON 表达样式的功能。但是 ComponentKit 直接使用了原生视图,并没有一个中间的虚拟视图层,所以性能上也是问题。改造成本太高。
脸书工程师随后实现了 ComponentKit,这是一个受 React 启发的声明性框架,用于定义 UI。 ComponentKit 使用了不可变数据,这简化了代码的推理,并提供了比以前实现高 50% 的性能。ComponentKit 在脸书上取得了巨大的成功,它仍然是创建 iOS UI 的默认选择。
在 2015 年完成了 iOS 版(ComponentKit),并在 2017 年推出了 Android 版(Litho)。 Native 0.59:发布 0.59,支持 React Hooks,升级 Android JSC,核心模块精简计划持续进行 Mobile Innovation with React Native, ComponentKit , and Litho:分享 Facebook 的移动技术栈(React Native + ComponentKit 和 Litho) Meet Hermes, a new JavaScript Engine
库的开发者可以集成Yoga进布局系统,例如FB已经将Yoga集成进ReactNative、Litho、ComponentKit,阿里的Weex也是使用Yoga来实现Flexbox布局的。
比如:ComponentKit,Yoga,AsynDisplayKit等,都是基于布局的设计。他们都有一个很明显的特点,就是都使用了 C++ 进行的算法编写。 同时上述开源库中,只有 ComponentKit 实现了声明式设计,OC 中繁琐的中括号和声明式多级的缩进结合起来,代码的可读性也大打折扣。
除了React Native、Weex外,Yoga还为很多其他的开源框架提供支持,比如Litho、ComponentKit等。
如果你不想手动调整 frame 等属性,你可以用一些工具方法替代(比如常见的 left/right/top/bottom/width/height 快捷属性),或者使用 ComponentKit、AsyncDisplayKit
Facebook 推出的 ComponentKit 就是很好的解决方案。 第二个问题。可以用 GCD 多线程操作将复杂的计算放到后端线程,并进行缓存。
成熟的解决方案有 Facebook 的 ComponentKit,Pinterest 的 Texture(前身是 ASDK ),以及 LinkdedIn 的 LayoutKit。
如果你不想手动调整 frame 等属性,你可以用一些工具方法替代(比如常见的 left/right/top/bottom/width/height 快捷属性),或者使用 ComponentKit、AsyncDisplayKit
如果你不想手动调整 frame 等属性,你可以用一些工具方法替代(比如常见的 left/right/top/bottom/width/height 快捷属性),或者使用 ComponentKit、AsyncDisplayKit
免责声明:ASDK不兼容 Interface Builder和AutoLayout,因此,您将不会在本教程中使用它们,虽然ASDK完全支持Swift(除了ComponentKit),许多开发者仍在使用
LeeGo.swift - 带来更声明式的,可配置的和易复用的UI开发方式,让UI开发变得像玩乐高积木一样简单直观,某种程度上取代ComponentKit。
在做 React Native 方案的同时,其实 Facebook 还在做一个 Objective-C++ 上类似 React 的框架 ComponentKit,以下是它的代码示例: @implementation
在做 React Native 方案的同时,其实 Facebook 还在做一个 Objective-C++ 上类似 React 的框架 ComponentKit,以下是它的代码示例: @implementation
如果你不想手动调整 frame 等属性,你可以用一些工具方法替代(比如常见的 left/right/top/bottom/width/height 快捷属性),或者使用 ComponentKit、AsyncDisplayKit