什麼是mip?
mip是百度在2016年提出的移動網頁加速器項目。能夠簡單理解爲是一個規範。
mip能作什麼?
mip能幫助站長和網站開發者快速搭建移動端頁面。
mip怎麼實現加速的?
mip不僅是CDN加速,mip從前端渲染和頁面網絡傳輸兩方面進行優化,杜絕頁面渲染中的阻塞問題,提高頁面展示速度。
頁面渲染耗時主要分爲三類:DNS解析耗時、網絡傳輸耗時、瀏覽器渲染重繪耗時。mip加速的基本原理就是減小各個步驟的耗時:
-
爲減小DNS解析,MIP-Cache將靜態文件以相對路徑存儲在百度CDN中;
-
爲減小網絡傳輸耗時,MIP-JS控制靜態資源的按需加載,MIP-Cache系統優先從CDN讀取文件;
-
爲減小瀏覽器渲染重繪耗時,MIP-HTML對<img>、<video>等形成瀏覽器重繪的標籤進行了封裝控制。
MIP和CDN區別?
-
MIP要求站點必須按照MIP標準進行修改或者從新制做,CDN只會站點提供節點加速服務,無需修改。
-
MIP服務器基本上是在用百度移動端的快照緩存服務器。而CDN提供的節點是沒法和百度服務器想媲美的。
-
MIP地址使用是百度緩存服務器域名,能夠提高必定安全性,而CDN仍是本身的域名。
-
MIP只針對移動頁面進行加速,不影響PC端,而CDN則能夠支持不一樣用戶端。
-
MIP是一項長久免費的開源計劃,而大部分CDN是須要付費使用的。
補充:
CDN(Content Delivery Network)加速原理:簡單說就是在不一樣地點創建內容緩存節點,經過負載均衡技術,將用戶的請求定向到最合適的緩存服務器上去獲取內容。
MIP-Cache能夠理解爲一套CDN緩存系統。MIP-Cache給經過MIP規範和MIP校驗的MIP頁面提供靜態文件(圖片、外鏈css等)的緩存服務,在緩存靜態文件的同時,HTML頁面自己會被改寫,引用圖片的地址會被改爲MIP-Cache中的圖片地址。這樣就能夠避免從不一樣域名下讀取靜態文件,使用同源策略減小DNS解析時間,可以加速加載速度。
MIP-Cache更新和校驗策略:
MIP-Cache會按期從新抓取MIP頁並進行校驗,知足頁面更新需求。
在MIP-Cache中:
注意: MIP-Cache目前限制100s只能夠更新10條,若是MIP站點是https協議,那麼$api應該是$api = 'http://mipcache.bdstatic.com/update-ping/c/s/';
移動站應該嘗試百度mip的五個緣由
-
加速移動端頁面
-
提高到達率和用戶體驗,更少的流失率
-
百度搜索提權,更大的用戶量
-
開發簡單,遷移成本低
-
已有組件兼容性好,也可個性化定製新組件
用百度MIP快速搭建體驗友好的移動頁面
一、Doctype改造:將<!DOCTYPE ****>改成<!DOCTYPE html>
二、<html>標籤改造:<html xmlns='http://www.w3c.org/1999/xhtml'>或<html lang='en'>改成<html mip>,注意所有小寫
三、Head部分改造:
-
<head>標籤必須徹底小寫
-
頁面的編碼必須是utf-8,修改聲明爲<meta charset="utf-8">
-
頁面中加入<meta name='viewport' content='width=device-width,minimum-scale=1,initial-scale=1'>
-
頁面中加入MIP專用樣式文件<link rel='stylesheet' type='text/css' href='https://mipcache.dbstatic.com/static/v1/mip.css'>
-
告訴搜索引擎改頁面對應的標準html頁面地址,若是存在則標識<link rel='canonical' href='http://www.baidu.com'>其中href值修改成與當前mip頁面相對應的標準頁面(移動頁)url地址。若是隻有mip頁面沒有對應的標準頁面就將href修改成當前mip頁面地址就好了。
四、body內改造:
五、使用MIP Cache注意事項
六、其餘組件使用
官方文檔包含了目前支持的全部組件,以百度統計爲例:
查找原有百度統計工具查看統計js代碼(全局查找關鍵字var_hmt關鍵字)獲取token(hm.js?以後的編碼),在頁面底部,全部script前放入代碼:
<mip-stats-baidu token="22090d4a309827eb62bc1335b2b28f11(網站統計token值)"></mip-stats-baidu>
最後去除原來的百度統計代碼。
canonical標籤
百度MIP規範要求必須添加標籤canonical,否則MIP校驗工具會報錯。
一、canonical標籤有什麼用?
canonical標籤用於關聯原頁面和MIP頁面,保證MIP頁面繼承原頁面的權重,在爬蟲抓取MIP頁後,會根據canonical標籤獲得對應的MIP頁面和原頁面的關係,在移動搜索時優先展示MIP頁面。
canonical標籤不寫或者寫錯都會致使MIP頁面不能和原頁面產生聯繫,致使權重丟失,MIP頁面不展現。
二、原頁面指什麼頁面?
原頁面是相對於MIP頁面來說的,若是在m.a.com/1.html的基礎上,mip改造後獲得mip.a.com/1.html,那麼m.a.com/1.html就是mip.a.com/1.html的原頁面。
三、標籤的正確寫法
canonical標籤添加在MIP頁面的<head>標籤中,href指向原頁面地址。
在mip.a.com/1.html頁面(MIP頁面):
<link rel='canonical' href='http://m.a.com/1.html'>
補充:
href指向原則:href指向百度移動搜索導流最多的頁面。
不一樣狀況下href指向:
-
若是一樣的內容既存在對應的pc頁面,也存在移動頁面,那麼href指向百度移動搜索流量大的頁面。
-
若是是動態頁面,原頁面已經存在canonical標籤,則href指向與原頁面指向一致。
-
若是原頁面有多個版式,href指向流量最大的頁面。
-
若是沒有對應的原頁面url(如新建的mip站),或者直接在當前url進行MIP改造並直接生效 ,則href指向mip頁面自己。
使用規則:
-
<link rel="miphtml">
在H5頁使用,指向對應內容的MIP頁,方便搜索引擎發現對應的MIP頁。
-
<link rel="canonical">
在 MIP 頁中使用, 指向內容對應的 H5 頁面。
-
若沒有 H5 頁,則指向內容對應的 PC 頁。
-
若直接在原連接修改 MIP,則canonical指向當前 URL。
注意事項:
如原頁面url爲:https://m.baidu.com/123.html
MIP廣告
目前,百度網盟廣告以及百度全網推薦已經接入MIP。使用mip-ad廣告組件,可以在內容秒開的基礎上,同時加載廣告內容。避免頁面展示初期因廣告加載慢致使廣告位空白的問題,提高廣告的曝光率。
版本升級
只須要替換線上引用的MIP文件爲v1版本,就能夠完成升級。升級帶來的好處就是減小將來的開發和維護版本。
MIP-CLI
一、MIP-CLI工具安裝與環境部署
MIP-CLI:mip開發工具,用於MIP頁面和組件的開發和校驗。
其中html文件夾用來存放咱們後續開發的mip頁面。
二、MIP-CLI工具調試MIP網頁
-
初始化mip配置,在html目錄下輸入mip init將建立mip.config文件。
-
新建一個mip頁面,在html目錄下輸入mip add index.html將新建一個index.html文件,這個頁面就是一個基礎的MIP頁面。固然,在新建頁面的時候能夠同時載入mip組件js腳本,如mip add index.html mip-share
-
-
-
調試MIP網頁:在html項目目錄輸入mip server,訪問http://127.0.0.1:8000進入調試頁面
三、MIP-CLI工具調試組件
-
在mip-extensions倉庫中建立新的組件
-
預覽調試組件
-
在MIP頁引用本身編寫的MIP組件
-
修改mip.config:進入mip-project/html文件夾下,修改mip.config文件的字段extensionsDir爲../mip-extensions
-
在html目錄下建立mip-alert.html文件,並添加mip-alert組件:mip add mip-alert.html mip-alert;在body中引入<mip-alert alert-text='我是alert內容'>點擊觸發alert</mip-alert>
-
在html目錄下啓動mip server:訪問http://127.0.0.1:8000進入mip-alert.html頁面
-
組件提交到github倉庫時須要進行校驗:mip validateelement mip-demo,經過校驗後提交到倉庫,等待審覈。
-
使用百度帳號登陸組件平臺;
-
mip組件編寫和測試,而後從組件平臺上傳組件,須要改下README.md中所需腳本的地址爲https://mipcache.bdstatic.com/extensions/platform/v1/mip-__/mip-__.js,注意地址須要包含‘platform’,eg:
-
點擊上傳組件按鈕,上傳MIP組件zip壓縮包。組件經過校驗後能夠提交審覈。
-
組件審覈會在一個工做日內,提交審覈後組件會被鎖定,不能再上傳或者修改。只有等待管理員經過審覈或者打回後才能繼續修改。
-
組件上線後在本地能夠引入上線後的組件進行驗證。
-
若是修改已經上線的組件,在修改代碼後,還須要修改package.json文件中的版本號,而後再次提交便可。
MIP和AMP的關係
-
AMP是一個開源性項目,MIP是這個開源項目的參與者
-
MIP維持AMP的目標,MIP在中國國內有一些特殊狀況的考慮,因此作了單獨的實現。
-
一個站長開發了MIP如何遷移到AMP?目前MIP某些組件沒法實現百分百功能轉換。
-
MIP-Cache已經對部分AMP頁面作了支持。
-
百度同時支持AMP和MIP的索引和打開
有了AMP,爲何還要作MIP?
AMP在中國的落地不是很理想,amp.js在中國不能訪問,AMP緩存在中國沒有服務,AMP不容許網頁彈層,不符合咱們的使用習慣。
關於流量和計費問題:
什麼網站適合加入MIP?
MIP已經能夠完美支持資訊、圖片、企業、小說、論壇等信息流類型的網站。複雜頁面暫不建議MIP改造。
網站加載速度慢,打開速度時間長;用戶體驗差,跳出率較高的網站建議MIP改造。
常見問題彙總:
一、MIP對什麼樣的內容有較好的效果?
內容瀏覽類的站點支持比較全面
二、MIP頁面發生錯誤會怎麼樣?
MIP有回退機制,訪問出問題後會直接回到原來的h5頁面,不會影響權重。
三、代碼適配站點如何使用MIP?
若是後端根據UA判斷是否爲移動端頁面,並返回頁面,那麼將返回的頁面MIP化便可。若是是前端判斷瀏覽器寬度或UA,再請求後端返回相應的頁面,則須要改變這套流程,使用後端判斷,或者直接改成響應式頁面。
四、是否必須是HTTPS?
MIP改造自己不須要支持HTTPS,可是若是頁面須要與服務端進行交互,好比發送統計,提交表單,獲取數據,須要支持HTTPS。
五、gbk編碼的網站如何使用MIP?
只能更改爲utf-8。
六、對於自適應站點,MIP對頁面的改造怎麼弄?
若是自使用站點是css的Media Query實現的,那麼不須要作什麼特殊改造;
若是是經過js計算實現的,則須要去除原有JS邏輯,改引用mip-js的方式實現。若是組件不在mip-js組件列表,須要反饋給mip,而後等待它們實現。。。。
七、MIP規範中寫道不能用link標籤引入樣式,是否是樣式都要寫到HTML頁面裏,而且只能出現一次style標籤?
MIP規範不建議外鏈樣式表,是爲了節省網絡加載時間,加速MIP頁面。開發時,樣式表能夠做爲單獨的文件維護,上線前經過一次編譯(fis3,grunt,gulp)實現文件內聯,將css做爲style標籤插入html,達到MIP要求。
八、MIP框架是否能夠和react等框架結合使用?
MIP與其餘框架(除zepto和jquery)及其組件不能結合使用。
九、MIP頁是否支持自定義cookie?實現登陸、統計、廣告等功能。
十、與服務端異步交互請求如何發出?
與服務端的交互請求須要自行封裝組件,在組件中能夠用fetch自行實現。
// get
fetch(location.href).then(function (res) {
return res.text();
}).then(function (text) {
fetchElement.innerHTML = 'fetch: ' + (text.search('mip-test') !== -1);
});
// jsonp
var fetchJsonp = require('fetch-jsonp');
fetchJsonp('xxx', {
jsonpCallback: 'cb'
}).then(function (res) {
return res.json();
}).then(function (data) {
console.log(data);
});
十一、MIP化後對其餘搜索引擎抓取收錄以及SEO的影響?
在原頁面MIP化後,不會影響其餘搜索引擎的抓取記錄,也不會影響頁面權重。新增MIP頁面能夠經過robots.txt文件禁用其餘搜索引擎的抓取,從而保證原頁面權重。MIP相關內容能夠這麼寫(假設目錄是/mip/):
// 這段代碼意思多是容許百度引擎抓取全部文件
User-agent: Baiduspider
(這裏不用寫關於mip的內容)
// 下面這段意思是禁止谷歌引擎抓取mip目錄下的文件
User-agent: Googlebot
Disallow: /mip/
MIP頁面效果精選
連接中帶有閃電標的頁面都使用了MIP技術,能夠做爲開發參考。
請使用手機或移動端模擬器查看頁面效果。