我应该在正文中还是在 html 的头部编写脚本?

IT技术 javascript html
2021-02-09 19:25:35

我见过两种方式,两种实现方式都可以工作,只是结构有点不同。根据您的经验,哪个效果更好,为什么?

5个回答

我实际上会用多个选项来回答这个问题,其中一些实际上在正文中呈现。

  • 将库脚本如 jQuery 库放在 head 部分。
  • 将普通脚本放在头部,除非它成为性能/页面加载问题。
  • 将与包含相关联的脚本放置在包含的内部和末尾。一个例子是asp.net 页面中的.ascx 用户控件——将脚本放在该标记的末尾。
  • 将影响页面渲染的脚本放置在正文的末尾(在正文关闭之前)。
  • 不要将脚本放在标记中,例如<input onclick="myfunction()"/>- 最好将它放在脚本正文中的事件处理程序中。
  • 如果你不能决定,把它放在脑子里,直到你有理由不这样做,比如页面阻塞问题。

脚注:“当你需要它而不是事先”适用于页面阻塞时的最后一项(感知加载速度)。用户的感知就是他们的现实——如果它被认为加载得更快,它确实加载得更快(即使代码中可能仍在发生一些事情)。

编辑:参考:

附注:如果您放置标记内脚本块,它可能在某些浏览器的占用空间影响布局(IE7和歌剧9.2,已知有这个问题),所以将它们装入隐藏DIV(使用一个CSS类,如:.hide { display: none; visibility: hidden; }上div)

标准:请注意,如果有问题,标准允许将脚本块放置在几乎任何地方: http: //www.w3.org/TR/1999/REC-html401-19991224/sgml/dtd.htmlhttp:// www.w3.org/TR/xhtml11/xhtml11_dtd.html

EDIT2:请注意,只要有可能(总是?),您应该将实际的 Javascript 放在外部文件中并引用这些文件 - 这不会改变相关序列的有效性。

@Khoi - 页面渲染阻塞是一个普遍记录的问题。编辑答案以提供一些其他参考,因为它在某种程度上取决于环境(平台和浏览器/版本)
2021-03-12 19:25:35
您是否有提供有关此页面阻止问题或浏览器如何下载资源的更多信息的来源?
2021-03-25 19:25:35
迄今为止关于此主题的最佳答案,很有帮助!+1。
2021-04-01 19:25:35
@Andrew$().on("error", function(){});是一个例子,或者如果您想避免多个错误(在备份图像上),请尝试$().one("error", function(){});使用该one功能 - jQuery 特定的,但如果您想要纯 JavaScript,您可以反转源代码
2021-04-06 19:25:35
关于“不要在标记中放置脚本,例如 <input onclick="myfunction()"/>”,在极少数情况下您可能必须这样做。如在img标签中:onerror
2021-04-10 19:25:35

在页面开头编写脚本的问题是阻塞。浏览器必须停止处理页面,直到脚本被下载、解析和执行。原因很明显,这些脚本可能会在页面中插入更多内容来更改渲染结果,它们也可能会删除不需要渲染的内容等。

一些更现代的浏览器违反了这一规则,不阻止下载脚本(即 8 是第一个),但总体而言,下载并不是花费在阻止上的大部分时间。

查看甚至更快的网站,我刚刚读完它,它介绍了将脚本放到页面上的所有快速方法,包括将脚本放在页面底部以完成渲染(更好的 UX)。

好的答案,从技术上讲,将脚本放在标题中是干净的,但从最终用户的角度来看,SEO 将脚本放在文档底部作为最后一件事有很多很多好处。在某些页面上,我看到仅通过将脚本移动到底部,页面的明显响应速度就会增加许多倍。总的来说,它可能不会更快地完全加载,但对于最终用户来说,当他们看到内容时感觉更快!
2021-03-12 19:25:35
规范说要阻止?真的吗?我相信它们是出于渲染原因而阻止的,而不是因为任何规范都说要这样做!
2021-03-15 19:25:35
@Rob 在 html 规范中找不到阻塞这个词,它确实提到了渲染的停止(以及插入 html 的脚本的解释),但没有具体说阻塞,我会进行编辑。
2021-03-19 19:25:35
这似乎是正确的,我有问题延迟我的脚本执行,直到我的所有资源都已加载。而且我看到页面在正文中加载了脚本,可以如此有效地加载资源。你能更清楚地解释这一点吗?
2021-03-25 19:25:35
@Rob 我记得这本书说了一些关于它的内容,让我阅读规范并确保(如果需要,我会进行编辑)。
2021-04-02 19:25:35

W3Schools 有一篇关于这个主题好文章

脚本 <head>

调用脚本或触发事件时要执行的脚本放置在函数中。

将您的功能放在 head 部分,这样它们都在一个地方,并且不会干扰页面内容。

脚本 <body>

如果您不希望将脚本放置在函数内,或者您的脚本应该编写页面内容,则应将其放置在正文部分中。

胡说些什么...
2021-03-27 19:25:35

头,或在身体标签关闭之前。然后执行 DOM 加载 JS 时,这正是 jQuery document.ready 所做的。

我总是把我的脚本放在标题中。我的理由:

  1. 我喜欢将代码和(静态)文本分开
  2. 我通常从外部资源加载我的脚本
  3. 多个页面使用了相同的脚本,因此感觉就像一个包含文件(也在标题中)