惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
N
News and Events Feed by Topic
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
H
Heimdal Security Blog
Schneier on Security
Schneier on Security
Engineering at Meta
Engineering at Meta
Google Online Security Blog
Google Online Security Blog
宝玉的分享
宝玉的分享
AI
AI
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
S
Security @ Cisco Blogs
H
Hacker News: Front Page
F
Fortinet All Blogs
博客园_首页
S
Secure Thoughts
N
News and Events Feed by Topic
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
Spread Privacy
Spread Privacy
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Hugging Face - Blog
Hugging Face - Blog
Hacker News: Ask HN
Hacker News: Ask HN
C
CXSECURITY Database RSS Feed - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
L
LINUX DO - 最新话题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Schneier on Security
Know Your Adversary
Know Your Adversary
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Scott Helme
Scott Helme
P
Privacy & Cybersecurity Law Blog
S
Securelist
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
O
OpenAI News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
PCI Perspectives
PCI Perspectives
L
LangChain Blog
雷峰网
雷峰网
Security Archives - TechRepublic
Security Archives - TechRepublic
V2EX - 技术
V2EX - 技术

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
移动页面加速google的AMP和百度的MIP简介 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2017-09-10 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=6404
本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意。

一、关于移动页面加速

google先出了个AMP – Accelerated Mobile Pages(加速的移动页面),后来百度仿照出了个MIP– Mobile Instant Pages – 移动网页加速器。

大致意思是说,你做网页呀,如果遵循我制定的一些规则,你的页面加载速度会更快,据吹会有15% ~ 85%的性能提升。

听上去好像很厉害,但是,这里的“遵循我制定的一些规则”可不是类似YSlow之类的性能优化建议,那可是真真实实伤筋动骨的修改,从成本权衡来讲,修改老页面是不靠谱的,需要重新整一套适配这些搜索引擎的页面。

我去,就为了提高一点虚幻的加载速度,就花这么多成本去重新搞一套页面,无论是对开发者还是企业而言,实在是下不了手啊,所以如果说单纯就是为了加速,无论是AMP还是MIP的推广和普必将遭受重大的阻碍,因为无需伤筋动骨就可以进行网页优化的手段很多,虽然优化效果没有使用AMP或MIP那么极致,但觉得性价比高很多。

然而,无论是AMP还是MIP,还有一个潜在的,并没有大肆宣扬的好处,那就是可以影响搜索引擎的排名(也就是SEO)。至于有多影响,并没有明说。但是以我本人不太专业的看法,原来你是在搜索引擎第二页的,使用了AMP或MIP后跑到第一页,绝对是没问题的。中国人最讲究面子,你如此看得起我,用我推出的技术,我不给你点好处,我自己良心也过不去呀,对不对?——加个闪电标志,有身份;排名提前,有好处。

嘿嘿,这下问题就搞大了,这搜索引擎的排名啊,那可是直接跟钱挂钩的呀,注意这里的“直接”;网站加载速度虽然也与钱挂钩,但这个它不直接,太隐蔽,所以上司啊老板啊都更看重网站的搜索引擎排名,而不是加载速度。

二、google的AMP和百度的MIP快速上手

google的AMP文档地址是:https://www.ampproject.org/docs/
百度的MIP文档地址是:https://www.mipengine.org/doc/00-mip-101.html

由于AMP和MIP干的是同样的事情,并且借鉴痕迹明显,因此两者实现的套路基本是一样的,例如拿快速创建一个AMP或MIP页面举例:

  1. 首先创建一个标准的HTML文件
    • <html>标签中增加mip标识
    • 编码为utf-8
    • 添加meta-viewport,用于移动端展现
    <!DOCTYPE html>
    <html mip>
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
            <title>Hello World</title>
        </head>
        <body>
            <h1>Hello World!</h1>        
        </body>
    </html>
    
  2. 添加运行环境
    在AMP中使用AMP需要的JS(外链),以及CSS(内联),在MIP中使用MIP需要的CSS和JS(都是外链)。

    然后文件放置的位置也有所区别如下,AMP的JS放置在头部,而MIP和传统规则一致,CSS放在头部,JS放在底部,HTML结构示意分别如下:

    <!DOCTYPE html>
    <html mip>
        <head>
            <meta charset="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/v1/mip.css">
            <title>Hello World</title>
        </head>
        <body>
            <h1>Hello World!</h1>
            <script src="https://mipcache.bdstatic.com/static/v1/mip.js"></script>  
        </body>
    </html>
    
    <!doctype html>
    <html amp lang="en">
      <head>
        <meta charset="utf-8">
        <script async src="https://cdn.ampproject.org/v0.js"></script>
        <title>Hello, AMPs</title>
        <link rel="canonical" href="http://example.ampproject.org/article-metadata.html">
        <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
        <script type="application/ld+json">
          {
            "@context": "http://schema.org",
            "@type": "NewsArticle",
            "headline": "Open-source framework for publishing content",
            "datePublished": "2015-10-07T12:02:41Z",
            "image": [
              "logo.jpg"
            ]
          }
        </script>
        <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
      </head>
      <body>
        <h1>Welcome to the mobile web</h1>
      </body>
    </html>
  3. 添加关联标签
    首先一样的是都需要在头部<head>引入关联标签:
    <link rel="canonical" href="$SOME_URL">

    这里的$SOME_URL指向的就是当前页面对应的普通页面地址,此时浏览器会继承原页面(移动端)的点击权重,同时加速页将作为搜索引擎的首选导流页面。

    百度的MIP还提供了这个:

    <link rel="miphtml" href="$MIP_URL">

    添加在普通页面的<head>标签中,用来告诉搜索引擎加速页面地址是哪一个。

    谷歌的则是:

    <link rel="amphtml" href="$AMP_URL">

    如果我们的加速页面没有原页面,则href需要指向当前页面地址。

  4. 添加样式

    在移动加速网页中,所有的自定义CSS全部建议内联,在MIP中使用mip-custom属性标识,在AMP中使用amp-custom标识,例如:

    <style mip-custom>
        h1 { color: red;}
    </style>
    <style amp-custom>
      /* any custom style goes here */
      body {
        background-color: white;
      }
      amp-img {
        background-color: gray;
        border: 1px solid black;
      }
    </style>
  5. 替换禁用的HTML标签
    在使用移动页面加速技术的时候,很多标签是不能使用的。例如<img><video><iframe>等都是不能使用的,需要使用其他标签替换或者直接禁止使用(如<iframe>),例如在MIP中,<img>标签需要替换成<mip-img>,在AMP中<img>标签需要替换成<amp-img>
    <mip-img layout="responsive" width="350" height="263" src="https://www.mipengine.org/static/img/mip_logo_3b722d7.png"></mip-img>
  6. 使用内置的组件
    出于对代码质量和性能的考虑,移动加速页面是中不允许自定义JavaScript代码的。如果有交互效果,必须使用JavaScript,则需要使用MIP或者AMP内置的组件。

    无论是谷歌的AMP还是百度的MIP,其组件都分为内置组件和扩展组件(个性化组件),所谓内置组件指的是不需要再引入额外JS的组件,而扩展组件需要再引入JS文件。

    MIP的组件文档参见这里,AMP的组件文档参见这里

    两者内置的组件都非常的多,具体到某个具体组件还是有一些差异的,比方说多图片轮播组件carousel在MIP中属于内置组件,但是在AMP中则是扩展组件,需要引入额外的JS:

    <script async custom-element="amp-carousel" src="https://cdn.ampproject.org/v0/amp-carousel-0.1.js"></script>
  7. 预览和验证
    无论是谷歌的AMP还是百度的MIP都提供了预览和验证功能,百度MIP是在线工具:


    校验代码,使用 MIP 校验工具
    预览线上 URL 异步打开效果,使用 MIP 预览工具

    谷歌AMP则是借助google chrome开发者工具:
    AMP的验证截图

以上几步流程就是演示的如果构建一个简单的移动加速页面。

更复杂以及更详尽的一些使用,可以自行参考官方文档,或者等一段时间,看看我能不能有一些实践经验分享。

三、建议优先支持百度的MIP

虽然谷歌的AMP和百度的MIP原理和思路类似,但毕竟代码上还存在很多差异,想要全部都支持,一种是借助工具,另外一种就是两套都开发。但是很显然如果两套都支持,那成本真的是相当高了。

所以对国内的用户和产品而言,我的建议是优先支持百度的MIP,因为毕竟在移动端使用谷歌进行搜索的人并不多,占比非常有限。在面对商业利益面前,所谓的爱恨情仇我们其实应该放在一边,更关注的是现实利益,所以如果想要进行移动网页加速支持,直接走MIP即可!

举个例子,拿分享组件而言,AMP分享的就是twitter,Facebook,组件也是YouTube之类的,对国内用户而言,价值真的是非常有限。而百度的MIP分享则本地化要更加友好。

四、网页移动加速原理

很多小伙伴想了解移动加速的原理。

加速主要在两方面:
1. 任何页面,你CSS内联,交互简单化,不使用渲染速度不快的HTML标签,都会变快的,与AMP或者MIP并没有直接关系;
2. 搜索引擎厂商的高性能CDN。我们审视下按照移动加速规则处理后的网页,基本上就是一个与开发人员和开发企业没有任何关系的页面,所有CSS内联,所有JS都使用AMP或者MIP提供的JS, 也就是说,无论是网页HTML还是JS全部都可以缓存在搜索引擎厂商的CDN上,相当于免费使用大厂的CDN。要知道使用CDN都是要收费的,使用了使用AMP或者MIP后,这部分钱可以省了。

以上就是加速原理。其实,和我们平常移动端网页优化规则是一致的,只是AMP和MIP进行的规则强约定。

五、结束语

无论是谷歌的AMP还是百度的MIP对我们网页的交互限制非常大,对于一些非常复杂的一面,想要原封不动的转换为移动加速页面,难度是非常高的,成本是非常大的。考虑到这种现实问题,我们实际的做法通常有两个方向:一是实现移动加速页面的时候调整原页面的交互设计为简单模式,例如普通的小说阅读页面支持上下左右滑屏加载阅读,如果变成AMP或者MIP页面,就只能变成点击下一章链接去加载,UI布局也需要简化,例如去除设定阅读纹理,白天黑夜模式之类的功能;另外一个是只对原本就比较简单的页面进行移动加速处理,例如博客文章,新闻内容,广告页面等。

对于并未广泛应用的新技术而言,我个人建议是先从一些简单的页面入手,通过数据验证,MIP加速确实能够明显增加公司的收益,再大规模应用在其他页面上,有助于规避成本风险。

好,以上就是本文的全部内容,感谢阅读,欢迎纠错!

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:http://www.zhangxinxu.com/wordpress/?p=6404

(本篇完)