跨端性能、原理对比

一、 cordava

一般只提供了一些基础的 api 。也可以通过开发自己扩展。性能相对较差。

二、webview bridge


三、react native


在原生代码中运行js代码,javascriptcore 

优点

复用了 React 的思想,有利于前端开发者涉足移动端。

能够利用 JavaScript 动态更新的特性,快速迭代。

相比于原生平台,开发速度更快,相比于 Hybrid 框架,性能更好。

缺点

做不到Write once, Run everywhere,也就是说开发者依然需要为 iOS 和 Android 平台提供两套不同的代码,比如参考官方文档可以发现不少组件和API都区分了 Android 和 iOS 版本。即使是共用组件,也会有平台独享的函数。

不能做到完全屏蔽 iOS 端或 Android 的细节,前端开发者必须对原生平台有所了解。加重了学习成本。对于移动端开发者来说,完全不具备用 React Native 开发的能力。

由于 Objective-C 与 JavaScript 之间切换存在固定的时间开销,所以性能必定不及原生。比如目前的官方版本无法做到 UItableview(ListView) 的视图重用,因为滑动过程中,视图重用需要在异步线程中执行,速度太慢。这也就导致随着 Cell 数量的增加,占用的内存也线性增加


四、flutter


补充

1、什么是 JSCore

JavaScriptCore(之后简称 JSCore)是一个开源的框架,是 WebKit 的一部分,用最简单的话描述这个框架,它大概提供了两种能力:

在原生代码里面执行 JavaScript,而不用通过浏览器

把原生对象注入到 JavaScript 环境里面去

上面这两句话归纳一下就是:提供了 JS 代码与原生代码交互的能力,通过 JSCore 可以更好的进行两端的对象暴露,这使得代码可以不断地在 JS 环境和原生环境穿梭。

2、JSBridge 到底是什么?api 是怎样被注入的?

bridge 可以说是一种双端通信的理念。分 webview 和 jscore 两个场景。webview 中实现方式主要是 api 注入 和 scheme 拦截。

api 的注入是通过 webview  提供的一些编程接口注入的,可能需要看浏览器的实现原理。

总结:

cordava、hybrid、rn   都依赖了 bridge,flutter 运用了 dart 语言开发,在我看来是真正的跨端。

cordava 一般是全 h5 开发,以 webview 形式展现

hybrid 一般是 native 和 webview 两种共存

rn 运行时并没有 webview,而是通过 jscore 去运行 js。rn 支持完全用 rn 去开发一个 app, 也支持与现有的 app 结合。

flutter


参考及转载:

https://www.jianshu.com/p/82a28c8b673b

https://juejin.im/post/5abca877f265da238155b6bc

你可能感兴趣的:(跨端性能、原理对比)