React不是一个好主意React Is A Terrible Idea翻译自Dan Yoder

最近有很多关于React框架的令人激动的事情,React好像在和Angular在最时髦的框架层面上一争高下。不幸的是,这两个框架都不利于你的应用健康,对整个软件行业来讲也没有好处。对于新的应用程序,为了所有的事情都能更好地开展,请使用Web components而不是这两个框架。

React的设计是有问题的,这里可以描述很多细节--关注点分离,用模型耦合视图,注重不必要的优化--但我要告诉你一个故事,说明支持开放标准的重要性,这个故事是个反例,故事讲述的是一个有着大量的风险资本的受欢迎的产品的启动。启动时,他们想使他们的Web应用程序很特别。像之前一些产品一样,他们认为HTML和CSS已经不能满足他们的需求。

固执启动

他们使用画布构建他们的渲染引擎,遇到了很多麻烦,但是能正常运行!他们的Web app看起来很特别。然而,事实证明,浏览器厂商正在努力解决这个项目自己的渲染引擎导致的一些问题。事实上,就在这个项目启动两个星期后,宣布了已经有一个主要的浏览器版本,其中包括了解决他们引擎遇到的最大的问题之一的解决方案。(facebook和风投的强大让浏览器厂商做出了妥协让步)。

这个项目就是Flipboard,主要的问题是平滑滚动,该功能在Firefox中已经屏蔽。该项目的框架使用的是React-Canvas,主要是为了支持平滑滚动的愿望,而不是致力于加速DOM渲染,Flipboard觉得应该写一个他们自己的基于画布的渲染引擎来解决这个问题,是不是很酷,是的,是不是很屌,是的,但是这个构建明智吗?No,相反,一个解决方案应该让很多人受益,我们也许只能从使用React中受益,即使React设计的很好(其实不好),但仍限制了潜在的用户。

Panda Strike(作者所在的公司)不会盲目崇拜什么,当然,我们认为,你的用户在看杂志等静态内容时,支持每秒60帧的动画是愚蠢的;我们有些人买的约翰·格鲁伯的关于iOS级别的响应的评论是不是真的在选择上有帮助的。(译者按:作者的意思是这些都是花时间但意义不大的事情)。但是我们都认为Flipboard的工程师显然都非常有才华,并且React canvas 可能对某些人真的有用,但是它可以仅仅作为一个简单的画布库就好,而不用耦合到React框架里。

每一种创新不需要非得使用自己的框架
React框架的内部依赖于虚拟DOM,相对于浏览器DOM的优点是很轻量级。你可以创建上千个虚拟DOM节点而没有任何应用性能问题,不但如此,你可以比较虚拟DOM树的差异,并仅将改变的内容应用到真实的浏览器DOM中,这看起来很强大,的确,很得心应手,但是,你会接受React的编程方式吗?或者在JavaScript中嵌入标记式语言吗?
不用,作为证明,我告诉你这个漂亮的,独立虚拟DOM实现方法,这里讲了作者为什么写这个独立的版本。
虚拟DOM方法强调的是,一个模块应该把一件事情做好,虚拟DOM仅关注于虚拟DOM的展现,“diff”、“batch”、“patch”功能仅关注于虚拟DOM的相关算法。
虚拟DOM和(事件以及应用展现状态)没有关系,下面的例子论证了通过“observ”和“dom-delegator”事件进行状态的使用。这里可以使用Knockout或backbone控制状态,使用jQuery或component/events控制事件。

对于一个基于canvas的渲染引擎来说也是同样的。

React的真实目的
即使Flipboard花光很多风投的钱用于改善渲染引擎浏览器中的渲染能力,但是他们花钱不能和Facebook相比,Facebook在React上的投入是Flipboard的十倍还多,到底怎么了,他们不是去改进一个开源框架,让采用这个框架的应用受益,而是花时间去弄更好的开源浏览器?
他们应该也不会这么做的,因为这不是他们的兴趣所在,你可以回顾一下2012年Facebook关于移动应用的挫折,当时马克.扎克伯格说,在HTML5上构建他们的应用是公司的最大的错误,你可能不记得,此时Sencha宣称这是一个挑战,并且使用Sencha构建了一个和facebook一样的HTML5应用,有效地证明了扎克伯格对于HTML5 Facebook的批评是没有根据的。
Facebook不像Google,google的收入来自于搜索引擎,而Facebook的收入来源受到自身产品的局限,换句话说,Facebook不关心你是否使用Web,它仅关心你是否使用Facebook。
那么,为什么发布的开源Web框架呢?因为Facebook在和谷歌争夺工程师。所以,你会看到一个比拼,在哪家公司上班最酷,这两家公司都是你的祖父母喜欢的公司。你打算怎么赢得这场战斗?一种方法是拥有最时尚的Web框架。
基本上,无论是谷歌和Facebook都在拼命找一顶帽檐往后戴的棒球帽(很拽的样子)。Angular是谷歌的棒球帽。React是Facebook的。他们用时尚框架吸引优秀人才加入。

开放的WEB比你想的更重要
同时,Web components 现在可以在Chrome和Firefox中使用,在旧的浏览器中可以使用polyfills,Web components是以后几年开放的Web最有可能的方向,但是,我们在讨论React,一个完全没有用的框架(严肃地讲,为什么不仅仅引入JSX和虚拟DOM作为独立的库呢?并且,从数据展示发展的历史而言,这并不是新事物,人们已经这样做了很多年了)。说它不好,是因为开放的Web是很重要的,十年前,我们丢掉了它,今天,微软像一个迷失的野兽,迷失在失败产品的撒哈拉平原上,但是十年前,他们在拥有自己的Web这一点上中毒太深,
如果你在Web这个行业没有超过十年,你可能不会认识到,你在移动Web上网差点必须使用Windows Mobile。你可能不相信,微软已经被裁定为垄断,并仍在处理善后事宜,但是到今天,我们还是听到了必须支持IE8-IE6的继任者,IE老版本的bug成堆拖慢了整个工业将近十年,到现在终于有了Firefox和WebKit的出现,这些都不是偶然发生的。

如何帮助Web更加开放

暂时省略。。。

React不如Web components这样的标准好

一个良好的框架支持关注点分离。 ...

当然,你可以使用JSX,但是这是React的最糟糕的部分。 JSX希望你把模型和控制器耦合到视图里面去。

这是一个坏主意。不要那样做。

(待续。。。)

相关文章

这篇文章主要介绍了idea中mapper快速跳转到xml插件的方法,具...
今天小编给大家分享的是IDEA搭建Maven模块化项目的实现方法,...
这篇文章主要介绍了ideaintellij怎么快速修复if语句缺少大括...
这篇文章主要介绍“idea运行main方法或Test避免编译整个应用...
这篇文章主要介绍“idea项目全局去掉严格的语法校验方式是什...
本文小编为大家详细介绍“Windows、IDEA、VSCode常用快捷键有...