企尚网络论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1877|回复: 6

MIP引入

  [复制链接]

182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
发表于 2016-9-10 15:30:29 | 显示全部楼层 |阅读模式
什么是MIP

MIP(Mobile Instant Page - 移动网页加速器),是一套应用于移动网页的开放性技术标准。通过提供MIP-HTML规范、MIP-JS运行环境以及MIP-Cache页面缓存系统,实现移动网页加速。

MIP主要由三部分组织成:

  • MIP HTML
  • MIP JS
  • MIP Cache

MIP HTML 基于HTML中的基础标签制定了全新的规范,通过对一部分基础标签的使用限制或功能扩展,使HTML能够展现更加丰富的内容;MIP JS 可以保证 MIP HTML 页面的快速渲染;MIP Cache 用于实现MIP页面的高速缓存,从而进一步提高页面性能。



182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:31:58 | 显示全部楼层
1. MIP HTMLMIP HTML 基于HTML基础规范进行了扩展,下面是一段简单的MIP HTML代码示例:
  1. <!DOCTYPE html>
  2. <html mip>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.         <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
  6.         <link rel="stylesheet" type="text/css" href="https://mipcache.bdstatic.com/static/mipmain-v1.0.1.css">
  7.     </head>
  8.     <body>Hello World!</body>
  9.     <script src="https://mipcache.bdstatic.com/static/mipmain-v1.0.3.js"></script>   
  10. </html>
复制代码

MIP HTML 规范中有两类标签,一类是HTML常规标签,另一类是MIP标签。MIP标签也被称作 MIP HTML 组件,使用它们来替代HTML常规标签可以大幅提升页面性能。

例如,mip-img标签,它使得图片只在需要时才进行加载,减少了页面渲染时间,节省了用户的流量。



182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:32:52 | 显示全部楼层
2. MIP JS

MIP JS 用于管理资源的加载,并支持上述MIP标签的使用,从而确保页面的快速渲染,提高页面各方面的性能。

MIP JS 最显著的优势是能够异步加载所有外部资源,整个页面渲染过程不会被页面中的某些元素阻塞,从而实现页面渲染速度的提升。

此外,MIP JS 还涵盖了所有iframe的沙盒、于资源加载前提前计算页面元素布局、禁用缓慢css选择器等技术性能。


182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:33:34 | 显示全部楼层
3. MIP CacheMIP Cache 是通过 CDN(Content Delivery Network) 服务器缓存mip页面的。用户在访问 MIP 页面的时候,请求首先会发到 CDN 服务器,如果页面存在,则从 CDN 返回,如果 CDN 上不存在,则会请求第三方服务器。同时 MIP Cache 服务器会主区页面缓存到 CDN 上。在使用 MIP Cache 时,MIP 页面所需要的所有静态文件和外部资源都会被缓存到 CDN 上,并且页面中的资源链接会被转换成相对地址,很大程度上提升了页面渲染速度。每一个 MIP 页面都会绑定一个验证系统,在页面进行渲染时,这种验证器可以直接在浏览器控制台中输出页面的错误;并且随着代码逻辑的变化,能够展示其对页面性能以及用户体验的影响。


182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:34:48 | 显示全部楼层
MIP 加速原理

本文档为您详细阐释MIP页面的加速原理

经过精心设计的JavaScript

为了去除臃肿的客户端脚本,MIP文件不允许自定义JavaScript;对一些强依赖JavaScript的功能(如:广告、统计和交互),MIP提供与MIP runtime兼容的封装好的组件来实现。

JavaScript 引用原则:

  • 目前MIP不允许用户自定义JavaScript,需要用MIP 组件的形式引进来,从而确保安全性和性能表现
  • 可以引用mip-iframe来引入实现部分富交互的功能,这样,即使开发时使用最影响性能的document.write,也不会影响主页面的渲染
  • MIP组件是开源的,允许开发者自定义功能组件,项目也将持续提供多样的组件,以适应不通的需求

所有静态资源需要标明尺寸

在页面开发时,资源常常不会被设定宽高,特别是使用广告或者通过调用 `document.write() 注入的时候。由于资源大小不能确定,页面经常要进行反复重新的绘制;

现在,MIP要求将所有的资源(广告、图片、音频和视频)标明尺寸。当资源真正加载时,所有资源大小可以被立即推断出并迅速的用于计算页面布局,加载中的资源将无缝呈现,不必因为页面频繁更新布局而影响到用户的阅读体验。

不允许任何机制阻止页面渲染

开发者的任何自定义脚本,都需要用MIP的tag反馈给MIP,例如mip-ad、mip-iframe等,这些方式不会阻塞页面的layout和渲染。

控制外部资源加载

MIP runtime会控制外部资源的额加载来确保其高效性,从而使用户想阅读的内容尽快出现在屏幕中。

封装交互功能

MIP提倡网页能给用户直接简单的体验,但这并不意味着MIP限制了页面的生动和有趣。MIP runtime提供了高度优化的被封装的JavaScript,开发者无需投入过多精力去实现复杂的交互功能。

只允许inline的css

css的加载,会阻止页面的渲染,css内联可以减少客户端的开销。

只允许GPU加速的动画

MIP只允许用transforms和opacity来完成动画效果,当动画能在GPU上执行时,仅触发渲染层合并。

MIP 缓存

MIP另一个重要的意义在于能够帮站长加速网页,百度将会把MIP网页缓存到百度CDN中。只要符合MIP标准,都可以使用MIP缓存。

开放且持续更新

MIP是一个开源项目,所有的标准并非一成不变。我们会持续不断进行优化,期待您的共同参与!



182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:36:09 | 显示全部楼层
新手指引

按照下面的步骤,你可以快速创建一个基本的 MIP HTML 页面;通过进一步了解 MIP HTML 规范、对 MIP HTML 页面进行阶段性的验证等内容,你可以轻松开发出理想的 MIP 页面。

基本步骤包括:

创建基础 MIP HTML 页面
引入图片
调整样式和布局
预览和验证
最后一步
1. 创建基础 MIP HTML 页面

下面这段代码是一个基础的 MIP HTML 的 demo 。将它复制到html文件中,并根据规范添加你想要的元素。

需要注意,页面中必须加载css文件https://mipcache.bdstatic.com/static/mipmain-v1.0.1.css 和 js文件https://mipcache.bdstatic.com/static/mipmain-v1.0.3.js,v1.0.3是版本号,版本号会根据功能的升级而不同,开发中可以根据文档中的说明进行加载。

<!DOCTYPE html>
<html mip>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
        <title>文章大标题</title>
        <link rel="stylesheet" type="text/css" href="https://mipcache.bdstatic.com/static/mipmain-v1.0.1.css">
    </head>
    <body>
        <h1>欢迎使用MIP,这是你的第一个MIP页面!</h1>        
    </body>
    <script src="https://mipcache.bdstatic.com/static/mipmain-v1.0.3.js"></script>   
</html>
MIP HTML中的标签规范请参考MIP HTML 规范。

2. 引入图片

用MIP HTML 中的组件 <mip-img> 代替 HTML原生的 <img> 标签,具体使用方法可参考 mip-img图片组件。

3. 改变页面的样式

使用MIP HTML 时,你可以自定义页面样式,具体方法如下:

1)改变样式

MIP HTML 是web页面,页面中任何元素的样式都可以通过普通的css属性来设计。使用时,在页面的head部分引入css样式,在css中,可以通过类或者元素选择器进行选择要修改样式的dom元素。例如:

<style mip-custom>
    /* any custom style goes here */
    body {
        background-color: white;
    }
    mip-img {
        background-color: gray;
        border: 1px solid black;
    }
</style>
需要注意,每个 MIP HTML 页面只允许有一个嵌入css样式,且<style> 标签需要标记自定义样式,即写成 <style mip-custom>。

2)控件的布局

出于对性能的考虑,MIP页面暂时不支持第三方通过css来元素进行布局。

4. 预览和验证

在页面开发的过程中你需要严格注意校验规则。这样才能确保所开发的 MIP 页面是一个有效页面。

开发完成后,你可以选择如下方式,像预览普通HTML站点一样预览 MIP HTML 页面:

直接在浏览器中打开(由于XML Http Requests失败可能会导致某些元素预览失败)
在本地部署一个服务,如apache,nginx等
在开发过程中难免会出现一些细节性错误,你可以按如下步骤进行验证 MIP 页面是否合格:

1) 在浏览器中打开页面
2)打开控制台, 验证错误
5. 最后一步

恭喜你!到达这一步表明你已经完成了页面的本地测试,并修复了所有验证错误,你的第一个MIP页面已经准备好了。

你可以通过阅读本教程的其他内容,了解MIP的工作原理以及详细的组件说明,它们将帮助你创建出完美的MIP页面。

182

主题

237

帖子

2743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2743
 楼主| 发表于 2016-9-10 15:37:25 | 显示全部楼层
MIP 校验规则

MIP页面会有严格的规范校验,不允许存在任何校验不通过的问题存在.

本文档意在帮助开发者找到校验的内容和规则,快速定位校验不通过的原因

MIP HTML 标签和属性错误

1. 缺少强制性标签

提示        MANDATORY_TAG_MISSING
错误说明        "The mandatory tag '%1' is missing or incorrect."
错误说明        强制性标签'xxx'缺失或错误
修复方法        添加(或者更正)强制性html标签
在MIP HTML中,强制性标签包括:

说明        备注
<!doctype html>        大小写均可
<html mip>        强制小写
<head>        强制小写
<meta charset="utf-8">        utf-8不区分大小写,无单引号或者双引号限制
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">        强制小写,无单引号或者双引号限制
< link rel="stylesheet" type="text/css" href="https://mipcache.bdstatic.com/static/mipmain-v1.0.1.css" >        强制小写,无单引号或者双引号限制,v1.0.1会根据版本不同而不同
<script src="https://mipcache.bdstatic.com/static/mipmain-v1.0.3.js" ></script >        强制小写,无单引号或者双引号限制,v1.0.3会根据版本不同而不同
<body>        强制小写
<link rel="standardhtml" href="xxx">        强制小写
P.S.: meta 标签 name="viewport" 时, content的值必须且最少含有 width=device-width, minimum-scale=1 以及 initial-scale=1这3个属性且顺序不固定。
2. 禁用标签

提示        DISALLOWED_TAG
错误说明        "The tag '%1' is disallowed."
错误说明        禁止使用'xx'标签
修复方法        删除禁用标签
目前mip中标签使用规则:

禁止使用标签有:

frame
frameset
object
param
applet
embed
form
input
textarea
select
option
如果有如下标签需要进行替换

标签        替换后标签
img        mip-img
video        mip-video(暂未开放)
audio        mip-audio(暂未开放)
其他说明:

style:仅允许在head标签中的style标签中使用
script:仅允许外链 MIP 所需要的js脚本,或type是application/ld+json的情况
-注意: 1. 可以把img/video/audio/iframe视为禁用标签
3. 无效属性值

提示        INVALID_ATTR_VALUE
错误说明        "The attribute '%1' in tag '%2' is set to the invalid value '%3'."
错误说明        标签'xx'中的属性'xx'的属性值'xx'无效
修复方法        修改为有效属性值
当html标签有属性值不正确的时候,会报这个错误。mip中需要注意的有:

a:href属性不允许使用javascript:协议,

a:target属性需要设置为_blank

mip-img

src:必须是一个url
mip-pix

src:必须是一个支持https的地址url,
如果不支持https适用百度提供的https代理,url中带t={TIME}&title={TITLE}&host={HOST}&from=baidu"
其他html基本页面属性规范不变

注意:
1. MIP HTML中的url强制是https的
2. <a>标签:
- <a href="javascript:xxx()"></a> 错
- <a href="xxx" target="_blank"></a> 对
4. 属性值的无效值

提示        INVALID_PROPERTY_VALUE_IN_ATTR_VALUE
错误说明        "The property '%1' in attribute '%2' in tag '%3' is set to '%4', which is invalid."
错误说明        标签'xx'中存在属性'yy','yy'中存在属性'zz',属性'zz'的属性值'aa'无效
修复方法        更正无效属性值
可能出现属性值的无效值的情况:

<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">

width的属性值device-width
minimum-scale的属性值1
initial-scale的属性值1
<script type="application/ld+json"></script>

<script type="application/json"></script>

除了外链 MIP 所需 js,script标签的type的属性值应该为application/ld+json 或 application/json
注意: 1. 除上述给出的值外均为无效值
5. 缺少强制性属性

提示        MANDATORY_ONEOF_ATTR_MISSING
错误说明        "The tag '%1' is missing a mandatory attribute - pick one of %2."
错误说明        标签'xx'的强制性属性'xx'缺失
修复方法        添加正确是属性
mip html中具有强制性属性的标签及其强制性属性有:

mip-img
src
mip-pix
src
6. 直接父标签错误

提示        WRONG_PARENT_TAG
错误说明        "The parent tag of tag '%1' is '%2', but it can only be '%3'."
错误说明        标签'a'的直接父标签应该是'b',而不是'c'
修复方法        添加所需的父标签
有一些标签有制定的直接父标签,如下示例给出了每个标签必须的直接父标签:

!doctype 的直接父标签是 root
head 的直接父标签是 html
body 的直接父标签是 html
link 的直接父标签是 head
meta 的直接父标签是 head
style mip-custom 的直接父标签是 head
style 的直接父标签是 boilerplate
7. 非法父级标签

提示        DISALLOWED_TAG_ANCESTOR
错误说明        "The tag '%1' may not appear as a descendant of tag '%2'."
错误说明        标签'a'不应该是标签'b'的子标签
修复方法        删除非法嵌套标签
如:

<body>的子标签写在了<head>中
8. 强制父级标签

提示        MANDATORY_TAG_ANCESTOR
错误说明        "The tag '%1' may only appear as a descendant of tag '%2'."
错误说明        M标签'a'只能是标签'b'的子级标签
修复方法        删除标签或者给标签添加正确的父级标签
img 必须是noscript的子级标签
video 必须是noscript的子级标签
audio 必须是noscript的子级标签
noscript必须是body的子级标签
9. 唯一标签重复

提示        DUPLICATE_UNIQUE_TAG
错误说明        "The tag '%1' appears more than once in the document."
错误说明        标签'xx'只能出现一次
修复方法        删除多余的标签
一份html中,有的标签具有唯一性,也就是说只能出现一次,当html中有重复的唯一标签的时候,应该报错。

以下是唯一标签列表:

<doctype html>
<html mip>
<head>
<link rel="standardhtml" href=...>
<link rel="miphtml" href=...>
<meta charset="utf-8">
<meta viewport>
<style mip-custom>
<body>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|企尚网络论坛 ( 陕ICP备15000158号-1

GMT+8, 2019-11-20 09:42 , Processed in 0.088562 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表