将javascript放在一个.js文件中,还是将其分解为多个.js文件?
我的web应用程序使用jQuery和一些jQuery插件(例如验证、自动完成)。我想知道是应该把它们放在一个.js文件中,这样可以更容易地缓存,还是应该把它们分成单独的文件,只包含给定页面所需的文件将javascript放在一个.js文件中,还是将其分解为多个.js文件?,javascript,Javascript,我的web应用程序使用jQuery和一些jQuery插件(例如验证、自动完成)。我想知道是应该把它们放在一个.js文件中,这样可以更容易地缓存,还是应该把它们分成单独的文件,只包含给定页面所需的文件 我还应该提到,我关心的不仅是下载.js文件所需的时间,还包括根据加载的.js文件的内容,页面的速度有多慢。例如,添加autocomplete插件往往会将响应时间从我的基本测试中降低100毫秒左右,即使在缓存时也是如此。我的猜测是,它必须扫描DOM中导致延迟的元素。如果人们要访问站点中的多个页面,最好
我还应该提到,我关心的不仅是下载.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%的页面,考虑拆分。
它很大程度上取决于用户与你的站点交互的方式。 需要您考虑的一些问题:
- 第一页加载速度非常快有多重要
- 用户是否通常会将大部分时间花在站点的不同部分以及功能子集上
- 您是否需要在页面准备就绪时准备好所有脚本,或者在页面加载后通过在页面中插入
元素来加载一些脚本
- 您的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>