【发布时间】:2015-05-24 06:20:24
【问题描述】:
我想从我的输出中删除更多不必要的字节,而且似乎可以接受(在实践中)去除可以加起来相当多的内容通过省略/折叠 DOM 元素属性之间的间隙,HTML 标记中的空格。
虽然我已经测试和研究过(在这两种情况下都做了一点),但我想知道它会有多安全?
我在 Chrome (43.0.2357.65 m)、IE (11.0.9600.17801)、FF (38.0.1) 和 Safari 中进行了测试(5.1.7 (blah-di-blah)) 他们似乎并不介意,并且在 The Specs 中找不到任何关于属性之间空格的具体内容。
w3.org's Validator 抱怨,这强烈表明这不安全并且不应该期望工作,但是(总是有一个“但是”)它可能是 要求 仅当不存在引号时(出于显而易见的原因),空格才是严格的。
另外(尖刻但尖锐):它们的 SSL “过时”不会激发对他们意见的信心。
我还注意到someone's HTML compressor 可以(启用时)在属性值中去掉引号(例如 id),这意味着如果不是,至少大部分所有 HTML 解析都集中在等号两侧的文本(当然布尔值除外),并且在使用引号的情况下,它们将被视为优先分隔符。
所以,会:
<!DOCTYPE html><html><body>
<a href="http://example.org"target="_blank"title="This is a test">Yabba Dabba Doo!</a>
</body></html>
▲ 曾经出错,如果出错,在什么条件下?
还有什么其他原因可以在生产输出中维护这个空白(代码“可读性”在这种情况下不是问题)?
更新(因为找到一个答案):
虽然我基本上回答了我自己的问题,即有一个规范来管理属性之间是否应该有一个空格,但我仍然想知道在使用带引号的值时是否可以考虑省略它们实际上 安全,并希望得到有关这一点的反馈。
考虑到在生产 HTML 中意外省略空格的频率,并且我测试的浏览器似乎并不介意它们何时出现,我认为如果浏览器无法处理带有这些的文档的情况非常罕见空格省略。
尽管在几乎所有情况下都遵循规范是明智之举,但这可能是一次作弊可能可以接受吗?
毕竟 - 如果我们能够神奇地在不影响输出质量的情况下节省数百字节,为什么不呢?
【问题讨论】:
-
这是一个有趣的问题,但是相关的 html 规范是怎么说的呢?如果规范说它是有效的,那么它是有效的,否则不应该依赖浏览器的宽容性质(在我看来,这种宽容是第一代浏览器的一个长期错误,尽管可以说它帮助了网络早期)。
-
@DavidThomas :如前所述,我在读过的规范中没有发现任何甚至提到空格的内容 - 更不用说是否需要它们了。这就是我问这个问题的原因。希望有人真正知道,或者知道没有关于它们的规范——在这种情况下,可以假定默认授予权限。
标签: html cross-browser whitespace minify specifications