转自:http://mt.sohu.com/20150915/n421177212.shtml

  

  

  Facebook 创建了React Java 库,这样,Facebook 的工程团队就可以用相同的代码给iOS、安卓和网页开发界面了。现在,Facebook 通过开源 React“三部曲”中的最后一部分—— 安卓版 React Native (React Native For Android),将应用开发的超级力量赋予每个人。

  Facebook 先是在 2013 年将 React 开源,接着又在今年初的F8 开发者大会上将 React Native 开源。但是,Android 版本意味着,熟悉 React 技术的工程师将可以为每个主要平台开发应用了。如此一来,创业公司和大型科技公司就不必像现在这样拥有那么多工程师了,也不必再为招聘精通iOS 和安卓开发技术的工程师而感到担忧了——iOS 和安卓是两种截然不同的代码库。反过来,这又可以帮助加快团队开发新功能的步伐,进而缩短从iOS 版发布到植入安卓平台之间的时间。

  今天,在一年一度的@Scale 大会上,Facebook 宣布将开源安卓版 React Native 。来自 Facebook、Twitter、谷歌、Box、Pinterest 和微软等公司的 1800 名高管和工程师齐聚本次大会,就如何改善他们的工程和基础设施进行合作。与会的公司们已总计对 4500 多个开源项目做出了贡献。

  为何选择开源?

  大家或许想知道,Facebook 为何要送出一份像 React 这样强大技术的礼物呢?毕竟,Facebook 完全可以自己利用这项技术,在与其他社交网站竞争时在工程方面获得优势地位。对此,Facebook 工程经理汤姆·奥基诺(Tom Occhino)给出了以下三个主要原因:

  社区贡献——“从功能到漏洞查找,开发者社区对我们公司的发展做出了重大贡献。” 人才招聘——“人们确实有兴趣学习像 Facebook 等大平台采用的技术。人们很高兴加入打造这种技术的团队中。” 吸引工程师加盟——“这让有意加盟 Facebook 的每一位工程师占据了先机,因为他们已经了解了我们的构架。”

  基本上,Facebook 通过开源得到的东西远远超过失去的东西,同时还显示出它无私的一面,毕竟这种举动与 Facebook 连接世界的愿景相符。奥基诺说:“单凭 Facebook 一家公司的力量无法开发所有的软件。我们能做的最好的事情就是,向开发者提供工具,让他们进一步推进这一使命。”

  “一次学会,到处可用”

  长期以来,跨平台开发的“圣杯”始终是“一次编码,到处运行”(code once, run anywhere),但是,由于网页、iOS、安卓等平台之间存在着重大不同,这一目标根本无法实现。但是,React 在三个平台中植入了一个抽象层(level of abstraction),这样,你只要一次学会 React,就可以到处编写应用了。

  举例来说,今年早些时候 Facebook 给iOS 和安卓两大平台开发了一款原生 Ads Manage 应用,得益于 React 技术,开发时间仅仅是之前预期的一半。Facebook 原本预计开发这款应用的时间为 18 个月,但它用时 5 个月开发出了iOS 版应用,然后又在 3 个月内将其移植到安卓平台。

  这项技术还能让 Facebook 重拾“快速行动”(Move fast)的理念,这种理念还是在 Facebook 只是一个完全基于网页的平台时提倡的,当时它不断发布代码,测试新功能。随着 Facebook 开始拥抱移动时代,它不得不对工程团队做出分工,让不同的专家从事网页端、iOS 和安卓等三个平台的应用开发。

  Facebook 工程经理奥利维亚·比肖普(Olivia Bishop)告诉我,没有 React 技术,“应用很难快速迭代,因为每次你做出调整的时候,都必须重新编译应用,将它放在设备上进行测试。”由于代码可以重复利用,React 可以大大节省应用迭代时间。

  一旦开发者社区熟悉了 React Native 的用法,它可以让“精益创业”(lean startup)的理念更易于执行。所有开发者并不是牺牲跨平台支持或是因为对现状不满而试水新的操作系统,相反,他们可以迅速看到应用的运行机制。当他们用 React 发现了有问题的东西后,也可以用它来改进 Facebook 的体验。

  Facebook 工程主管亚当·沃夫(Adam Woff)最后表示:“我将开源比作进化或腐蚀这样的长期进程。随着时间的推移,一定会获得回报的——我们对开源的投资可以确保软件保持相关性。”让软件始终留在一家公司,可以导致危险的迭代停滞。“随着时间推移,这种固步自封的做法会破坏专属软件堆栈,对公司带来伤害。”

  翻译:皓岳

  Facebook Open Sources React Native For Android So Devs Can Reuse Code Across Web And iOS

Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发的更多相关文章

  1. 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  2. 看Facebook是如何优化React Native性能

    原文出处: facebook   译文出处:@Siva海浪高 该文章翻译自Facebook官方博客,传送门 React Native 允许我们运用 React 和 Relay 提供的声明式的编程模型, ...

  3. React Native调试实用技巧,React Native开发者必会的调试技巧

    在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...

  4. react native 升级到0.31.0的相关问题 mac xcode开发环境

    cmd + D和cmd + R快捷键没有反应 0.31.0版本换了一种加载方式,通过修改userDefaults达到debug目的 [userDefaults setObject:@"127 ...

  5. React Native指南汇集了各类react-native学习资源、开源App和组件

    来自:https://github.com/ele828/react-native-guide React Native指南汇集了各类react-native学习资源.开源App和组件 React-N ...

  6. 配置React Native 安卓开发环境

    配置主要分为以下几步: 安装node.js 安装AndroidStudio 安装React Native命令行工具 搭建React Native版本的Hello World,修改代码查看效果 第一步 ...

  7. [译] Facebook:我们是如何构建第一个跨平台的 React Native APP

    英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...

  8. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  9. React Native – 使用 JavaScript 开发原生应用

    前不久,Facebook 在F8开发者大会上正式开源了 React Native 项目.不过目前只有 iOS 版,Android 版还需要再等一段时间,这是最新的用 JavaScript 语言开发原生 ...

随机推荐

  1. wdcp-apache开启KeepAlive提高响应速度

    因为我们的网站,媒体文件,js文件,css文件等都在同一个服务器上,并且,我们网站有非常多的图片,所以当建立好tcp链接之后,不应该马上关闭连接,因为每建立一次连接还要进行dns解析,以及启动一个ht ...

  2. day2练习题

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  3. jquery $(this).attr $(this).val方法使用介绍--useful

    $(this).attr(key); 获取节点属性名的值,相当于getAttribute(key)方法,本文整理了一些相关的示例,感兴趣的朋友可以参考下 $(this).attr(key); 获取节点 ...

  4. 计算广义积分$$\int_0^{+\infty}\cos x^p {\rm d}x,\int_0^{+\infty}\sin x^p {\rm d}x, p>1$$

    ${\bf 解:}$ 在角状域$G=\{z\in\mathbb{C}|0<{\rm Arg}z<\frac{\pi}{2p}\}$上引入辅助函数$e^{iz^p}$, 其中$z^p=|z| ...

  5. Pair of Numbers

    Codeforces Round #209 (Div. 2) D:http://codeforces.com/contest/359/problem/D 题意:给以一个n个数的序列,然后问你最大的区间 ...

  6. Android Studio使用远程依赖时下载不了jar包的解决方法

    使用AS很大的一个好处就是可以使用在线jar包,只需在引用jar包的时候在版本后加上+,比如: compile 'com.facebook.fresco:fresco:0.1.0+' 这样不用在jar ...

  7. UVA 10706 Number Sequence (找规律 + 打表 + 查找)

    Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...

  8. Oracle预估的基数算法

    SQL> create table t as select * from dba_objects; Table created. SQL> create index idx_t on t( ...

  9. c# 绘图常用对象和方法

    //BitMap 位图,常用的方法,     Save:主要方式有:(1)保存在图像文件里,可以指定格式[gif,bmp]:(2) 保存在流中,以指定格式[gif,bmp]         //gra ...

  10. The Same Game(模拟)

    http://poj.org/problem?id=1027 题意:给一个10*15的地图,里面填充R,G,B三种颜色,每次找到当前地图的同色最大区域M,并将其删除,删除M后,上面的小球自然下落,当有 ...