什么是amp页面

本文作者是360奇舞团的前端工程师

#AMP (Accelerated Mobile Pages)是一个开源的框架来帮助提升整个移动端页面的加载速度,使用户体验更好,本身是 google 开发设计的。

背景

15,16 年左右的时候,移动端正是飞速发展的时候,而当时从前 PC 的站点流量正在被大量的移动端页面所吞噬。大概 16 年左右,相关统计表明就已经有超过 6 成的流量来自移动端了。而现在来看用户的流量移动端应该不止 6 成了。而当时的 google 肯定也是这么认为的,AMP 就这么诞生了。

google 期望他们能对 web 进行一次再定义,让更多的人能用他们的标准来生产 AMP 的页面。能够成为一个普通网页的降级版本,尤其是在弱网条件下。

介绍

AMP 大致分为 AMP-Html, AMP-Js, AMP-Cache 三个模块。

AMP-html

是为了优化整体的页面加载性能,单独部署的一套 html 方案。整体上与 html 没啥区别,写法上也基本一致。doctype 与 h5 的一样,只不过在 html 标签上面,需要单独声明下 amp 页面的特殊表识。

也基本相同,里面有一点需要注意的是,字符集 mete 标签必须要放在 head 的第一个位置。

amp 需要定一个一个明确的文档字符集。而放在第一个的原因是为了防止放在下面时,上面已经解释过的文档被重新解释执行。

同时需要申明一个 link 标签,这个标签的意思是你需要一个基本的版本页面,让你可以在 amp 文档中查找主版本,也就是主页面(非 amp 版本)。

其实这个就是在 seo 优化中很重要的一个部分,大多数搜索引擎对于重复内容的筛选过滤,一致时 seo 很重要的部分。而 amp 天然有这方面的特点。所以 amp 页面要求你必须要声明一个canonical类型的标签,来做 SEO 优化。

<link rel="canonical" href="/article.html">

对比来说,可能你的amp页面名字叫article.amp.html

viewport

amp同样要求有一个明确的viewport属性。同理,也是为了页面的加载性能,防止页面大小重绘引起的性能问题

css

对于css有强要求,功能上基本都支持,只是一些特殊属性是不允许用的。 !important 和 *号选择器

而在引用上,不允许外链的形式引入css,同时也不支持行内样式。只能使用内嵌的style标签来引入样式表。

当然如果用一些脚手架的话,可以使用工具将开发体验更好的样式在线上打入到线上版本中。

标签

对于html的一些标签,需要提换成amp的相关标签。

比如:




像本身支持一些属性,比如layout="responsive" ,就是可以设置图片的布局方式。

这就有点像htmx这种强调用用html来减少js的工具了。而amp本身对事件类的支持也跟htmx很像。

ini 复制代码
<button on="tap:hello.hide">

这段标签表示了当button被触发事件的时候,id为hello这个dom节点会被隐藏。

同时,amp也支持一些自定义的标签:

AMP-Js

引用基本库

在amp页面中,需要前置的引入一个amp的库

xml 复制代码
<script async src="https://cdn.ampproject.org/v0.js"></script>

同时需要注意的是,script标签必须是async的,amp对js引入有两个要求:

  1. js必须是异步的 (比如:async标识)
  2. js是amp的库和针对amp页面上的组件的

什么是页面上的组件?

其实amp设计的组件和 web components 差不多,

上面已经提及,就是一些第三方的库或者js文件是没有办法直接引用的,只能通过类似自定义组件的方式引入

xml 复制代码
<script async custom-element="amp-base-carousel" src="https://cdn.ampproject.org/v0/amp-base-carousel-0.1.js"></script>

而引入后的组件,可以像下面这样使用:

arduino 复制代码
<amp-base-carousel width="600" height="400" layout="responsive">
  <amp-img src="https://cdn.xxx.com" width="600" height="400" layout="responsive"></amp-img>
  <amp-img src="https://cdn.xxx.com" width="600" height="400" layout="responsive"></amp-img>
</amp-base-carousel>

amp提供了一个大量组件的库,可以让页面来引用

amp页面能力检查

类似chrome的pwa检查,它会根据你的项目情况,对你页面进行评分,看看是否符合amp页面的标准。

上面说的一些必要条件,都可以利用这个来检测出来。开启的话,只需要在页面上面加入 #development=1就可以开启(前提的引入了它们的库,里面包含 AMP validator )

下面是一个基本的要求表:

AMP-Cache

这个可以理解为一钟CDN的能力,大致上就是会缓存住你用户曾经访问过的所有AMP页面。而这种能力往往都是搜索引擎提供的。

比如现在主流的两种AMP-Cache的CDN提供者就是Google AMP Cache 和 Bing AMP Cache。 对于有AMP标签的页面,AMP-Cache就会缓存住页面内容。

当然,你也可以自己上传到CDN来主动缓存页面,不过目前只有google支持。

问题

复杂应用场景

其实看上面的大致描述,就可以看出,AMP的设计对于复杂的前端页面来说,使用起来太麻烦,设置说根本没法使用。其实它本身的定位就是展示页面的快速产出,类似文章类,新闻类的页面。其能力也是为了部分对标苹果和亚马逊推出的新闻类的网页方案。

它可能更适合与我们的CMS系统相结合,来使移动端的体验更好,而不是处理复杂交互的前端页面。

外部评价

这个也是AMP产生后几年,对这个项目有些人产生了质疑。

  1. 就是它的维护成本较高,需要严格按照标准来产生页面,灵活性不够。
  2. 它本身标榜的是良好的用户体验,但是似乎它只停留在了性能体验上面,而当前前端页面的用户体验,性能只是一方面。
  3. 缓存问题让一些广告更新策略变得很困难
  4. google的意图似乎也让使用者很担心,他们觉得google在控制互联网。大公司的抵触也让推广变得困难。

基于上面的原因,AMP的推广和使用都有很大困难,但是目前来看,他们的github仍然在更新,谁也不知道未来会是什么样的。毕竟技术爆炸这种事会很快的影响每一个人,几年前MVVM的模式在当时的人看来也很奇怪。

引用:

www.semrush.com/blog/amp-pa... amp.dev/documentati...

相关推荐
CyberSecurity_zhang2 个月前
多核架构的基本概念
mcu·汽车·amp·smp·同构多核·异构多核
renkai72110 个月前
彻底解决vue接入高德地图不显示公司名字问题
vue.js·map·高德地图·amp
SEO_juper1 年前
关于 Google AMP 和 SEO
搜索引擎·google·seo·amp·google amp