遗漏结束标签是否有效?

时间:2012-04-12 19:54:24

标签: html html5 specifications

我记得前一段时间读过,在某些情况下会遗漏结束标记(例如</li>)会加快网页的渲染(以及加载/解析,因为字节数较少)?

不幸的是,我忘了我读到的地方,但我记得它说这个功能是HTML 4.0特有的。

由于我无法访问此来源,我想知道是否有人可以确认这个或链接到w3c上的文档(因为我自己无法找到它)?

谢谢!


编辑:忘记提及我打算询问这个行为是否也可以在HTML5中使用。


编辑2:我再次找到article,它确实提到它只会加快页面的下载速度,而不是实际呈现:

  

省略这些元素的结束标记的一个很好的理由是因为它们为页面下载添加了额外的字符,从而减慢了页面的速度。如果您正在寻找加快网页下载速度的方法,那么摆脱可选的结束标记是一个很好的起点。对于包含大量段落或表格单元格的文档,这可以节省大量资金。

很抱歉提出一个毫无意义的问题! :(

6 个答案:

答案 0 :(得分:3)

以下是HTML 4.01元素的列表。

http://www.w3.org/TR/html401/index/elements.html

“结束标记”列说明结束标记的可选位置 但请注意,这仅在HTML 4.01中有效。在Xhtml中,所有结束标记都是必需的。不是100%肯定HTML5。

我写了一次HTML解析器,并且相信我,如果你是一个解析器并且你在<p>内并且遇到</table>结束标记,那么检查你的文档会比较慢如果这是正确的,如果是,那么首先关闭当前<p>,而不是仅仅遇到</p>

修改
啊,发现它:http://dev.w3.org/html5/html-author/#index-of-elements
与HTML 4.01相同的要求。

新修改:
哦,这是2009年的一页。这一页更新了:
http://dev.w3.org/html5/spec/syntax.html#optional-tags

答案 1 :(得分:2)

AFAIK,在XHTML中,您必须始终至少自行关闭代码<img ... />

在HTML(非xml-html)中,某些标签不需要关闭。例如<img>。但是,我建议您确定您确切知道您要定位的版本,并使用W3C的验证服务进行仔细检查。

http://validator.w3.org/

我不知道这会如何加快速度,除非你必须每页发送更少的字节数据(某些标签没有/,其他标签没有结束标签。)至于构建DOM,我不知道给定实现(webkit,mozilla等)的细节,以了解解析哪种方式更快。我认为XML只是因为它更经常。

编辑:是的,这种行为在HTML5中可用。请注意,帮助页面令人困惑,例如:

http://www.w3schools.com/html5/tag_meta.asp

非xml-html中的Meta不需要/,但可以拥有它。由于(在我看来)倾向于使用XML风格的HTML,结尾斜杠在书面HTML中更为普遍,但您可以看到它们在文档中使用这两种样式。 Validator会让您确定您可以获得的内容。 :)

答案 2 :(得分:2)

某些版本的HTML规范中的某些标记具有可选的结束标记。但是,我认为排除结束标记通常被认为是不好的形式。

如上所述,li的结束标记在html4中是可选的:

http://www.w3.org/TR/html401/struct/lists.html#h-10.2

技术上这是有效的:

<ul>
    <li>
        text
    <li>
        <span>stuff</span>
</ul>

但是,每li只保存5个字符,并不值得您在可读性/可维护性方面的损失。

编辑:HTML5规范很有意思:

  

如果li元素是,则可以省略li元素的结束标记   紧接着是另一个li元素或者如果没有更多   父元素中的内容。

答案 3 :(得分:2)

浏览器通常可以忽略结束标记(通常足够聪明,知道你在做什么)。但是,unclosed标签所具有的任何css或js标记属性都会影响后代和/或兄弟标记,让您对发生的事情感到头疼。

虽然XHTML确实希望您向自包含标记添加结束正斜杠,但HTML 5却没有。

XHTML: <img src="" />
HTML5: <img src="">

答案 4 :(得分:2)

如果您使用的是xhtml DOCTYPE,那么答案是'是',它们是必需的。 xhtml文档需要是有效的XML,这意味着所有标签都需要正确关闭。

HTML文档有点不那么挑剔。某些标签被指定为“自闭”,这意味着您无需专门关闭它们。其中包括<br><img>

浏览器通常非常宽松,因为它们需要能够处理编写错误的代码。但请注意,有时跳过结束标记会导致不同的浏览器以不同的方式解释您的代码,并产生难以调试的布局故障。

就页面加载速度而言,您可能会认为下载速度和带宽成本会有微小的收益,但这可能是微不足道的。在渲染方面,我怀疑如果你提供的HTML无效,你实际上会失去速度,因为浏览器必须更加努力地解析它。

因此,即使有速度增益,它也是微不足道的,我不认为故意跳过结束标签是值得的。如果您运营的网站流量很大,那么减少带宽可能会有所帮助,但我们很少有人为Facebook或Google写作;对于几乎所有人来说,编写有效代码比尝试削减这几个字节更好。

如果您担心带宽和页面加载速度,可能还有其他更好的方法来减少页面加载大小。例如,使用gZip压缩文件将大大减少带宽,对代码或浏览器没有任何影响。 gZip压缩可以在您的Web服务器中配置,因此您只需将其打开并忘记它。您还可以通过剥离不必要的空白来“缩小”CSS和JS代码。 (HTML也可以在一定程度上缩小,但要注意空格在HTML中与语法相关,因此在所有情况下缩小可能都不是正确的做法。)

答案 5 :(得分:1)

在HTML 4.01中,1999年成为W3C推荐方式,你是对的:

  

9.3.1段落:P元素

     

开始标记:必需,结束标记:可选

http://www.w3.org/TR/1999/REC-html401-19991224/struct/text.html#h-9.3.1

至于<li>

  

开始标记:必需,结束标记:可选

http://www.w3.org/TR/1999/REC-html401-19991224/struct/lists.html#h-10.2