鉴于React的API很小,为什么它的文件大小如此之大?


88

这是数字

  • min + gzip 26k
  • gzip 90k
  • 原始450 + k

而且React在其文档中没有很多功能。为什么这么大?

我感觉这是轻量级DOM的实现。但我想确定。


4
您是否查看了源代码,以了解它的作用?有用的提示,不要看缩小版。
李斯特先生,2013年

6
我决定在潜水之前先询问一下。虽然我正打算使用反应,但我还是会在那里潜水;)
Eldar Djafarov

2
26k根本不是那么大。.–
BT

人们说反应不大。是的,reactjs本身很小(对于16.1.1版本为6.41KB),但是请记住,React需要一个ReactDOM才能工作,而ReactDOM的大小为92.4KB
Dinh Tran

Answers:


187

React确实做了很多!React最大的非显而易见部分可能是事件系统-React不仅实现自己的事件分发和冒泡,而且还标准化了跨浏览器的常见事件,因此您无需为此担心。例如,SelectEventPlugin是一个内置事件“插件”,它提供一个onSelect事件,该事件在所有浏览器中的行为均相同。

虚拟DOM实现确实需要的代码像样的数目为好; 在性能优化上花费了大量的精力,这就是为什么未精简版本包含ReactPerf的原因,ReactPerf是用于测量渲染性能的工具。在更新DOM时,React还为您做一些方便的事情,例如保持任何输入选择并保持当前滚动位置不变。

React还具有其他一些技巧。最酷的功能之一是,即使您没有浏览器环境,它也完全支持将组件呈现为HTML字符串,因此即使在加载JS之前,您也可以发送能够正常工作的页面。


您正在将React与什么进行比较?react-15.0.2.min.js43k (gzipped),但是jQuery是33k,而jQueryember-2.6.0.prod.js363k (also gzipped)。显然,这些框架没有做完全相同的事情,但是它们确实有很多重叠之处,因此我认为比较是合理的。

如果您担心下载大小,则不必担心JS代码对此造成的影响。这是我现在在“堆栈溢出”页面右侧看到的广告:

它的下载大小为95k-我不会三思而后行地在页面中包含这样的图像,因为(即使我担心性能),通常还有很多其他与性能相关的问题可以解决,这更有利可图。


简而言之,我不认为React有那么大,它的大小取决于它为帮助您而做的许多小事情。您将React的小API引用为React的代码应该小一些的原因,但是一个更好的问题可能是:“ React的API如此简单,考虑到它为您所做的一切,它怎么能这么简单?”

…但这是一个完全独立的问题。:)希望我回答了您的问题-如果没有,我很乐意扩展。


4
你完全回答了我的问题。React很棒。我正在考虑将其用于移动设备,因此尺寸非常重要。只是关于它的功能没有太多信息。我认为我可以使用更多技巧:)我觉得我可以摆脱jquery的东西。而paulmillr / exoskeleton正是时候:)
Eldar Djafarov

2
我正在研究完全不同的应用程序构建概念。检查vimeo.com/78151404github.com/component/component-使用那些根本不需要jQuery的组件,并且compy与jsxtransformations配合良好。而且,React的工作最为艰巨-微型组件可以覆盖其他所有内容(模型,路由,服务器通信)。
Eldar Djafarov

30
注意,我们在Facebook的移动网站上使用React,其中大小绝对至关重要:)
Vjeux

4
@lightblade嗯...不。内存使用情况取决于您的代码分配的数量。React非常努力地避免分配。
Dan Abramov 2015年

2
@ 1nfiniti好的,已经更新了一些新数字,因为已经两年半了。
索菲·阿尔珀特

-1

有一些想法..我对它的大小有一些相同的担心,但是使用它之后,不要开玩笑,如果它的大小为5MB,我会使用它。就是那么好。就是说,我确实决定减少对其他库的依赖。我在用jquery做两件事:ajax和自动ajax响应和请求处理(beforeSend等),该处理将在登录后令牌在响应中处理,然后确保每个ajax请求在将其添加到Authorization标头之前发送。我用一个非常简单的本地javascript代替了它。效果很好。另外,我正在尝试使用_underscore。我已将其替换为lodash,后者越来越小且速度更快,尽管目前我不使用它,因此可能会将其完全删除。

这是一篇关于Google的文章,在Google上有很多,我发现在jquery上使用本机JS有一些替代方法。

http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms/


1
如果您要定位多个浏览器,也可以使用所使用的代码构建自定义版本的jQuery
Dan Heberden 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.