Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个大javascript文件还是多个小文件?_Javascript_Jquery_Performance_Web - Fatal编程技术网

一个大javascript文件还是多个小文件?

一个大javascript文件还是多个小文件?,javascript,jquery,performance,web,Javascript,Jquery,Performance,Web,好的,我有一个规模合理的项目,我使用jquery主干和其他几个javascript库。我想知道是否应该有一个用于javascript库的文件和另一个用于自定义代码的文件。或者一堆单独的javascript文件。最好将其分离出来,但不要过于热心。这样以后就可以重用库代码了。此外,每个人都更喜欢使用单独的文件,因为这样可以使事情更有条理 也就是说,最好给用户一个压缩文件,这样所有内容都可以很容易地缓存,这也减少了页面请求的数量。例如,Rails 3会在资产管道中自动执行此操作。您可以编写一个脚本来运

好的,我有一个规模合理的项目,我使用jquery主干和其他几个javascript库。我想知道是否应该有一个用于javascript库的文件和另一个用于自定义代码的文件。或者一堆单独的javascript文件。

最好将其分离出来,但不要过于热心。这样以后就可以重用库代码了。此外,每个人都更喜欢使用单独的文件,因为这样可以使事情更有条理


也就是说,最好给用户一个压缩文件,这样所有内容都可以很容易地缓存,这也减少了页面请求的数量。例如,Rails 3会在资产管道中自动执行此操作。您可以编写一个脚本来运行您喜爱的压缩器。但是你不应该为了这个而牺牲代码的可读性——你也可以吃蛋糕

一个大文件。当代码投入生产时,您应该缩小代码,如果代码较大,则应进行压缩。您希望向服务器发出尽可能少的请求以提高页面性能

通常,减少HTTP请求是一个好主意。因此,您应该尽可能合理地减少文件数量

我个人的偏好是有三组JavaScript文件:

  • 核心文件。包含几乎无处不在的函数和其他有用的页面初始化功能
  • 模块文件。包含在多个地方使用的代码,但不是在所有地方都使用。可以插入以提供附加功能。例如,如果您有一个脚本来处理日期输入,则可以将其作为模块文件包含,并将其添加到具有日期输入的页面中
  • 页面特定文件。这些文件包含仅在一个位置使用的代码。它们作为单独文件添加而不是作为页面本身的一部分添加的唯一原因是缓存原因

  • 正如所建议的,使用较小的文件是很好的,但是对于生产代码,您的构建过程应该包括优化。优化的一部分应该是最小化文件大小和网络流量优化,方法是合并到一个js文件中以减少浏览器的调用。

    通常,我使用尽可能少的文件来减少对服务器的请求数量。

    取决于应用程序的大小。但通常最好将javascript文件适当分组,以获得更好的可维护性和可重用性


    您可以使用JS模块加载程序来加载JavaScript。至少这些文件将被组织起来。您可以通过确保这些文件可以缓存在用户浏览器上,以便用户只下载一次来提高服务器性能。

    一个大文件或两个文件:一个小文件和一个大文件。 要明确的是,在开发过程中最好有单独的文件-可能使用类似的东西。但当您部署它时,最好将所有内容压缩到一个文件中,以减少HTTP延迟和请求

    我提到了两个文件。在某些情况下,最好有一个小文件,负责“引导”操作,同时下载“大文件”——特别是如果它真的很大的话。
    这对于第一次访问特别有用,因为用户还没有缓存您的文件。

    将javascripts合并到一个文件中:由于这个答案不正确,人们正在进行向下投票。当然,您应该将js拆分为逻辑组件,以保持组织有序。但是您应该在将它们发送给用户之前将它们组合起来,以抑制http请求。只需将它们拆分为逻辑缓存组件,其中包含“永远不可能更改”、“有点可能更改”和“频繁更改”……这就是我的答案。你只想让用户缓存一个大文件。啊,自从我看到你的答案后,你编辑了它。(作为记录,我没有投反对票,只是想解释为什么投反对票)。是的,我的第一个答案只有第一部分。我想这是我应得的,因为我第一次没有清楚地解释开发和生产之间的区别。@bchurchill我认为您不需要生产的可读性,所以最好将http请求和网络延迟最小化到合理的程度。可读性只在开发时需要,我不同意。您应该在开发中分离文件,以便读取它们,然后使用一个部署脚本对其进行打包和压缩。没有人喜欢阅读精简的代码,但这正是您需要向用户提供的。@bchurchill——我在回答中说的“当它投入生产时”——从项目开始到部署,您如何维护代码是非常短暂的,与应用程序性能无关。运行时的可读性可能有利于教学,但会影响性能。为什么需要在初始页面加载时将所有JS文件嵌入到一个大文件中?谷歌的初始页面加载速度非常慢,你应该推迟JS文件和功能,这些在初始页面加载时并不需要(进入页面)。+1,回答得好,但我还要补充的是,有时你也可以通过创建两个或三个“大文件”来分离不经常更改的组件,从而挤出更多的性能(例如jquery之类的库)和将更频繁更改的组件(app js)。因此,如果你更改了应用程序,第一部分仍然会被缓存。当然,成本是多了一个http请求,所以YMMV就是这样。在我的应用程序中,我通常会这样做:一个文件引导应用程序,需要其他文件,一个文件用于框架js,一个文件用于应用程序js。当然,这确实取决于具体情况。我只是给出一个概述。想法是你没有两个选择——一个大文件或将所有文件分开——还有第三个选择——一个“引导”文件,然后是其他文件。你可以根据需要调整它。是的,你提到的引导文件就是为什么我认为这是最好的答案。为什么不使用类似Browserify的东西来捆绑所有文件呢