简介:Hybrid App(混合模式移动应用)开发是指介于Web-app、Native-App这两者之间的一种开发模式,兼具「Native App 良好用户交互体验的优势」和「Web App 跨平台开发的优势」。很多人都知道,React Native 是 Facebook 开源的框架,可以直接用 Javascript 开发原生的APP,本文则会围绕开发中的具体实践问题进行讨论。

此前,我们在多篇文章中提到过 React Native,本次移动精英开发俱乐部又专门围绕 Hybrid App 和 React Native 进行更加深入的讨论,希望能够给我们的开发者同学,提供一些建议。文章系朱雅丽整理, IT 运维管理平台 OneAPM 负责审校。以下为讨论内容:

主持人-东辉:大家好,今天我们的主题是 Hybrid App 和 React Native,欢迎大家踊跃进行发言。

陈伟鹏-雅特iOS:我想知道用了 React Native 的同学,对这种技术的态度和评价?

郭镫鸿:貌似携程、平安科技还有天猫都在使用 React Native,说明还是有市场的。

主持人-东辉:React Native 在 Android 上的表现貌似不太好,坑比较多吧?

龙虾:React Native 的首次加载很慢,有缓存就好一些,其他的还可以,落地的难度就是不知道该客户端开发做,还是前端做。

郭镫鸿:React Native 有效解决了H5的性功能障碍问题,这点很不错。就像 React Native 的理念:leaReact Native once, write anywhere .

James:个人理解,React Native 的推出应该是为了统一移动端的开发模式。

罗飞:大家可以分享一下自己公司用 Hybrid 或 React Native 的现状,都是怎么用的?

利炳根:现状就是:大部分都可以用 React Native 做完,只有少部分需要原生支持。当然,也和我们的项目有关。因为我们现在做得功能都比较简单,我们主要工作都在处理一个问题:一个平台上显示好好的东西,同样的代码,在另一个平台上,就不行了。然后还有就是对不同的屏幕的适配,目前还没遇到特别难的东西,今天看看有没有人用来做大型成熟项目?学习一下经验。

Rory He:React Native 需要技术的学习成本其实更高一些。

frankphper:前端是不是因为 React Native 才变成「钱」端?

Kiss小锦:前几天看到阿里做了开源,效果参考淘宝、聚划算品牌团。https://github.com/alibaba/LuaViewSDK

其实,移动 APP 开发领域,要极致体验发布就不灵活(Native),要灵活发布就没有极致体验(H5)。有没有一种技术方案可以兼顾极致的体验和灵活的发布? LuaView 可以完美解决上述两个问题,不过需要学习 lua 语言。

主持人-东辉:大家也可以说实践、使用场景以及收益等问题。

Kiss小锦:使用场景一般是电商做大促活动需要灵活上线。

利炳根http://reactnative.cn/docs/0.21/getting-started.html 大家可以看看这里的文档,再买本入门书,一般的项目开发就差不多了。

杜鹏飞千锋安卓:直接用 WebView 和普通网页不更简单么?

郭镫鸿:如果那样的话,性能和功能都有问题。

Shawn:我认为目前 Hybrid 开发形式有三种:

1.原生开发一部分+H5开发一部分,通过 WebView 桥接;

  1. 纯 H5 开发,需要本地功能时通过第三方打包工具实现 如 HBuilder+ ;
  2. 用 H5 或 JS 开发,但最终编译成 Native 应用,如 ReactNative、APICloud、Cocos2d-js、Unity3D-js 等。还有种形式是 Webview+Runtime ,一般用在H5游戏加速,像腾讯 X5 浏览器、UC 等都内置了 Runtime;

jia_dongxu:可以用 cordova+ionic angular。v2 优化不少移动端,angular 也要出2了,据说优化移动,不知道 ionic2 和 angular2 正式版性能会不会提高很多?

真哥:不过,ionic 在安卓手机上性能不好。

郭镫鸿:ionic 有点卡,iOS 相对好些。

Shawn:移动端性能是个问题,传统的PC 端方案还是不要用在手机上了。

柴明昆:貌似Angular 2.0对Native Apps 的支持和渲染是基于 React Native 的,我们也是某个模块改动需求频繁,最近正在研究评估使用 React-Native。

James:ionic2 nightly 已经有了,ionic2 完全采用angularjs2 ,用的 typescript es6,在性能会很大改善 。angularjs2 对移动端也进行了优化,React Native 目前应该都是大厂或者小范围在使用。

真哥:对dom的操作太频繁,特别是双向数据绑定,不太现实。如果你需要快速迭代,可以考虑React Native,如果特别注重体验和性能,建议用原生。

利炳根:前段时间,有外包公司专门推 React Native,号称基本的东西都已经封装了一遍,如果真的能做到他们宣称的那个程度,开发一般的 APP 超级快。很多一般的 APP,核心的竞争力是业务上的,对 APP 本身倒是不在乎,怎么快怎么来。当然,大家未必乐意做这类开发。

之前有公司,做了一年快速迭代,找到了真的有用户愿意用的业务,才开始优化的,一开始优化,优化完发现没人用,就是个悲剧。

窦静轩:关键是需要自定义,还是需要 Native 开发,所以不会出现谁替代谁。想跑起来一个React Native 的项目没那么容易,还需要基本的 Node 知识 。

我麻不拿到温网冠军就不改名字:这样会不会导致大部分公司愿意用 React Native,从而减少开发成本?

利炳根:当然,这是公司的悲剧,开发人员倒是无所谓的,公司倒了可以去下一家,反正自己技术练到了。我们两天前来的新同事,已经负责 React Native 的动画开发了,总得来说,上手还是很容易的。

Shawn:也就是说大公司追求用户体验,如果不计成本和开发效率的话,还是会用原生来做。

真哥:React Native 也属于一种开发模式了,其实优缺点很明显,React Native 只能调用原生接口,但是不能对原生做扩展,要做扩展只能写 Native,React Native 比 ionic1 好一点,不过现在学习 ionic2 或者 angular2 需要去看看 typescript。

jia_dongxu:React Native 的缺点,Android 体验太差了,非常卡。

利炳根:卡的问题,需要把开发模式关了,会好非常多,然后,页面还是可以适当优化一下的。

窦静轩:如果说有一批人,把市面上流行的组件的都封装了, 并且开源了,那样推广的速度也会很快。

我麻不拿到温网冠军就不改名字:就是说如果需要自定义控件的时候,React Native 做不到?

真哥:是的,React Native 不能做接口开发。

窦静轩:React Native 提供自定义组件的方法,需要 Native 自己开发。

利炳根:把原生封一层给 React Native 用,安卓不是很了解,iOS 这块是非常简单的。当然也可能是因为我做的功能比较简单。

柴明昆:React Native 在使用 View 的时候,这些 View 是要经过本地定制的,并且将相关方法暴露给 JS ,这样 JS 端才能正常使用。

张春明:React Native 是否采用?我一般这么想:能否达到快速迭代,可以适应产品的各种变态修改(控件修改),有问题容易追踪定位,现阶段更倾向于混合开发,然后各取所需。

Shawn:所以说目前还没有一套完美的方案,也就是说需要原生来做的,我们就用原生好了,H5 优势的地方就用 H5,这才叫混合开发嘛!

郭镫鸿:React Native 在性能和功能上是没有问题的,主要学习曲线比较陡峭,会用的人少。

窦静轩:Hybrid 受限于 WebView 啊,WebView 如果有 Bug 你没辙啊。

龙志辉:天猫的部分业务不是已经用 React Native 改造了吗?

郭镫鸿:天猫对 React Native 进行了封装。

柴明昆:如果没记错的话,QQ 空间的发现模块,就是用的 React Native。

真哥:用什么技术既不影响性能,又达到了功能和提高用户体验?

窦静轩:我觉得用啥在于开发者决策,如果你为了一个广告活动页,去弄 React Native 和Hybrid ,真心不如一个 WebView H5 原生去搞。我是15年趟了一年 Hybrid 的坑,16开始趟React Native 的坑了。

龙志辉:本地加毛玻璃吧!其实编程的思路是一样的,React Native 或者 Hybrid 主要目的很多时候是为了突破客户端审核限制和达到代码复用的目的,避免一个相同的业务写三份代码(Android,iOS,Web)。

郭镫鸿:我发现12306用的动态库也绕开了苹果的审核。

真哥:其实我觉得 React Native 更像一种思想 ,并不只是代表一个框架,学习框架主要是学习作者的思想, 就比如 angular 。

窦静轩:对,是思想,组件式开发。

我麻不拿到温网冠军就不改名字:我觉得 React Native 做某些模块还行,但是如果说完全来代替原生,我觉得是不是太快夸张了?

真哥:其实都是 MVVM,替代不了,只是说能够在相对短的时间没做出接近同等效果对性能影响又不大,「分久必合,合久必分」,现在完全被推翻了,如果统一的话,也许就不会有这么多新的想法了。

龙志辉-iOS:每年 iOS 和 Android 系统更新都会开放一大票新的API,用第三方的始终会慢半拍,性能和用户体验在客户端是放在首位的。

Shawn:你看 Cocos2d 支持 JS 吧,Unity3d 官方推荐用 JS 吧,虽说目前 JS 面向对象不太彻底,你看 ECMAScript6 也发不了,JS 用起来就更爽了,关键是 React Native 默认支持 ES6。

汤涛:我觉得 React Native 或者 Hybrid 方案,适用于强运营类的产品,比如电商类,工具类这种暂时没必要,大家选择技术方案时可以参考。

龙志辉-iOS:不知道微信的应用号会使用什么技术?React Native?

James:微信的应用号用 JS,而且微信有 WebView。

龙志辉-iOS:那还是 Hybrid 啊,如果微信也把 JS 框架开源了,就是第二个 React Native 了。

Shawn:腾讯不会弃标准于不顾的,微信应用号绝对是 H5 崛起的时候。

龙志辉-iOS:其实我觉得 React Native 有点像 Cocos2d-x,把各个平台的组件封装一套,用C++一次编写,就可以移植到各个平台了。

罗飞:非常感谢大家的讨论,由于时间的原因,今天的讨论到此为止。后续我们还可以再进行更多的交流,再次感谢大家。

国内 ITOM 管理平台OneAPM 致力于帮助企业用户提供全栈式的性能管理以及 IT 运维管理服务,通过一个探针就能够完成日志分析、安全防护、APM 基础组件监控、集成报警以及大数据分析等功能。想阅读更多优秀文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

Hybrid App 和 React Native 开发那点事的更多相关文章

  1. 基于webview的Hybrid app和React Native及html5

    基于webview的Hybrid app和React Native及html5 React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iO ...

  2. 移动端学习之理解WEB APP、Native APP、Hybrid APP以及React Native/uniapp包括H5、小程序等的区别与共通之处

    因为工作需要,需要进一步了解移动端的开发,遂返回复习移动端的知识点,在开始学习之前,产生了疑惑WEB APP .Native APP .Hybrid APP.React Native.Uniapp.H ...

  3. React Native开发入门

    目录: 一.前言 二.什么是React Native 三.开发环境搭建 四.预备知识 五.最简单的React Native小程序 六.总结 七.参考资料   一.前言 虽然只是简单的了解了一下Reac ...

  4. React Native开发技术周报2

    (1).资讯 1.React Native 0.22_rc版本发布 添加了热自动重载功能 (2).技术文章 1.用 React Native 设计的第一个 iOS 应用 我们想为用户设计一款移动端的应 ...

  5. React Native开发技术周报1

    (一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...

  6. React Native 开发之 (02) 用Sublime 3作为React Native的开发IDE

    Sublime Text是一个代码编辑器.也是HTML和散文先进的文本编辑器.漂亮的用户界面和非凡的功能,例如:迷你地图,多选择Python插件,代码段等等.完全可自定义键绑定,菜单和工具栏等等.漂亮 ...

  7. React Native 开发笔记

    ReactNativeDemo 学习ReactNative开发,搭建ReactNative第一个项目 React Native 开发笔记 1.安装Homebrew $ /usr/bin/ruby -e ...

  8. React Native开发的通讯录应用

    React Native开发的通讯录应用(使用JavaScript开发原生iOS应用,vczero) 0.前言: 项目地址:https://github.com/vczero/React-Native ...

  9. iOS程序员的React Native开发工具集

    本文整理了React Native iOS开发过程中有用的工具.服务.测试.库以及网站等. 工具 你可以选择不同的开发环境:DECO.EXPO或者你可以使用Nuclide+Atom,目前我使用EXPO ...

随机推荐

  1. Oracle 一些操作

    Achivelog ============================ alter system set db_recovery_file_dest='F:\ORACLE\recovery_ar ...

  2. 169. Majority Element My Submissions Question

    Total Accepted: 95925 Total Submissions: 239241 Difficulty: Easy Given an array of size n, find the ...

  3. 直接拿来用,最火的.NET开源项目(beta)

    转自:http://blog.csdn.net/ltylove2007/article/details/18656971 综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面 ...

  4. 在SQL脚本中的注释引起的奇怪问题

    在数据库安装包中,我们通过osql.exe这个工具来对相关的数据库脚本进行更新,昨天突然发现安装包报错了,说脚本错误,但我们将脚本拿到数据库查询分析器中执行,一切OK. 问题出在哪里呢? 通过使用os ...

  5. iOS 非ARC基本内存管理系列 5-autorelease方法使用总结

    autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下 @autoreleasepool { Person *person = [[[Perso ...

  6. mysql 之路目录

    数据库介绍.常见分类 Mysql入门 Mysql安装配置 Mysql多实例安装配置 Mysql常用基本命令 Mysql数据库备份和恢复 Mysql日志 Mysql逻辑.物理备份和增量恢复 Mysql字 ...

  7. python 自动化之路 day 00 目录

    目录 初识Python Python基本数据类型 Python基础之函数 Python基础之杂货铺 模块 面向对象 网络编程 HTML CSS JavaScript DOM jQuery Web框架本 ...

  8. CCNA第三讲笔记

    TCP/IP可以分为四层或者五层 应用层.传输层.网络层.网络接口层 或者 应用层.传输层.网络层.数据链路层.物理层 与OSI相比 相同点:都有层次结构 不同点:TCP/IP的应用层包含了OSI的应 ...

  9. String.Format数字格式化输出 {0:N2} {0:D2} {0:C2

    //格式为sring输出 //   Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); //   Label2.Text = ...

  10. DEV GridControl表格数据源为空在表格中间显示提醒字符

    private static void gv_CustomDrawEmptyForeground(object sender, DevExpress.XtraGrid.Views.Base.Custo ...