将javascript放在一个.js文件中,还是将其分解为多个.js文件?

将javascript放在一个.js文件中,还是将其分解为多个.js文件?,javascript,Javascript,我的web应用程序使用jQuery和一些jQuery插件(例如验证、自动完成)。我想知道是应该把它们放在一个.js文件中,这样可以更容易地缓存,还是应该把它们分成单独的文件,只包含给定页面所需的文件 我还应该提到,我关心的不仅是下载.js文件所需的时间,还包括根据加载的.js文件的内容,页面的速度有多慢。例如,添加autocomplete插件往往会将响应时间从我的基本测试中降低100毫秒左右,即使在缓存时也是如此。我的猜测是,它必须扫描DOM中导致延迟的元素。如果人们要访问站点中的多个页面,最好

我的web应用程序使用jQuery和一些jQuery插件(例如验证、自动完成)。我想知道是应该把它们放在一个.js文件中,这样可以更容易地缓存,还是应该把它们分成单独的文件,只包含给定页面所需的文件


我还应该提到,我关心的不仅是下载.js文件所需的时间,还包括根据加载的.js文件的内容,页面的速度有多慢。例如,添加autocomplete插件往往会将响应时间从我的基本测试中降低100毫秒左右,即使在缓存时也是如此。我的猜测是,它必须扫描DOM中导致延迟的元素。

如果人们要访问站点中的多个页面,最好将它们全部放在一个文件中,以便缓存。他们会先点击一次,但这将是他们在你的网站上花费的全部时间。

最终由你决定

但是,每个网页包含的信息越少,终端查看器下载的速度就越快


如果您只包含每个页面所需的js文件,则您的网站更有可能更高效、更精简

常见但相关的答案:

这取决于项目

如果您有一个相当有限的网站,其中大部分功能在网站的多个部分重复使用,那么将所有脚本放在一个文件中是有意义的

然而,在我参与的几个大型web项目中,将通用站点范围的功能放在一个文件中,并将更多特定于部分的功能放在它们自己的文件中,这更有意义。(我们这里讨论的是大型脚本文件,用于几个不同的web应用程序的行为,它们都在同一个域中提供服务。)

将脚本拆分为单独文件的好处是,您不必为用户提供他们不使用的不必要的内容和带宽。(例如,如果他们从未访问过网站上的“应用程序A”,他们将永远不需要“应用程序A”部分的100K脚本。但他们将需要通用的站点范围功能。)

将脚本保存在一个文件下的好处是简单。服务器上的点击次数更少。用户下载量减少


不过,像往常一样,YMMV。没有硬性规定。根据用户的使用情况和项目结构,做对用户最有意义的事情。

如果每个页面都需要这些文件,请将它们放在一个文件中。这将减少HTTP请求的数量并提高响应时间(对于大量访问)


有关其他提示,请参见

如果您喜欢将代码放在单独的文件中进行开发,您可以在缩小之前编写一个快速脚本将它们连接到单个文件中


正如其他海报所指出的那样,一个大文件对于减少HTTP请求更好。

我还认为您应该按照其他海报所建议的方式使用一个文件。然而,对于插件仅仅通过包含在大js文件中而消耗周期的观点:

在执行昂贵的操作之前,使用一些检查来确保您甚至处于需要这些操作的页面上。也许您可以在运行autocomplete插件之前检测dom节点的存在(或不存在),并且仅在必要时初始化插件。没有必要在不需要特定功能的页面或部分上浪费dom遍历的开销


在一个昂贵的代码块之前,一个简单的条件将为您提供您正在决定的两种方法的好处。

我非常同意bigmattyh所说的,这取决于

一般来说,我会尽可能多地聚合脚本文件,但是如果您有一些脚本只在站点的少数区域使用,特别是那些在加载时执行大型DOM遍历的脚本,那么将它们保留在单独的文件中是有意义的。
e、 g.如果您只在联系人页面上使用验证,为什么要将其加载到您的主页上

另一方面,您有时可以将这些文件潜入间隙页面,而在间隙页面中没有太多其他内容,因此当用户登录到一个需要它的非常沉重的页面时,它应该已经被缓存-小心使用-但当有人对您进行基准测试时,这可能是一个方便的技巧

因此,尽可能少的脚本文件是合理的


如果你发送一个100K的整块,但只使用20K的80%的页面,考虑拆分。

它很大程度上取决于用户与你的站点交互的方式。 需要您考虑的一些问题:

  • 第一页加载速度非常快有多重要
  • 用户是否通常会将大部分时间花在站点的不同部分以及功能子集上
  • 您是否需要在页面准备就绪时准备好所有脚本,或者在页面加载后通过在页面中插入
    元素来加载一些脚本
如果你真的想提高网站的性能,那么了解用户如何使用你的网站,以及你想优化什么是一个好主意

然而,我的默认方法是将所有javascript连接并缩小到一个文件中。jQuery和jQuery.ui很小,开销很低。如果您使用的插件对页面加载时间有100毫秒的影响,那么可能是出了问题

需要检查的几件事:

  • 您的HTTP服务器上是否启用了Gzip
  • 作为部署的一部分,是否生成具有唯一名称的静态文件
  • 您是否正在为具有永不终止的缓存过期的静态文件提供服务
  • 您是否在页面顶部包含CSS,在底部包含脚本
  • 有没有更好(更小、更快)的jQuery插件可以做同样的事情

我认为这取决于他们多久改变一次
function sassFunctions(options) {
options = options || {};
options.base = options.base || process.cwd();

var fs = require('fs');
var path = require('path');
var types = require('node-sass').types;

var funcs = {};

funcs['inline-image($file)'] = function (file, done) {
    var file = path.resolve(options.base, file.getValue());
    var ext = file.split('.').pop();
    fs.readFile(file, function (err, data) {
        if (err) return done(err);
        data = new Buffer(data);
        data = data.toString('base64');
        data = 'url(data:image/' + ext + ';base64,' + data + ')';
        data = types.String(data);
        done(data);
    });
};

return funcs;
}
<html>
<head>
    <script src="dst\vendor.js"></script>
    <script src="dst\app.css"></script>
    <script src="dst\app.js"></script>
</head>
<body id="body">
    <xyz-app params="//xyz.com/api/v1"></xyz-app>
    <script>
        ko.applyBindings(document.getTagById("body"));
    </script>
</body>
</html>