你提到了三个地方:
在标签中;
在 HTML 中;和
在外部文件中。
让我逐一说明。
最佳做法是在一个或多个外部文件中包含 common Javascript,并且文件越少越好,因为加载的每个 JS 文件都会阻止页面加载,直到加载该 JS 文件。
“共同”这个词极其重要。这意味着您不想出于缓存原因将特定于页面的 Javascript 代码放入该外部文件中。假设您有一个包含 1000 个页面的网站。每个页面都有特定的 JS 代码。这可能是 1000 个不同的文件,也可能是一个执行大量不必要代码的非常大的文件(例如,查找不在该特定页面上但在其他 999 个页面之一上的 ID)。这些结果都不好。
第一个给你一点缓存提升。第二个可能有可怕的页面加载时间。
所以你要做的就是将所有常用函数放在一个 JS 文件中,该 JS 文件 only 包含函数。在每个 HTML 页面中,您调用该页面所需的 JS 函数。
理想情况下,您的 JS 文件也会被有效缓存。最佳实践是使用远期 HTTP Expires 标头和版本号,这样无论浏览器访问多少页面,每个浏览器都只会加载一次 JS 文件。当您更改文件时,您会更改版本号并强制重新加载。使用 mtime(JS 文件的最后修改时间)是一种常见的方案,给出的 URL 如下:
<script type="text/javascript" src="/js/script.js?1233454455"></script>
mtime 是自动生成的。您的 Web 服务器配置为使用适当的 Expires 标头提供 JS 文件。
这样可以以最好的方式(恕我直言)混合外部文件和页内脚本。
你提到的最后一个地方是在标签中。这在一定程度上取决于您使用的 JS 库和框架。我是 jQuery 的忠实粉丝,它鼓励不显眼的 Javascript。这意味着您(希望)不要在您的标记中添加任何 Javascript。所以而不是:
<a href="#" onclick="doStuff(); return false;">do stuff</a>
你会的:
<a href="#" id="dostuff">do stuff</a>
使用 Javascript:
$(function() {
$("#dostuff").click(doStuff);
});