首先要知道什么是AMP以至于为什么要选择AMP?

AMP他并不是一门新技术,他只是一种能够让页面更快打开的一种办法。之所以用他是因为AMP能够带来SEO排名优化。另外Google搜索结果对AMP页面有预加载处理,能让用户更快地达到我们的定向页面。

AMP项目开发

AMP项目开发和普通站点开发几乎是一样的,但为了最大限度提升性能,AMP项目页面应该注意几点譬如:

1、为了避免JavaScript 延缓页面渲染,AMP页面不能包含自己编写的Javascript。

2、css都必须内联,以减少HTTP请求,并且有50KB的大小限制。

3、AMP页面允许第三方Javascript,但仅限在沙盒环境下的iframe中。

4、几乎可以使用所有原生的HTML标签,但对img等会产生外部资源依赖的标签,只能使用amp-img自定义标签。

基于这些页面上所有的交互逻辑都必须通过css实现,无法依赖JS,这样的话对于实现比较复杂的交互时AMP就不太优秀了,其实这也是和AMP原则相一致的,JS虽然丰富了页面同时也是页面优化噩梦的开始。当开发完成后必须保证页面是符合AMP规范的,只有符合AMP规范的页面才能被搜索引擎收录。(在Chrome中安装AMP Validator插件,当页面是符合AMP规范的时候右上角的插件按钮会变绿)页面通过验证以后,我们还需要在link配置中amphtml和canonical,让Google搜索发现我们的页面。

如果同有两个页面一个AMP版本的一个非AMP版本的,

那就为非AMP页面添加标记

<link rel = " amphtml " href = " https:// www.example.com/url/to/amp/document.html">

为AMP页面添加

<link rel = " canonical" href="https://www.example.com/url/to/full/document.html">

如果是只有一个版本的网页并且该版本是AMP网页,这样依然需要给他添加规范链接,这个时候会指向它自身。

<link rel ="canonical" href = "https://www.example.com/url/to/amp/document.html">

现在AMP页面开发工作基本完成可以发布了。

可能会出的问题:

1、AMP对表达式有限制,超过50控制台会报错,解决=> 对于这个问题除非AMP放开复杂度限制,否则我们能做的只能是尽量提前运算,当需要某个计算结果的时候可以直接使用,要尽量简化交互,减少参数。这个问题在使用的时候一般都会遇到。

2、AMP限制编写Javascript,不允许读写Cookie、localStorage,但很多时候我们需要用,我们的解决方法是=>通过http set - cookie 方式解决前端无法记录cookie的问题。

3、amp-form只能提交ajax post请求,无法做到post表单形式跳转。所以在开发过程中尽量避免出现post表单形式的请求,一般改用ajax post加页面跳转的形式来提交,在迫不得已的情况下可以考虑通过增加非amp的中间路由,在中间页中构造表单并自动提交数据。

4、AMP CROS:用户最终访问的是AMP Cache,如果页面上有额外的异步请求,就会有跨域限制,所以我们要在服务端开启跨域,返回头设置AMP-Access-Control-Allow-Source-Origin.

5、amp-iframe有sandbox属性,用来指定iframe内部的站点权限,默认值为空,如果希望iframe内部可以执行js脚本,则需要设置成“allow-scripts”;如果需要添加内部发送同域请求的权限,则需要设置成“allow-scripts allow-same-origin”,如果amp-iframe的src是同域站点,那么sandbox属性必须不能包含allow-same-origin,这样做杜绝了脱离amp控件发送请求的可能性。

6、AMP下统计页面埋点必须是基于amp自带的统计控件,目前amp封装了市面上大部分第三方统计系统,一般公司内部统计工具没有amp对应的控件,这个要评估统计工具。

& Google前沿的AMP技术的更多相关文章

  1. [转载] Google数据中心网络技术漫谈

    原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...

  2. 漫谈 Google 的 Native Client 技术(一)---- 历史动力篇(Web 本地计算发展史)

    转自:http://hzx5.blog.163.com/blog/static/40744388201172522313463/ 漫谈 Google 的 Native Client 技术(一)---- ...

  3. google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线

    新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...

  4. 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)

    转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...

  5. Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)

    Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...

  6. 腾讯QQ空间超分辨率技术TSR

    腾讯QQ空间超分辨率技术TSR:为用户节省3/4流量,处理效果和速度超谷歌RAISR 雷锋网AI科技评论: 随着移动端屏幕分辨率越来越高,甚至像iPhone更有所谓的“视网膜屏”,人们对高清图片的诉求 ...

  7. google的云盘与公司网盘

    很多人都很期待Google推出的云存储服务,也就是公司网盘.因为多数人相信,没有比google更适合做云存储的公司了,作为一个标准的Web公司或者说互联网公司,云端理所应当的优秀.但比起几年前听传言时 ...

  8. Google 云计算中的 GFS 体系结构

          google 公司的很多业务具有数据量巨大的特点,为此,google 公司研发了云计算技术.google 云计 算结构中的 google 文件系统是其云计算技术中的三大法宝之一.本文主要介 ...

  9. Linux 容器技术史话:从 chroot 到未来

    Linux 容器是一个在单一 Linux 主机上提供多个隔离的 Linux 环境的操作系统级虚拟技术.不像虚拟机(VM),容器并不需要运行专用的访客(guest)操作系统.容器们共享宿主机的(host ...

随机推荐

  1. 经过踩坑,搭建成功的Appium自动化测试环境

    因为最近本人准备搞app自动化,所以就搭建环境过程记录下来(主要踩过好几个坑) 期间有点烦躁,后面调整了下心态还是成功弄好了. 一.Appium环境搭建准备软件 所需要到的软件如下: 1.安装JDK1 ...

  2. ASP.NET Core MVC 如何获取请求的参数

    一次HTTP请求,就是一次标准IO操作.请求是I,是输入:响应式O,是输出.任何web开发框架,其实都是在干这两件事: 接受请求并进行解析获取参数 根据参数进行渲染并输出响应内容 所以我们学习一个框架 ...

  3. G. 神圣的 F2 连接着我们 线段树优化建图+最短路

    这个题目和之前写的一个线段树优化建图是一样的. B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路 之前这个题目可以相当于一个模板,直接套用就可以了. 不 ...

  4. java读源码 之 queue源码分析(PriorityQueue,附图)

    今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员--PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所耳闻吧,什么?没..没听过?emmm... ...

  5. 201771030121-王国伟 实验一 软件工程准备—<问题提出与博客首秀>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 本次作业要求链接 https://www.cnblogs.com/nwnu- ...

  6. Android Bluetooth How To--Based on Android L Bluedroid

    Android Bluetooth How To(Based on Android L Bluedroid) 持续更新中… 1.How to enable btsnoop log? a) UI Set ...

  7. 解决:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure(真实有效)

    数据库连接失败 一.例如我在SpringBoot项目中使用了阿里的数据库连接池Driud. 有次在启动的时候,会报这样的错: Caused by: com.mysql.cj.exceptions.CJ ...

  8. threading模块—Python多线程编程

    Threading 模块 threading 模块除了提供基本的线程和锁定支持外,还提供了更高级别.功能更全面的线程管理.threading 模块支持守护线程,其工作方式是:守护线程一般是一个等待客户 ...

  9. Unity接入友盟分享遇到的坑

    最近项目接了一下友盟分享的SDK,中间遇到了几个坑,写下几条注意事项记录一下. 接入之前需要准备友盟开发者账号,相应平台开发者账号(微信.QQ.新浪微博)等... 安卓端: 1.确保 AndroidM ...

  10. 20184302 2019-2020-2 《Python程序设计》实验一报告

    20184302 2019-2020-2 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:20184302 实验教师 ...