amp-html的示例页面,以及目前可用的少数amp-html站点,包含以下代码:
<style>body {opacity: 0}</style><noscript><style>body {opacity: 1}</style></noscript>
为什么会这样?如果时间紧迫,将支持javascript的客户机的不透明度设置为0似乎不是一个好主意。将不透明度设置为1的JavaScript可能不会被缓存,下载缓慢,或者根本无法加载(例如,中国倾向于阻止谷歌服务器,因此谷歌CDN可能有问题)。
干脆不改变不透明度,只使用JavaScript操作来改进页面不是更好吗?与完全不使用Javascript相比,使用amp-html有什么改进?
请注意,我们正在考虑至少改变一点以优化非js用例,但功能和理性将保持不变。
AMP页面确实需要AMP JS库来正确渲染。在正常情况下,让它们在没有它的情况下渲染会导致不和谐的体验,因为它下载得很快或已经缓存了。最初,我们通过使主JS二进制同步来实现这一点。这有非常相似的效果,不需要不透明度样板。然而,这并不允许浏览器开始对文档应用样式——如果不是因为它在字体下载的关键路径上,因为浏览器只下载与样式匹配的字体,这并不是那么糟糕。
目前的方法存在问题,我们正在https://github.com/ampproject/amphtml/issues/323跟踪以进一步优化它。
更新: AMP现在使用CSS动画来避免依赖JS。
为什么amp-html有一个隐藏body元素的css规则
AMP使用来自Web组件的自定义元素。例如,组件amp-img
替换每个标记<img>
:
这些组件可以取代规范中不直接允许的HTML5元素,如amp-img和amp-video。[源]
与JavaScript应用程序一样,最好在初始DOM操作期间隐藏页面。
使用amp-html比根本不使用Javascript有什么改进?
AMP设法以最佳顺序惰性加载资源。它是为大页面上的丰富内容而设计的:但是我们如何从好的变成,比如说,即时的?我们会作弊:)AMP文档从头开始设计,以有效地预渲染。浏览器早就通过
<link rel=prerender>
标签支持预渲染,但他们需要对这种机制保持保守,因为预渲染可能会很昂贵。使用AMP HTML,我们增加了告诉文档的能力:渲染自己,但只在可见的部分,只有那些不是CPU密集型的元素,以尽量减少预渲染的成本。有了这种机制,AMP文档的引用者可以在用户采取更激进的行动之前启动文档的呈现,因此在许多情况下,当用户单击时,文档将完成呈现。[源]