美文网首页react-native
react-native简介

react-native简介

作者: MrAlexLee | 来源:发表于2019-03-13 14:48 被阅读0次

    背景介绍

    现有的app类型

    native-app

    概念

    指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的APP。可拓展性强,需要用户下载安装使用。

    优点

    用户体验优秀,性能稳定,操作速度快,设计出色的动效等,用户留存率高

    缺点

    分发成本高,维护成本高,更新缓慢,不同的平台,提交-审核-上线等流程(尤其是IOS),较为复杂。

    web-app

    web app是采用HTML5语言写出来的APP,不需要下载安装,生存在浏览器中的应用,基本上可以说是触屏版的网页应用。

    优点

    开发成本低,更新快,更新不需要通知用户,不需要手动升级,跨平台和终端

    缺点

    临时性的入口,设计受限制,体验较差,复杂的功能对硬件有高的要求

    hybird-app

    指的是本原生半Web的混合类APP,需要下载安装,看上去类似原生的native-app,但是只有很少的UI web view,用户访问的内容是web。相当于在web应用上嵌套了一层native-app的外壳。
    例如很多新闻类的APP,视频类的APP普遍采取的是native的框架,web的内容。
    hybird app极力去打造类似原生APP的体验,但是仍然受限于技术,网速等很多因素,尚不完美。

    react-native

    产出的并不是“网页应用”, 或者说“HTML5应用”,又或者“混合应用”。 最终产品是一个真正的移动应用,从使用感受上和用Objective-C或Java编写的应用相比几乎是无法区分的。 React Native所使用的基础UI组件和原生应用完全一致。

    优点

    1,hot loading模式可以让开发者省去漫长的编译过程,在应用运行状态下就可以做到热替换新代码。
    2,RN可以完美兼容使用OC、Java、swift编写的组件。如果需要针对应用的某一部分做代码优化,中途换成原生代码编写也比较容易。

    原理概述(iOS平台)

    首先,需要明白的一点是,即使使用了react-native,还是需要UIKit等框架。JS只是辅助,它只提供了配置信息和逻辑的处理结果。RN和hybird没有关系,它只是以JS的形式告诉OC应该执行什么代码。

    注:UIKit框架是界面相关操作组件集合,是iPhone应用程序开发中最基本的框架,也是用的最多最重要的框架。

    其次,react-native能运行起来,靠的是OC和JS的交互,JS是脚本语言,不会经过编译、链接等操作,而是在运行时动态的进行词法、语法分析,生成抽象语法树(AST)和字节码,然后右解释器负责执行或者使用JIT将字节码转化为机器码再执行。整个流程由JavaScript引擎负责完成。

    RN中如何使得JS代码能够“指挥”OC代码

    苹果提供了一个叫做JavaScript Core 的框架,这是一个JavaScript引擎。我们可以通过下面的这段代码简单的感受一下OC如何调用

    JSContext *context = [[JSContext alloc] init];
    JSValue *jsVal = [context evaluateScript:@"21+7"];
    int iVal = [jsVal toInt32];
    

    这里的JSContext指的是JS代码的运行环境,通过evaluateScript即可执行JS代码并获取返回结果。
    JS是单线程的语言,不具备自运行的能力,总是被调用。很多介绍RN的文章都会提到JS线程的概念,世界上,它表示的是OC创建了一个单独的线程,这个线程只用于执行JS代码,而且JS代码只会在这个线程中执行。

    OC与JS交互

    JavaScript Core 是面相OC的框架,在OC这一端,我们对JS上下文知根知底,可以很容易发获取到对象,方法等各种信息,包括调用JS函数。
    但是JS不知道OC有哪些方法可以调用,RN提供了一套通信机制,可以使得JS来调用OC并且得到结果后回调JS函数。

    通信机制

    未完待续

    相关文章

      网友评论

        本文标题:react-native简介

        本文链接:https://www.haomeiwen.com/subject/ttokoftx.html