专栏首页京程一灯澄清对AMP的十个误解

澄清对AMP的十个误解

1. AMP 是一个新的渲染引擎 / 编程语言

AMP 是一套开源的 web 组件格式和类库。与其它类库或者框架相比,AMP 最大的区别在于,它采用了白名单策略,来约定你可以做什么。

为什么要限制一些东西的使用呢?这是因为一些看起来很无辜的小代码很容易拖慢网站的性能。而且一段时间后回来排查这些性能问题会是一件非常困难的事情。这就像你在德国的 Autobahn 快速路上开车,却只在右道行走,不知道最左边的道路才是更快的。AMP 就是这样一种技术,强迫你走到最左边的快速道路,并且保证你前方的道路是没有障碍的。

AMP 带来的并不只有限制,它还提供了很多的自定义标签,这些标签都有各自内置的功能。当你使用这些自定义标签,并遵守一些其它的规则,那么 AMP 将通过一些手段保证你的网站速度是非常快的。这些手段主要包括强制静态布局、高效率资源加载和一些其它的优化。

AMP 有一份文档,规定了什么样的标签是兼容的,什么样的标签是不兼容的。它还发布了一个内置的验证工具,可以让你看到当前页面的是否符合 AMP 文档的要求。需要强调的是,从技术上来说,即使不遵守所有的规定,AMP 页面也能运行得很好,只是你的页面无法通过 AMP 验证(从性能上来说,不遵守 AMP 规定到一定程度的时候,AMP 做的性能改进也会全部失效,另外如果有一些东西是要求与 AMP 页面协作的,那么你的页面可能无法正常显示 )。但同时,这也意味着 AMP 所强调的一些特性全部没有了。

还有更多解释吗?

真的没有了。AMP 只是一套 web 组件生态系统而已。但是,因为可以很容易通过编程的方式来确定一个页面是合法的 AMP,就可以做更多炫酷的事情了。比如:

  • 合法的 AMP 可以使用免费、高速的缓存(例如 Google AMP Cache)
  • 基本可以确认合法的 AMP 页面速度很快,且对用户友好
  • AMP 页面是“自包含”(self-contained)的(译注:指页面是完整、独立的),所以可以被嵌入第三方平台

这也允许第三方平台做一些很炫酷的事情:

  • 出现在 Google 搜索的 Top Stories 轮播上
  • 从 Pinterest 上链接到 AMP 页面
  • 在 PWA 中使用 AMP 页面

2. AMP 是 Google 的项目

AMP 最早是由出版行业和 Google 在 2015 年提出来的(当然,一些促使 AMP 诞生的体验问题,比如移动端 web 页面加载慢等,属于明显的行业内共性问题)。从一开始,它就是由出版行业、广告行业、技术提供者和平台提供方一起携手开发的,除了 Google 以外,参与者还包括 Twitter、Linkedin 和 Pinterest 。AMP 从提出来的第一天起就是一个通过 Github 进行开放协作的开源项目。到现在为止,AMP 接受了来自超过 200 名贡献者的 Pull Request,这些贡献者绝大部分不是 Google 的员工。

Google 确实有一支团队在全职为 AMP 项目工作,AMP 项目的大部分贡献也来自这个团队,但这个团队也是通过和其它人一样的 Intent to implement 流程来工作。Google 团队也会将它们的周会纪要以及其它的文档发布出来,尽量保证外部贡献者都可以参与进来。

更新: 针对这一点,外界有一些疑问和评论。上面这两段话仍然有效,但是我补充一个更精简的结论:AMP 项目当前的核心贡献者都是 Google 员工,所以 AMP 可以称作是 Google 领导(Google-led)的项目。但是它是被当作一个独立的开源项目来看待的,我们正在邀请开发者和社区参与进来一起贡献,让他们也变成核心贡献者,使 AMP 项目更加独立。

3. AMP 需要 Chrome 才能运行

绝对不是这样!AMP 是一个跨平台、跨浏览器的类库,支持所有流行的移动浏览器和桌面浏览器的最新两个版本:

AMP 可以运行的浏览器

4. AMP 限制了我的布局和设计

你肯定会被 AMP 能做的事情惊讶到。AMP 确实限制了一些标签和对性能影响很大的 CSS 属性的使用,但是整体来看,在为站点编写样式时,受到的限制非常小。想写一个疯狂的 5 层 flexbox 嵌套布局?那就写吧。想基于伪元素写一个疯狂的 UI ?也 OK。

下图中可以看到 AMP 页面被完美的嵌入到另一页面的元素中:

5. AMP 只适合轻量级页面

有几分道理,但也有误导性。这主要取决于你如何理解“轻量”。严格来说,AMP 的目标是静态内容。但我们所说的静态内容同样可以包含具有艺术气息的动画、侧边栏、灯箱广告、手风琴导航、轮播等等。你可以查看 AMPByExample 中的一些高级例子:

https://ampbyexample.com/#advanced

6. AMP 只适用于移动端

诚然,AMP(Accelerated Mobile Pages)中的“Mobile”无助于澄清这个问题,但是这个说法还是跟事实完全不符。

AMP 是一个非常强大的跨平台解决方案,它希望出版行业和开发者将工程资源从细碎的多平台兼容支持中解放出来,将焦点放到创建伟大的新产品特性上,而这些产品特性可以被任何设备上的所有用户轻易访问到。

AMP 本身是在响应式设计的概念支持下被创造出来的。目前有与 AMP 集成的平台大部分是聚焦移动端的,但是在桌面端,你也可以从 AMP 中获取得很多好处。

想知道如何使用 AMP 来处理不同分辨率和不同设备的话,可以看我的另一篇文章“AMP 中的’mobile’”:

https://paulbakaus.com/2016/07/01/about-that-mobile-in-accelerated-mobile-pages/

7. 我现有的网站上无法使用 AMP

我们已经澄清过第 4 点,并没有什么特别的理由让你现在的网站无法使用 AMP,因为当你读完第一个问题后,就知道了 AMP 只是一个 web 组件类库而已。事实上,AMP 项目主页就是完全使用的 AMP:

AMP 项目主页使用的 AMP

当然,和其它类库一样,AMP 并不适合每一个人。在动手前想一想在 AMP 的强制限制(同时也带来好处)下,你的网站是否能正常运行。如果答案是肯定的,那么就切换到 AMP 吧。有一个基本的原则,如果你的网站没有静态内容,并且页面并不是最深层次的页面(译注:原文 leaf pages,leaf 指树状结构中的叶子节点,对应到网站一般指最深层次的页面,例如文章页),例如入口页,也就是用户从搜索中点进来的页面,那么 AMP 可能不适合你。

8. 如果我自己做优化,那 AMP 就没什么用

AMP 的优化是“无脑优化”,即使你身边没有 web 开发大师,它也能帮助你。我们对将网站性能优化到极致这件事情感到自信和骄傲。事实上,因为 AMP 是一个通用库,它可能会漏掉一些针对你的网站特殊场景下的优化策略,这意味着你自己的手工优化工作很可能会带来更好的性能。

但到今天为止,浏览器和一些大的平台例如 Google 搜索,仍然没有办法来确认你的网站是非常快速且对用户友好的。所以如果你选择自己做优化工作,你可能能得到一个非常快的网站,但是没有办法让其它人确信。而 AMP 的验证使得它对于第三方平台非常有吸引力。

9. AMP 只对出版发行行业有好处

没错,如果你将你的新闻站点变成 AMP,就有机会出现在 Google 的 Top Stories 轮播上,并且 Google 会在移动端搜索结果中使用一个内联的查看器来加速 AMP 页面。但是 eBay 也创建了 AMP 页面(示例),尽管它们并不是新闻网站。

为什么 eBay 要选择 AMP?它们自己是这么说的:

AMP 的好处之一在于,它是一套构建移动端 web 页面的最佳实践的集合。我们之前已经在遵守这些最佳实践中的一部分,但是这些不同的做法分散在各个团队中,而且每个团队都有自己的偏好。AMP 的出现让我们可以更好地整理加固这个最佳实践的清单,并将它们作为常规开发周期中的一部分。

10. 我得在 AMP 和 PWA 中做出选择

AMP 和 PWA 是互补的技术,它们的使用场景完全不一样。如果将它们结合在一起使用,你就能使用它们创建出我认为目前最完美的内容站点:

  • 用户发现了你的内容的链接,点进来了
  • 内容被瞬间加载完毕,并且看起来很舒服
  • 阅读完之后,用户被邀请阅读更多内容,或者邀请用户使用一个更好体验的版本,它们由快速导航、通知推送、离线支持等技术支持
  • 当用户接受了你的邀请后,他们将被引导到一个可以安装到桌面的版本,这个版本的使用体验就像 App 一样

听起来非常棒对吧?你需要做的只是下面这些(或许有稍许变化):

  • 最深层面的页面(有内容的页面,而不是概览页面)使用 AMP 发布,以获得瞬间加载的体验
  • 当用户浏览你的内容的时候,在这些 AMP 页面中使用初始化缓存和 PWA 应用外壳(PWA app shell)
  • 当用户点击网站上的其它链接的时候(例如,在类似 App 的体验中,点击底部的按钮),Service Worker 接管请求,然后加载 PWA 应用外壳
  • 最后,已经加载好的 PWA 应用外壳可以将 AMP 作为数据源嵌入到页面,这将使得你只需要为相同内容创建一个后台(既可以作为单独的 AMP 浏览,也可以作为 PWA 的数据源)

如果同时谈到 AMP 和 PWA 的话,还有更多话题可以说,所以请期待在这个主题上的后续深度文章吧。

总结

现在你有答案了。针对 10 个误解,我们给了 10 个澄清的答案,希望能给你一个对 AMP 更大更清晰的印象,也让你想清楚 AMP 对你来说是否适合。


往期精选文章

ES6中一些超级好用的内置方法

浅谈web自适应

使用Three.js制作酷炫无比的无穷隧道特效

一个治愈JavaScript疲劳的学习计划

全栈工程师技能大全

WEB前端性能优化常见方法

一小时内搭建一个全栈Web应用框架

干货:CSS 专业技巧

四步实现React页面过渡动画效果

让你分分钟理解 JavaScript 闭包



小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。

本文分享自微信公众号 - 京程一灯(jingchengyideng)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript This 的六道坎

    鉴于this风骚的运作方式,对this的理解是永不过时的话题,本文试图通过将其大卸六块来钉住这个磨人的妖精。

    疯狂的技术宅
  • 必须要会的 50 个React 面试题(上)[每日前端夜话0x40]

    如果你是一位有抱负的前端程序员并准备面试,那么这篇文章很适合你。本文是你学习和面试 React 所需知识的完美指南。

    疯狂的技术宅
  • 国庆节前端技术栈充实计划(8):我使用 AngularJS 和 ReactJS 的经验

    在过去的几年里,网站进化成了复杂的网页应用。曾经的互联网只涉及到简单的商业信息展现,而如今,看看 Facebook、Slack、Spotify 以及 Netfl...

    疯狂的技术宅
  • Google - AMP框架分析及外贸站接入解决方案!

    AMP(Accelerated Mobile Pages – 加速移动页面)是 Google 推出的一种为静态内容构建 Web 页面,提供可靠和快速的渲染,加快...

    Levi.Ackermann
  • 什么是amp?amp有什么用处?

      AMP是移动页面加速器Accelerated Mobile Pages的简称,是Google带领开发的开源项目,目的是为提升移动设备对网站的访问速度。它的核...

    ytkah
  • 拖拽手势和清扫手势冲突时(UIPanGestureRecognizer和UISwipeGestureRecognizer冲突时)

      故事发生在这样的情境上:给整个控制器添加了一个拖拽手势,然后又在控制上的每个Cell上加了左滑清扫手势,然后问题来了:只有拖拽手势起作用,而左滑手势没有效果...

    tandaxia
  • Silverlight本地化

    ilverlight本地化 简单的实现多语言版本的Silverlight应用。 日益国际化的同时,需要我们开发的应用根据不同的来访者显示不用的语言,Silv...

    用户1172164
  • 实例化模型

    完成业务逻辑处理,包括对数据表的增删改查(CUED)操作。对处理的数据进行封装;对字段及属性进行验证;完成对象及属性的过滤等功能。Thinkphp模型类的命名规...

    公众号php_pachong
  • Spring Cloud Gateway中异常处理

    最近我们的项目在考虑使用Gateway,考虑使用Spring Cloud Gateway,发现网关的异常处理和spring boot 单体应用异常处理还是有很大...

    只喝牛奶的杀手
  • Silverlight本地化

    ilverlight本地化 简单的实现多语言版本的Silverlight应用。 日益国际化的同时,需要我们开发的应用根据不同的来访者显示不用的语言,Silv...

    用户1172164

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动