2011-04-19 44 views
2

<script>标签放在关闭<body>标签之前,将相同的标签放置在<head>部分并指定defer="defer"属性?JavaScript推迟

谢谢。

+0

no。 // 15个字符。 – Raynos 2011-04-19 19:05:09

回答

2

是/否。

是的,因为放置defer标签会一直等到文档在执行前加载。

没有,因为在</body>标签之前放置<script>并不一定意味着文档已完全加载,因为您可以在结束标签和结束HTML标签之间使用其他标签。示例

<html> 
    <head> 
    </head> 
    <body> 
    <script>...</script> 
    </body> 
    <link/> 
    <script> 
    although it is invalid HTML most browsers will render tags outside the body. This is 
    probably more of an error in code 
    <div> some content</div> 
</html> 

此外值得注意的是,脚本标记的defer属性在所有浏览器中都不起作用。

编辑:

在问候更快的页面加载性能,你可能想看看这篇文章它提供了一些指导原则,包括在哪里把脚本和CSS

http://developer.yahoo.com/performance/rules.html

+0

我问速度,不能在JavaScript中使用我会使用事件的DOM。放置在body之前的JavaScript对于页面结构等是不需要的,因此可以在页面可见之后最后加载。我不明白你在“否”部分的意思。“放置标签之前并不一定意味着文档已完全加载,因为您可以在结束标签和结束HTML标签之间使用其他选项卡”为什么我会在和之间有标签? – Francisc 2011-04-19 19:17:24

+1

@Francisc我编辑了我的答案,因为我有几个格式问题。对于那个很抱歉。关于你对速度的评论。我想提及的唯一项目是浏览器将根据需要缓存JS文件,并且实际上不会在缓存中加载js文件。使用延迟并不一定会使您受益,因为延迟只会在页面完全加载之前停止执行。它不会延迟调用来获取脚本文件本身。因此,在您的实例中,您会希望将脚本标签放在'<\body>'标签后面以获得更好的性能。 – 2011-04-19 21:36:21

+0

@JohnHartsock对于糟糕的跨浏览器支持没有评论? – Raynos 2011-04-19 21:44:19

1

延迟要求的Gecko 1.9.1本 布尔属性设置为指示 到脚本意味着 文档已 被解析后要执行的浏览器。由于此功能尚未由所有其他 主要浏览器实现,因此作者不应该使用 假设脚本的执行 实际上将被推迟。切勿从延期脚本 (因为Gecko 1.9.2,这会将 带走文档)调用 document.write()。不应在不具有src属性的脚本 上使用延迟 属性。 由于Gecko 1.9.2,在没有 src属性的脚本上忽略延迟属性 。但是,在Gecko 1.9.1即使设置了defer属性,也会延迟内联脚本。

当文档完成解析并且在<body>标签的末尾有相似但不完全相同。

注意到这一点也很重要,只适用于外部设置为src的脚本。

+0

谢谢你,雷诺斯。 – Francisc 2011-04-19 22:50:24

1

一般是,但是浏览器不能保证在加载页面后他们会执行JavaScript,除非你指定了这样的(defer =“defer”)。

+0

我不明白,是不是我说的:他们将加载DOM后执行defer =“defer”的代码? – Francisc 2011-04-19 19:14:52

+0

你的问题是:X和Y是一样的东西吗?那么,事实上,在大多数情况下,它们将是一回事。我说的是这不能保证。也就是说,浏览器不会告诉你:“如果你把脚本放在最后,它会在加载后执行”。他们通常会这样做,但如果他们在呈现页面之前运行脚本,他们不会违背他们的文档,因为这些文档稍后没有提到任何有关这方面的内容。 – Gabriel 2011-04-19 20:39:43

+0

谢谢,加布里埃尔。 – Francisc 2011-04-19 22:52:03