我应该在身体或html的头部写脚本吗?

时间:2010-08-20 13:35:48

标签: javascript html

我已经看到了两种方式,两种方式的实现工作只是结构有点不同。根据您的经验,哪种工作更好,为什么?

5 个答案:

答案 0 :(得分:94)

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

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

脚注:“当你需要它而不是之前”适用于页面阻塞时的最后一项(感知加载速度) - 用户感知是他们的现实,如果它被加载更快,它确实加载更快(即使可能仍会在代码中出现这些东西。

编辑:参考:

旁注:如果你将脚本块放在标记中,它可能会占用空间(即7和Opera 9.2已知有这个问题)在某些浏览器中实现布局,所以将它们放在一个隐藏的div中(使用类似css的类) :div上的.hide { display: none; visibility: hidden; }

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

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

答案 1 :(得分:38)

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

一些更现代的浏览器违反了这条规则,因为没有阻止下载脚本(ie8是第一个),但整体而言下载并不是阻塞所花费的大部分时间。

查看Even Faster Websites,我刚刚读完它,它完成了将脚本放到页面上的所有快速方法,包括将脚本放在页面底部以允许渲染完成(更好的用户体验)

答案 2 :(得分:15)

W3Schools有nice article on this subject

<head>

中的脚本
  

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

     

将您的功能放在首位   这一方面,他们都在一个   地方,他们不干涉   页面内容。

<body>

中的脚本
  

如果你不想要你的脚本   放在一个功能内,或者如果你的   脚本应该写页面内容,它   应该放在身体部分。

答案 3 :(得分:4)

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

答案 4 :(得分:1)

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

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