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

IT技术 javascript jquery performance web
2021-03-19 18:22:39

好的,所以我有一个合理大小的项目,我在其中使用 jquery 主干和其他几个 javascript 库。我想知道是否应该为我的 javascript 库创建一个文件,为我的自定义代码创建另一个文件。或者一堆单独的javascript文件。

6个回答

减少 HTTP 请求通常是个好主意。所以,你应该尽可能减少文件的数量是合理的

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

  1. 核心文件。包含几乎无处不在的函数和其他有用的页面初始化内容。
  2. module文件。包含在多个地方使用的代码,但并非无处不在。可以插入以提供附加功能。例如,如果您有一个处理日期输入的脚本,您可以将其作为module文件包含,并将其添加到具有日期输入的页面中。
  3. 特定于页面的文件。这些文件包含仅在一处使用的代码。它们作为单独文件添加而不是作为页面本身的一部分添加的唯一原因是出于缓存原因。
没有重复的代码,每个文件都可以单独缓存在 ServiceWorker 中。这是不好的做法吗?
2021-04-26 18:22:39
为什么不使用 Browserify 之类的东西将所有内容捆绑在一起,并为每个页面/页面模板提供一个 JS 文件。通过这种方式,您可以选择开发中每个模板所需的module并将它们捆绑到一个缩小的文件中。
2021-04-28 18:22:39
@Nick 因为那样你会为每一页重复发送“核心”module,而不是发送一个“核心”JS 文件。
2021-05-15 18:22:39

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

我不同意。您应该在开发中分离您的文件,以便您可以阅读它们,然后有一个部署脚本来打包和压缩它。没有人喜欢阅读缩小的代码,但这就是您需要提供给用户的。
2021-04-27 18:22:39
@bchurchill - 我在回答中说“何时投入生产” - 从项目开始到部署,您如何维护代码是非常短暂的,与应用程序性能无关。运行时的可读性可能有利于教学,但会影响性能。
2021-05-08 18:22:39
为什么需要在初始页面加载时将所有 JS 文件嵌入到一个大文件中?Google 对初始页面加载速度进行了负面评价,您应该推迟在初始页面加载(入口页面)时不需要的 JS 文件和函数。
2021-05-10 18:22:39

最好把它分开,但不要过分热情。这样您以后就可以重用您的库代码。此外,每个人都更喜欢使用单独的文件,因为这样可以使事情更有条理。

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

@bchurchill 我认为您不需要生产环境的可读性,因此最好将 http 请求和网络延迟最小化到合理的数量。可读性只在开发时才需要
2021-04-22 18:22:39
人们投票反对,因为这个答案不正确。当然,您应该将 js 拆分为逻辑组件以保持井井有条。但是您应该在将它们发送给用户之前将它们组合起来,以保持 http 请求不被发送。仅将它们拆分为“永远不可能更改”、“有点可能更改”和“经常更改”的逻辑缓存组件。
2021-04-24 18:22:39
......这就是我的回答所说的。您只希望用户缓存一个大文件。
2021-04-24 18:22:39
啊,自从我看到你就编辑了你的答案。(为了记录,我没有投反对票,只是想解释为什么投反对票)。
2021-04-28 18:22:39
是的,我的第一个答案只有第一部分。我想我第一次没有清楚地解释开发和生产之间的区别是我应得的。
2021-05-15 18:22:39

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

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

+1,很好的答案,但我还要补充一点,您有时也可以通过创建两个或三个“大文件”来分离出很少更改的组件(例如 jquery 之类的库)和组件将更频繁地更改(app js)。因此,如果您更改应用程序,第一部分仍将被缓存。当然,成本是多一个 http 请求,所以 YMMV 和那一点。在我的应用程序中,我通常这样做:一个文件用于引导应用程序并需要其他文件,一个用于框架 js,一个用于应用程序 js。
2021-05-01 18:22:39
当然,这真的要视情况而定。我只是给出一个总体概述。这个想法是,您不仅有两个选择——一个大文件或将所有文件分开——还有第三个选择——一个“引导”文件,然后是其余的。您可以根据需要对其进行调整。
2021-05-04 18:22:39
是的,您提到引导文件的事实就是我认为这是最佳答案的原因。
2021-05-17 18:22:39

通常,我会尽可能少地使用,以减少向服务器发出的请求数量。