我的意思是:我知道只有来自 .js 文件的 JS 才会被缓存。还有,我90%的函数必须在页面(html)加载(渲染)的时候渲染,所以最好在关闭body标签之前放JS。(这也阻止了使用文档 .ready(); 并且页面本身的加载会更快)。
那么,将 JS 放在<head></head>
. 期待代码的“顺序”,老实说,我不太介意......
我的意思是:我知道只有来自 .js 文件的 JS 才会被缓存。还有,我90%的函数必须在页面(html)加载(渲染)的时候渲染,所以最好在关闭body标签之前放JS。(这也阻止了使用文档 .ready(); 并且页面本身的加载会更快)。
那么,将 JS 放在<head></head>
. 期待代码的“顺序”,老实说,我不太介意......
在部分内放置<script src>
标签<head>
是有意义的——在语义上。它确实会阻止浏览器在加载脚本之前呈现任何内容,但确保在您的代码的其余部分(例如,在正文中)中有一个对象(例如 jQuery)可用。
一种常见的做法是在 head 部分加载轻量级脚本加载库(HeadJs、LABjs等),然后懒惰地和/或按需加载重的东西。
话虽如此,HTML5 引入了async
script 标签的属性并重新引入了该defer
属性(docs)。因此,您现在有一个非常好的和正当的理由将<script src>
标签放在 head 部分中,因为:
<script>
标签导致两个问题:
如果您需要在渲染任何内容之前执行一些 JavaScript,那么将其放入<head>
唯一真的很有意义。
因此,将它放在页面中尽可能低的位置会带来更好的用户体验。
该<head>
部分中的元素的重要一点是它们在<body>
开始加载之前被加载。
这是一个非常有效的功能,被大量使用(IMO)。
加载 DOM 之前必须运行的库、脚本必须在<head>
部分中完成。
我给你一个场景
想象一下,您需要计算屏幕总大小的 30% 大小并将其分配给里面的元素。
等待元素加载大,然后运行脚本重新加载调整它是愚蠢的。
将它放在标题中稍微语义化一些,但它通常没有任何优势。有时这是必要的——例如,使用 JavaScript 加载字体(使用 Google Webfonts 之类的东西)必须在标题中完成,否则页面将使用错误的字体呈现然后更改,这对用户来说看起来不太好。