Andy Dong
Andy Dong
对 bridge 的实现进行重新设计,用更好的方案解决一些固有的顽疾,并有效提升 bridge 的运行性能。 Bridge 目前存在的顽疾: 1. 实现逻辑大量依赖 QuickJS API,完全手动管理内存很容易出问题。 2. API 的实现依靠手写,大量重复性的体力活太多。 3. 核心 DOM 实现逻辑目前依然采用 QuickJS 的数据结构,性能表现不佳。 基于以上问题,采用一些新的设计思路方案: 1. [x] 将代码库进行拆分,划分出 core 和 bindings 目录,core 负责内部逻辑的实现,bindings 负责和...
## 使用场景 | Use case 现在面向客户端的 API (Java,Objective-C)相比 Dart API 所提供的功能还非常有限,需要同步 Dart API,提供相同的功能实现。 **添加的功能列表** + background + viewportWidth + viewportHeight + bundlePath + bundleContent + navigationDelegate + onLoadError + onLoad...
## 使用场景 | Use case 现在 kraken 上,给一个 Element 设置 style 的链路如下: 1. JS 执行 element.style['width'] = '100px' 2. 将 JSValue 复制一遍转成 NativeString,然后发送到 Dart 3. Dart 将 NativeString 复制一遍转成 Dart...
## 使用场景 | Use case Dart 侧 Element 层插入节点采用的数据结构是数组结构。然而在常见的业务场景中, appendChild 和 insertBefore 的操作非常常见。 这类的操作会不断触发 List 进行扩容,进而复制整个数组。 而数组带来的快速随机访问特性似乎一直没起到任何作用。因此采用双向链表数据结构更加简单高效。 ```dart List childNodes = []; ``` Chrome 的 Node 也是使用双向链表实现,并没有类似数组的数据结构。 并且 Chrome 缓存了最近的节点,用于快速节点访问操作。...
## 使用场景 | Use case mimalloc 是一款专门针对编程语言系统而设计的内存分配器,由 microsoft 开发。 由于 quickjs 中的 GC 会频繁针对引用计数来创建销毁对象,同时不存在多线程访问同一块内存的竞争问题。由于操作系统自带的 malloc 由于需要平衡各种场景,并不能在这些情况下做到性能最优。所以选择一款专门为编程语言设计的 malloc 就有很有价值。 https://github.com/microsoft/mimalloc https://www.microsoft.com/en-us/research/uploads/prod/2019/06/mimalloc-tr-v1.pdf mimalloc 具备的优点: 1. 本地 thread_local 的分配内存,多线程同时分配不竞争。 2. 更快的小空间内存分配和回收,适合于大量 JSObject 创建和销毁过程中的内存分配压力。...
## 使用场景 | Use case 通过一些业务场景的测试,发现 ObjectProperty 的耗时依然过大,目前在 createElement 的过程中,依然还存在四个地方调用 ObjectProperty: 1. https://github.com/openkraken/kraken/blob/main/bridge/bindings/qjs/dom/event_target.h#L87 2. https://github.com/openkraken/kraken/blob/main/bridge/bindings/qjs/dom/node.h#L116 这些功能可以使用一下类似的数据结构重新实现,可以不需要依赖 QuickJS API 的情况下实现功能,从而提升性能: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/heap/collection_support/heap_vector.h;l=18;drc=b0ca279cada36205f1d4a6e5f730f249ea07a6c0
I had a speech on RCRE at FDconf 2019 China in May 11. This is the keynote of my speech, speech video will be released in a few days. [业务实现标准化在中台领域的探索_20190508.pptx](https://github.com/andycall/RCRE/files/3175817/_20190508.pptx)
RCRE's documentation is currently written in English. Translations to other languages are currently hosted in [crowding](https://crowdin.com/project/rcre/settings#translations). If you want to contribute to the translation of other languages, please leave your...