Facebook发布React 16 专利条款改为MIT开源协议

9 月 26 日,用于构建 UI 的 JavaScript 库 React 16 的最新版本上线。

Facebook 最终在现有的两种 React 版本中选择了出现 bug 概率最少的一款。这次版本更新的最大看点是 React 重写了核心。

并如之前承诺的,将 React 16 JavaScript 库以及 GraphQL 查询语言的许可证从原来的 BSD + 专利条款改为更受欢迎的 MIT 许可证。

之前专门做了一个关于React.js例子的网站。推荐访问阅读:Reactjs Examples

作为最广泛使用的用于构建 Web 用户界面的基础框架,React 的这一许可证的修改得到了社区的强烈反响,虽然有些不同意见,但是大部分人还是表示喜闻乐见——一方面代表了社区的胜利,另外一方面也可以避免大量的采用 React 的项目重写。

Facebook 前端工程师 Andrew Clark 在博客上正式发布了 React 16,并展示了一些新特性,这些特性包括:

  1. render 函数可返回数组和字符串。不必增加嵌套了,数组需带有 key 属性。
  2. 更好的错误处理。现在你可以在组件内部出错时使用一个替代的 UI。
  3. Portal 函数。可以在 DOM 任意位置插入内容。现在想弹个对话框或 tooltip 更方便了。
  4. 超快的 SSR。React 16 改进了服务端渲染,据测试,相比 React 15.6.1,在不同版本的 Node 环境下可达到 5-10 倍的性能提升。
  5. 支持自定义的 DOM 属性。现在不用使用属性 whitelist 了,React 会将未知属性直接传到 DOM 中。
  6. 减小了库文件大小。现在的 React 核心库大小仅 5.3kb(gzip 后 2.2kb),相比原来缩减了 30%。
  7. 更改为 MIT 开源协议。上周 Facebook 发表博客表示怂了,从 React 16 开始更改为更宽松的 MIT 协议。对于某些不方便升级的 React 用户,还发布了 15.6.2 版本,也改用了 MIT 协议。

除了上面这些之外,React 16 变化最大的是因为使用了新引擎 React Fiber。

React Fiber 是对 React 核心架构的彻底重写,Fiber 是一种轻量的执行线程,依靠更高级的任务调度,实现协作式的多任务处理。

上面的大多数特性都是由 React Fiber 带来,并且它还让 异步渲染 成为了可能,采用了异步渲染以后 React 应用响应会更加灵活,主线程将不会被阻塞。

Facebook 的工程经理 Sophie Alpert 在一篇讲述架构变更的文章中写道,“这好比给一辆行进中的汽车更换引擎”:

我们在保持外部 API 不变的同时彻底重写了 React……数百个公司(包括 Facebook 在内)每天都在使用 React,我们希望在重写 React 时不会影响到他们。

Facebook 使用了功能开关(feature flag),这样 Fiber 和 Non-Fiber 版本就可以放在一起。他们运行单元测试,在 facebook.com 和 messenger.com 上运行新代码,以此来发现和减少软件缺陷,并驱动新渲染器的功能演进。

当然,重写是不完美的,可能会带来一些重大的变更。Clarks 说,这些变更”只会影响到一些不太常见的情况,我们不希望它们给大多数应用造成影响“。

时间: 2024-11-13 06:00:57

Facebook发布React 16 专利条款改为MIT开源协议的相关文章

Facebook发布React Native,用JavaScript开发移动原生应用

React.js Conf 2015会议上,Facebook发布了React Native,可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App.而且React Native已经用于生产环境——Facebook Groups iOS应用就是基于它开发的.Facebook也已确认,这个项目很快将会开源. 根据ProgVille的文章,React Native的原理是,在JavaScript中用React抽象操作系统原生的UI组件,代替DOM元素来渲染,

盘点 React 16.0 ~ 16.5 主要更新及其应用

目录 0. 生命周期函数的更新 1. 全新的 Content API 2. React Strict Mode 3. Portal 4. Refs 5. Fragment 6. 其他 7. 总结 生命周期函数的更新 随着 React 16.0 发布, React 采用了新的内核架构 Fiber,在新的架构中它将更新分为两个阶段:Render Parse 和 Commit Parse, 也由此引入了 getDerivedStateFromProps . getSnapshotBeforeUpdat

Facebook的React Native和google的Flutter要成熟些(Facebook的React Native之所以能打败谷歌的原因有7个)

在评估哪个框架最适合您的开发人员用于构建跨平台应用程序时,有很多问题需要回答. 谷歌的Flutter是Facebook的React Native框架的答案,开发人员不断地在哪一个上推动最佳结果.对于开发者来说,这是一个激动人心的时刻,因为两个软件巨头正试图竞争. 对于初创公司而言,创建可以轻松覆盖各种设备上的用户的移动应用程序变得越来越重要,并且使用可以跨这些应用程序和设备转换代码的中央框架对于任何开发团队都很重要. 但是,当您评估哪个框架最适合您的开发人员用于构建跨平台应用程序时,除了Face

iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK

新一代 iPhone 可能为进一步降低机身厚度而取消耳机插口,改用 Lightning 接口.iPhone 6c 传言,2016 年可能迎来两次 iPhone 发布会. 新闻 新一代 iPhone 可能取消耳机插口,改用 Lightning 接口:虽然距离下一代 iPhone 发售还遥遥无期,但是最近已经有关于这款 “iPhone 7” 的一些传言了.据称新一代 iPhone 为了进一步降低机身厚度,将淘汰掉现在事实的耳机行业标准的 3.5mm 耳机几口.耳机接口成为机身厚度的瓶颈已经有一段时间

[React] Render Elements Outside the Current React Tree using Portals in React 16

By default the React Component Tree directly maps to the DOM Tree. In some cases when you have UI elements like overlays or loading bars this can be limiting. React 16 therefor ships with the new portal feature allowing you to attach parts of the Com

[React] Call setState with null to Avoid Triggering an Update in React 16

Sometimes it’s desired to decide within an updater function if an update to re-render should be triggered. Calling .setState with null no longer triggers an update in React 16. This means we can decided if the state gets updated within our .setState 

恩布企业IM PC端,服务端发布 1.16 版本

恩布企业IM PC端,服务端发布1.16版本,开源企业IM,免费企业即时通讯软件:主要版本更新内容: 恩布服务端核心程序,增加进程守护保护机制,确保系统7*24持续稳定服务: 服务端增加内存数据库同步机制,减少直接操作数据库,提高系统性能: PC客户端优化界面和操作体验,如增加联系人移到其他分组,完善在线人数显示等: 完善数据回调同步机制,实现注册用户,修改密码和用户上下线数据同步,支持HTTPS连接和数据加密: 增加部分REST API接口:解决已知BUG,提高系统性能: 最新1.16版本百度

[React] Reference a node using createRef() in React 16.3

In this lesson, we look at where we came from with refs in React. Starting with the deprecated string ref pattern, callback refs, and then how to use the new createRef() method in React 16.3. Additional Resources: refs and the dom You can use 'React.

React(^16.8) 新增特性Hook

Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. hook包含以下函数:useState, useEffect, useContext, useReducer, useMemo, useRef等.引入方式: import {useState, useEffec ...} from 'react'; 1. let [参数名称, 修改参数的方法名] = useState(参数默认值); import React,