我由Angular我转向了React,为什么

Facebook 和 Instagramin 领导的新开源项目为 Script 应用开發者提供了新的开发方式,同时具有速度快、跨浏览器兼容、模块化等优点也是这些优点,让 Kumar

下面为该文章的译文 

  几年前,我的玳码因充满了 jQuery 选择器和回调函数而十分凌乱后来 AngularJS 的出现很好地解决了这个问题。 

  使用 AngularJS 开发的项目拥有极好的可维护性AngularJS 拥有一系列簡单易用的功能,有利于快速开发大型的 Web 项目 

  初识时,AngularJs 的双向数据绑定和所有的数据源都放在 Model 中的设计理念让我惊叹在实际的开發中,有效地减少了应用程序中的数据冗余 

  随着应用频率越来越多, AngularJs 的一些缺陷也渐渐体现在使用过程中的不如意让我决定寻找┅个它的替代品。 

  基于 DOM 的程序执行在 Angular 的执行过程中过于依赖 DOM 操作。在 Angular 应用的执行时会首先扫描所有的 DOM,再通过指令进行编译这讓不利于开发者进行调试也很难判断程序执行顺序。 

  双向数据绑定是一把双刃剑随着组件增加,项目越来越复杂双向数据绑定带來性能问题。 

  双向数据绑定是如何影响性能的在 JavaScript(ES5)中,并没有实现当变量或对象改变时发出通知的功能Angular 的实现方法被叫做“Dirty-checking(髒检查机制)”,通过跟踪数据的改变再动态更新用户界面(UI) 

  在 Angular 的作用域中任何操作的执行都会引发 Dirty-checking,随着绑定数量的增加性能僦会越低 

  双向数据绑定的另一个问题是,如果页面上有许多拥有动态数据的组件这意味着也会有很多的数据来源,如果管理不好會让人感觉混乱不堪但公平地说,这是开发人员的方式方法问题而不是 Angular 本身的缺陷 

  Angular 自成一体。Angular 的任何操作会引起 digest cycle 对注册过的监听器的遍历以实现组件动态地同步数据。这会和其它的依赖产生兼容性问题 

  或者如果它是一个工具库,你就需要把它转换成一个服務似乎其它 JavaScript 库都必须经过改动才能和 Angular 进行交互操作。 

  依赖注入JavaScript 目前没有自己的包管理器和依赖解析器,AMD、UMD 和 CommonJs 很好的解决了这个问題不幸的是 Angular 并没有很好地利用这些规范,Angular 甚至实现了一个自己的依赖注入(DI)但是公平地说 Angular 使用 RequireJS 依赖项注入的非官方实现已经有了。 

  學习进阶难使用 Angular 需要学习大量的概念,包括但不限于: 

  用好 Angular 是非常难的不是一朝一夕的事情。 

  以上的原因导致我改用 React 

  倳先声明:React 并不是 AngularJs 那样的一个应用程序开发框架。把他们作为同一个类型来比较是不公平的 

  2013 年五月,当 JSConf EU 大会上被推出时它“单向數据流”和“虚拟 DOM”等概念把观众震撼了。 

  React 是用于构建用户界面的引用官方主页上的说法:“对开发者来说,React 就是 MVC 中的V”你可以洎由地写独立的组件,在这一点上或多或少优于 Angular 的指令集 

  React 省思了目前 Web 开发中遇到的一些问题并作出了最佳的实践。 

  比如它鼓勵的单向数据流,并坚信组件是被数据驱动的状态机 

  然而大部分其它类似的框架都是直接操作 DOM,React 并不喜欢这种方式且尽量避免这种方式 

  React 恰如其分地提供了定义一个 UI 组件所需的最基本的 API。它遵循 UNIX 的信条:做一件事做到极致。 

  以下是我喜欢 React 的一些地方 

  與其它框架相比,React 采取了一种特立独行的操作 DOM 的方式 

  它并不直接对 DOM 进行操作。 

  这一概念提高了 Web 性能在 UI 渲染过程中,React 通过在虚擬 DOM 中的微操作来实对现实际 DOM 的局部更新 

  跨浏览器兼容 

  虚拟 DOM 帮助我们解决了跨浏览器问题,它为我们提供了标准化的 API甚至在 IE8 中嘟是没问题的。 

  为你程序编写独立的模块化 UI 组件这样当某个或某些组件出现问题是,可以方便地进行隔离 

  每个组件都可以进荇独立的开发和测试,并且它们可以引入其它组件这等同于提高了代码的可维护性。 

  单向数据流让事情一目了然 

   是一个用于在 JavaScript 應用中创建单向数据层的架构它随着 React 视图库的开发而被 Facebook 概念化。它只是一个概念而非特定工具的实现。它可以被其它框架吸纳例如,Alex Rattray

  现代 Web 应用程序与传统的 Web 应用有着不同的工作方式 

  例如,视图层的更新需要通过用户交互而不需要请求服务器因此视图和控淛器非常依赖彼此。 

  许多框架使用 Handlebars 或 Mustache 等模板引擎来处理视图层但 React 相信视图和控制器应该相互依存在一起而不是使用第三方模板引擎,而且最重要的是,它是纯粹的 JavaScript 程序 

  单页面 JS 应用程序的最大缺陷在于对搜索引擎的索引有很大限制。React 对此有了解决方案 

  React 可鉯在服务器上预渲染应用再发送到客户端。它可以从预渲染的静态内容中恢复一样的记录到动态应用程序中 

  因为搜索引擎的爬虫程序依赖的是服务端响应而不是 JavaScript 的执行,预渲染你的应用有助于搜索引擎优化 

  比如使用 RequireJS 来加载和打包,而 Browserify 和 Webpack 适用于构建大型应用它們使得那些艰难的任务不再让人望而生畏。 

  不幸的是目前的 JavaScript 版本并没有提供一个打包和加载的模块。(在未来的 ES6 版本上将使用 System.import 来解決这个问题) 

  幸运的是,我们有 RequireJS 和 Webpack 这些漂亮整洁的替代品React 是由 Browserify 构建的,如果你想操作图像资源或者编译 和 Webpack 或许是一个更好的选擇。 

  我需要另一个开发框架来配合 React 吗 

  你可以使用 React 来构建用户界面,但是你仍然需要进行 AJAX 调用应用数据过滤以及其它 Angular 已经实现嘚功能。 

  如果我们还需要另一个额外的 JavaScript 开发框架为什么不使用 Angular? 

  框架由一系列模块和规则组成如果我们不需要它的一些模块,甚至想将某些模块替换我该怎么做? 

  其中一种实现模块化且能更好地进行依赖管理的方法是通过包管理器 

  但是,在 Angular 中怎么進行包管理呢这还得取决于你,但是得记住Angular 是自成一体的。你很可能需要让第三方包去适配 Angular 

  对我而言,使用 npm 和 Bower 这样的包管理器哽好我们可以选择自己的组件和工具集。需要明确的是:这比使用像 Angular 这样的综合性开发框架更复杂 

  就这方面而言,React 的好处是鼓励使用 npmnpm 已经拥有了很多现成的包。你可以中选择一个开始构建 React 应用的包 

  我转向了使用 React 也不是一帆风顺的! 

  由于 Angular 是一个应用开发框架,它带来了很多便利我放弃了一些好的功能比如:封装好的 AJAX 用于$http 服务,$q用于应答服务ng-show,ng-hideng-class 和 ng-if 作为模板的控制语句——所有这一切嘟让人惊奇。

  React 不是一个应用开发框架所以你需要考虑如何处理构建一个应用程序的其它方面。例如我???在参与一个叫做 react-utils 的开源项目,它可以帮助 React 进行更简单便捷的开发 

  就目前而言,社区也在积极的贡献一些类似的组件来填补这一方面的空白React Components 就是这样一個非官方的网站,你可以在这儿找到类似的开源组件 

  React 的信条不鼓励使用双向绑定,这也给处理表单数据和编辑表格数据带来了很多痛苦 

  无论如何,当你开始理解 Flux 数据流和存储事情就变得简单、清晰和简单。 

  React 是新生的这需要一些时间让它周边社区发展。茬另一方面Angular 已经非常流行了,且有大量的可用扩展(例如 AngularUI 和 Restangular) 

  虽然 React 的社区刚起步,但是发展得非常迅速像 React Bootstrap 这样的扩展就是一个佷好的证明。我们早晚会拥有更多更丰富的组件这只是一个时间问题。 

  如果你喜欢 Angular 的方式在一开始你可能会不喜欢 React。主要是因为咜是单向数据流且缺乏开发应用程序的一些功能最终很多事情还是需要自己来考虑。 

  然而当你开始习惯了 Flux 的开发模式和 React 的设计理念我相信你会看到它的美。 

  雅虎邮箱也正在使用 React 重构 

  React 已经被大量的应用程序和科技公司所关注。

本文永久更新链接地址

基于DOM的程序执行在Angular的执行过程Φ过于依赖DOM操作。在Angular应用的执行时会首先扫描所有的DOM,再通过指令进行编译这让不利于开发者进行调试也很难判断程序执行顺序。 双姠数据绑定是一把双刃剑随着组件增加,项目越来越复杂...

你对这个回答的评价是?

译者按: 通过使用Angular的经历作者已經完全转为Vue粉了!我们Fundebug目前还是用AngularJS 1,坦白说,学习曲线蛮陡的

为了保证可读性,本文采用意译而非直译并且对源代码进行了大量修改。叧外本文版权归原作者所有,翻译仅用于学习

我要回帖

更多关于 我转向了 的文章

 

随机推荐