热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初入React——Recat的起源和特点

React的起源来源于Facebook,当时Facebook想要做一款关于照片墙的App,当时筛选了市场上的大部分JavaScriptMVC框架

React的起源来源于Facebook,当时Facebook想要做一款关于照片墙的App,当时筛选了市场上的大部分Javascript MVC框架,都不满意,就决定自己写一套,用来架设自己的Instagram的网站。做出来以后,发现这套东西非常的好用,于是就决定对其进行开源,最终在2013年5月对外开源。

React在定位上于传统的MVC框架是不同的:

MVC模式

MVC所实现的目标是使代码可扩展性,可复用性、可维护性、灵活性加强。

Model层是业务逻辑,View层是界面,Controller(控制器)层是用来调度View和Model层,将用户界面和业务逻辑合理的组织在一起,相当于人的中枢神经。所以Controller中的内容尽量少之又少,这样才能保证最大的灵活性。

MVVM模式

react、vue这两个框架的核心理念都是数据驱动页面渲染,同时他们都是MVVM模式的框架,MVVM模式的M还是固定表示Model,V还是表示View,这两个基本都是不会发生变化,一个页面必须需要数据和渲染两个部分,那么变化的是如何将Model渲染到View的过程变了,在MVVM模式中,将View和Model绑定在一起,只要Model发生了变化,View就会自动更新,不需要我们认为的再去写如何操作DOM更新的过程了。

React高性能的体现:虚拟DOM

React高性能的原理:

我们通常以进行高性能的DOM操作来衡量一个前端开发人员技能的重要指标。(在Web中我们需要将变化的数据实时反应到UI上,这时我们需要对DOM进行操作。复杂而频繁东西DOM操作通常是性能瓶颈产生的原因所在)

虚拟DOM自然就是跟DOM有很大关系的了。我们在使用原生JS开发或者使用Jquery开发,经常就会操作DOM,但是我们使用的时候发现,每次我们改变DOM的时候,页面再次渲染,会花费不短的一段时间,这样用户体验就不太好了。如果我们每次操作的不是DOM或者每次只操作更少的DOM呢,是不是会花费的时间更短呢,基于这个想法,就有了虚拟DOM。

在React中,会把DOM转换成Javascript对象,然后再把Javascript对象转换成DOM,这样我们对于DOM的操作,实际上是再操作这个Javascript对象。尽管每一次都需要构造完整的虚拟DOM数,但是因为虚拟DOM是内存数据,性能是极高的,对实际DOM进行操作的仅仅是Diff,因而能达到提高性能的目的。这样,再保证性能的同时,开发者不再需要关注某个数据的变化如何更新到一个或多个具体的DOM元素,而只需要关心再任意一个数据状态下,整个界面是如何Render的。

Diff算法的原理:

在某一个时间节点调用React的render()方法,会创建一颗由React元素组成的树。在下一次state或props更新时,相同的render()方法会返回一颗不同的树。React需要基于在这两棵树之间的差别来判断如何高效的更新UI,以保证当前UI与最新的树保持同步。

React Fiber结构:

React Fiber是对React核心算法的重新实现,也是React团队花了两年时间研究的结晶。React Fiber的目的提升其对于动画、布局、手势等场景的适用性。它的核心功能就是增量渲染:一种将渲染工作分解为多个区块并将分散到每一帧里面。

其他核心功能还包括随着程序中新的update引起的暂定、终止和继续等;以及为不同任务分配优先级;和最新的并发性。


推荐阅读
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
author-avatar
瑩影貓貓05
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有