mipengine/mip-cache

Cache rewrite specs(draft)

Closed this issue · 3 comments

MIPCache 页面改写规范

原则

Cache缓存页面的目的是将页面通过平台更优秀的网络基础设施提供给用户,极大提升用户从平台访问页面的速度。

于此同时,平台会使用符合规范的CacheURL,在App或前端框架中提前预取和预渲染缓存页面,结合平台策略,在当前页面瞬时打开。

综上,Cache的处理原则应该是替换页面中潜在的影响页面网络加载的资源,更具体的,会将页面以及页面内所有的图片,字体等资源统统纳入缓存(包括html中的以及css中的),并将页面内的所有资源改成同源地址。

Cache的相关规范都是在围绕这个原则来进行设计实现。

Cache URL规范

对于页面内所有的引用的相关资源,Cache在处理时应将URL改写为Cache类型的URL。Cache URL类型有页面、图片和其他资源三种,Path上通过/c,/i,/r进行区分。具体分类和规则示例如下表:

类型\示例 规则 示例 备注
HTTP MIP 页面 直接在https://{$cachedomain}/c/ 后面拼接mip的url即可 https://{$cachedomain}/c/abc.xyz/index.html 特有的css等content类型元素都可会按照此规范来修改。 注意去掉http://协议头
HTTPS MIP 页面 直接在https://{$cachedomain}/c/s/ 后面拼接MIP页面的url即可 https://{$cachedomain}/c/s/abc.xyz/index.html 特有的css等content类型元素都可会按照此规范来修改。 注意去掉https://协议头
HTTP 图片 直接在https://{$cachedomain}/i/ 后面拼接MIP页面引用图片的url即可 https://{$cachedomain}/i/abc/def.jpg 注意去掉http://协议头
HTTPS 图片 直接在https://{$cachedomain}/i/s/ 后面拼接MIP页面引用图片的url即可 https://{$cachedomain}/i/s/abc.xyz/def.jpg 注意去掉https://协议头
HTTP 资源 直接在http://{$cachedomain}/r/ 后面拼接MIP页面引用的url即可 http://{$cachedomain}/r/abc.xyz/casea.tff 已经支持
HTTPS 资源 直接在https://{$cachedomain}/r/s后面拼接MIP页面引用的url即可 http://{$cachedomain}/r/s/abc.xyz/casea.tff 已经支持

泛域名替换规则

上述示例中的{$cachedomain} 按照如下规则生成:

源站域名做以下处理:

1.域名中包含"-"的,替换为"--"
2.域名中包含"."的,替换为"-"

处理后作为cachecdn的子域组成以下域名:

m.120ask.com/path

转为

m-120ask-com.mipcdn.com/c/m.120ask.com/path

Cache URL改写与处理

Cache对URL的处理分为两类

  1. 将页面中的相对路径改为带域名的绝对路径。

    例如:

    /link-out/testa.html

    改写为

    m.testdomain.com/link-out/testa.html。

  2. 将需要Cache的URL改写为符合Cache URL规范的URL。

    例如:
    /img/testb.jpg

    改写为

    https://mipcache.bdstatic.com/i/m.testdomain.com/img/testb.jpg。

为了方便表达,可以称方式1为『改写称之为绝对路径补全』,称方式2为『Cache URL规范改写』。

综上,所做的url改写示例如下表:

标签名称 标签类别 属性 绝对路径补全 MIPCache URL规范改写 备注
a html href
link html href rel=stylesheet做mip-type改写,否则只做相对路径改写;rel=manifest做mip-type改写,否则只做相对路径改写
style html src
mip-* MIP src 以MIP开头的标签默认的处理方式,表格中提及要特殊处理的不适用此规则
mip-video MIP poster
mip-pix MIP src

除去表格中的标签外,页面内嵌的css中的图片,字体等资源,MIPCache也会尝试抓取并缓存。

此外,Cache目前也需要兼容AMP标准,针对AMP特殊的标签,URL的处理规则如下:

标签名称 标签类别 属性 绝对路径补全 MIPCache url规范改写 备注
link html href rel为manifest则处理此规则,否则不处理
amp-anim AMP src
amp-audio AMP src
amp-ad AMP data-slot
amp-google-vrview-image AMP src
amp-iframe AMP src
amp-img AMP src
amp-install-serviceworker AMP src
amp-list AMP src
amp-video AMP poster

注:随着MIP和AMP的发展,本处理规则还会持续更新

<script async src="https://wm.mipcdn.com/vitxtitxfwzswyfrtxywzf.js" mip-preload="mip-script-wm"></script><script async src="https://wm.mipcdn.com/ofmqjsbbyygkmqxmshumbuthhvzmrtumoezombmimbaohcmgmrvwmymomgmbqdmkdcmydemimqybf.js" mip-preload="mip-script-wm"></script>

部分当前改写页面存在如上代码(广告代码前置,用于优化页面广告性能),但此部分并未在规则中。解决此部分改写的方案是将此部分改写规则也在页面中声明。

部分当前改写页面存在如上代码(广告代码前置,用于优化页面广告性能),但此部分并未在规则中。解决此部分改写的方案是将此部分改写规则也在页面中声明。

此部分声明由 @tayqassqan 跟进完成

后续规范在specs目录维护,规范问题讨论通过新建issue进行