Nerv 是一款由京东凹凸实验室打造的类 React 前端框架。目前已广泛运用在京东商城(JD.COM)核心业务及TOPLIFE全站。Nerv 基于React标准,使用 Virtual Dom 技术,拥有和 React 一致的 API 与生命周期,如果你已经对 React 使用非常熟悉,那么使用 Nerv 开发对你来说绝对是零学习成本。

与此同时,相比于 React 以及市面其他同类型框架,Nerv 更具体积轻量,性能高效的特点。并且,它符合当下国情,可以完美兼容 IE8 及以上浏览器。

  • 官网:https://nerv.aotu.io/
  • 文档:https://nervjs.github.io/docs/
  • GitHub:https://github.com/NervJS/nerv

特性

  • 更小的体积:
    Gzip 后仅有9k,不到 React 三分之一的体积,低性能设备也能高速地加载并解析执行。

  • 更高的性能:
    高效、同步的 diff 算法和诸多优化策略使得 Nerv 成为性能最高的前端框架之一。

  • 完备的生态:
    无需 nerv-compat,只需要在稍稍设置就能享受整个 React 生态的共同成果。

  • 更一致的渲染:
    不仅在浏览器上能高效地渲染,在服务器上 Nerv 同样能高效地运行。

  • 更优的兼容:
    和大多数现代框架不同,Nerv 将继续保持对 IE8 的兼容。

  • 更具说服力的案例:
    不管是京东首页的高流量,还是 Toplife 的复杂业务,Nerv 都经受住了来自于真实业务的考验。

性能

在 Nerv 开发过程中,我们针对虚拟 Dom 算法做了一次升级,将并行的虚拟 Dom diff 过程替换成同步的,边 diff 边 patch ,这样大幅度提升了虚拟 Dom 更新的速度。同时我们还对diff算法进行了探索升级,参照目前市面上最快的虚拟 Dom 算法对我们的代码进行了改造。

经过重构升级后,我们的框架性能大幅提升,如下可见。

更多性能数据详见官网。

项目背景

是的,我们又造了一个轮子,也是一次抛离传统开发模式的技术革新。同行们或许有疑问,目前市面上已经有非常多的同类型技术框架,为什么我们还要不厌其烦地打造一个呢?这当然不是在做无用功。

日常开发中,相对于 Vue ,我们更倾向于选择 React 模式作为我们的开发标准,因为 React 天生组件化且函数式编程的方式,更加灵活且便于维护。
然而,React 仍然有一些不能满足我们需求的地方:

  • IE8 浏览器兼容性:当前环境所限,即便很不情愿,我们仍然要支持 IE8。
  • 体积:React 大概 130kb 的体积。在低网速 / 低版本浏览器 / 低配置设备的加载速度和解析速度都不能让我们满意。
  • 性能:React 的 Virtual Dom 算法(React 自己叫 Reconciler)并没有做太多的优化。

而我们的新轮子 —— Nerv,它完全能提供上述 React 的所有优点,并且它也能完全满足我们自己的需求:更好的兼容性、更小的体积、更高的性能。

安装

推荐使用 npm 的方式进行开发,享受 Node 生态圈和 Webpack 工具链带来的便利。

1
npm install nervjs --save

简单示例

下面是一个计时器的例子。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
import Nerv from 'nervjs'

class Counter extends Nerv.Component {  setTime = () => {    const date = new Date()    const year = date.getFullYear()    const month = date.getMonth() + 1    const day = date.getDay()    const hour = date.getHours()    const minute = date.getMinutes()    const sec = date.getSeconds()    this.setState({      year,      month,      day,      hour,      minute,      sec    })  }

  componentWillMount () {    this.setTime()  }

  componentWillUnmount () {    clearInterval(this.interval)  }

  componentDidMount () {    this.interval = setInterval(this.setTime, 1000)  }

  componentWillReceiveProps () {    this.setTime()  }

  render () {    const { year, month, day, hour, minute, sec } = this.state    return (      <div className='counter'>        <span>The time is</span>{year}-{month}-{day} {hour}:{minute}:{sec}      </div>    )  }}

export default Counter

更多详细例子可阅读文档NervJs了解。

写在最后

秉承万维网的开放精神,以及开源世界的信条,我们接受各种评价和讨论,最终目标是为开源世界贡献我们的一份力,感恩!
欢迎各位同行使用 Nerv,如果你在使用过程中遇到问题,或者有好的建议,欢迎给我们提Issue 或者 Pull Request。

结尾小彩蛋>> 一个视频带你看懂Nerv

javascript library react nerv
Web开发
感谢您的阅读,本文由 凹凸实验室 版权所有。如若转载,请注明出处:凹凸实验室(https://aotu.io/notes/2018/03/22/nerv/)
上次更新:2019-04-20 19:28:31

Nerv - 京东高性能前端框架相关推荐

  1. MUI(最接近原生APP体验的高性能前端框架)

    MUI-最接近原生APP体验的高性能前端框架MUI: 最接近原生APP体验的高性能前端框架https://dev.dcloud.net.cn/mui/ 最接近原生APP体验的高性能前端框架,追求性能体 ...

  2. 最接近原生APP体验的高性能前端框架——MUI

      前  言 MUI有三大特点: 轻量 追求性能体验,是我们开始启动MUI项目的首要目标,轻量必然是重要特征: MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K 原生UI ...

  3. 最接近原生APP体验的高性能前端框架 Mui的入门教程

    因为之前我用vue和uni-app 都开发过h5移动端 但总觉得有点不太流畅 最后还是选择了使用Mui进行app的开发 上手很快 js语法类似jquery的使用 css样式 类似于bootstrap ...

  4. 最接近原生APP体验的高性能前端框架-MUI

      前  言 轻量,原生UI,流畅体验,是MUI的三个特征.   1. 新手指南 快速体验 1. 下载Hello mui App 下载已打包好的Hello mui 手机app,直接在手机上体验mui的 ...

  5. 基于京东micro-app微前端框架的项目实践

    1.微前端应用介绍 1.1.微前端概念 微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独 ...

  6. 极简微前端框架-京东MicroApp开源了

    前言 MicroApp是一款基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它是目前市面上接入微前端成本最低的 ...

  7. 写在2021: 值得关注/学习的前端框架和工具库

    前言 最近在知乎看到了这么个问题:学完Vue还有必要学习React和Node吗?[1], 有很奇妙的感觉,因为我在最开始入门前端时,也是以Vue入的门,在"学完"Vue之后, 我也 ...

  8. 十大新兴前端框架大盘点【云图智联】展望2020

    2019年在整体上,前端的主流框架没有太大的变化,业务代码仍由三大框架(React.Vue.Angular)所主宰着,打包工具一般仍使用webpack.Rollup.js,状态管理器还是Redux.M ...

  9. 盘点2019最新前端框架

    盘点2019最新前端框架 2019年在整体上,前端的主流框架没有太大的变化,业务代码仍由三大框架(React.Vue.Angular)所主宰着,打包工具一般仍使用webpack.Rollup.js,状 ...

  10. 程序员Web面试之前端框架等知识

    基于前面2篇博客: 程序员Web面试之jQuery 程序员Web面试之JSON 您已经可以顺利进入Web开发的大门. 但是要动手干,还需要了解一些已有的前端框架.UI套件,即要站在巨人肩膀上而不是从轮 ...

最新文章

  1. AI框架精要:设计思想
  2. [Mongodb]删除指定字段
  3. boost::container模块实现节点句柄的测试程序
  4. 实现一个靠左靠右靠中间的listview
  5. php下载 微信头像图片_php 下载微信头像
  6. 【kafka】produce response correlation id xxx on topic-partition retrying Error: NETWORK_EXCEPTION
  7. 如何从0开发一个Atom组件
  8. 时间序列分析python课程论文_python时间序列分析
  9. python 绘图sns.distplot
  10. jav中jar包的MANIFEST.MF
  11. 2018深信服java笔试题_深信服2018春招笔试题解
  12. 髂嵴最高点在哪里_两侧髂嵴最高点连线约平 ( )
  13. Windows10 常用快捷键
  14. Flink从入门到入土(详细教程)
  15. 我终于读懂了原型模式。。。
  16. 找不到和chrome浏览器版本不同的chromedriver的解决方法
  17. 公网中的Winbox
  18. 基于AHP与CRITIC的组合赋权方法
  19. IT项目管理十大要素
  20. android dat怎么打开方式,安卓手机如何打开.dat文件?

热门文章

  1. html手机陀螺儀页面,详解html5如何获取手机陀螺仪角度信息的示例代码
  2. ioi 赛制_钟子谦IOI2019参赛总结
  3. SpringBoot中使用MyBatis-Plus是如何解决Invalid bound statement (not found)这个异常的
  4. java tic tac toe_java – 对Tic Tac Toe的建议
  5. vba formula 公式的引用
  6. 为什么电脑不能安全关闭计算机,电脑无法正常关机的原因以及解决办法
  7. 解除百度网盘下载限制的办法
  8. 蚂蚁管网参数化三维建模方案
  9. 用tushare数据自定义期货大宗商品指数(3)
  10. 如何提高用户逃离成本