AMP是如何提升性能驹吮?

AMP簡介

Google推出移動網(wǎng)頁加速項目AMP
AMP介紹

AMP是如何提升性能忆谓?

以下的優(yōu)化點是AMP頁面能被快速加載的原因:

  • 只允許異步腳本
  • 靜態(tài)計算資源尺寸大小
  • 不讓 外部插件阻塞渲染
  • 讓所有第三方JavaScript離開關(guān)鍵路徑
  • 所有CSS必須內(nèi)聯(lián)
  • 字體觸發(fā)必須高效
  • 最小化樣式重計算
  • 只運行GPU加速動畫
  • 加載資源的優(yōu)先級策略
  • 瞬間加載頁面

下面這個視頻是APM引擎的lead ,Malte Ubl對AMP的介紹斩披,內(nèi)容跟下面的段落差不多棠枉。

只允許異步腳本

JavaScript很強大设褐,它能修改頁面的所有東西颠蕴,但是它也會阻塞DOM的構(gòu)建并延遲頁面的渲染(使用 JavaScript 添加交互)。為了防止JavaScript延遲頁面渲染助析,AMP只允許異步的JavaScript犀被。

AMP頁面不能包括自己寫的JavaScript,相反外冀,頁面的交互特性用自定義的AMP元素處理寡键。自定義的AMP元素的背后可能有JavaScript代碼,但是它們都是經(jīng)過精心設(shè)計而不會導(dǎo)致性能下降雪隧。

雖然在內(nèi)聯(lián)框架中運行第三方JS西轩,但是它不能阻塞渲染。比如脑沿,如果第三方JS用 性能特別差的document.write API 它也不會阻塞主頁面渲染藕畔。

靜態(tài)計算資源尺寸大小

外部資源,比如圖片庄拇、廣告注服、內(nèi)聯(lián)框架<iframe>必須在HTML里聲明他們的尺寸,所以在資源下載之前措近,AMP就能決定元素的大小和位置溶弟。AMP可以不用等待資源下載完成就直接加載頁面布局。

AMP從資源布局中解耦文檔布局熄诡。整個文檔布局只需要一次HTML請求可很。因為AMP避免了代價昂貴的重計算樣式和布局。所以當資源加載的時候凰浮,不會有任何的重布局我抠。

不讓 外部插件阻塞渲染

AMP不會讓外部插件阻塞頁面渲染。AMP支持外部插件包括 lightboxes, instagram embeds, tweets, 等等袜茧。然而菜拓,這些需要增加額外的HTTP請求,這些請求會阻塞頁面布局和渲染笛厦。

所有用到自定義腳本的頁面必須告訴AMP系統(tǒng)一個自定義的標簽纳鼎。比如, amp-iframe 腳本告訴系統(tǒng)這兒有個 amp-iframe 標簽. AMP 在知道里面包含什么前就能生成一個內(nèi)聯(lián)頁框(iframe box)。

<script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-youtube-0.1.js"></script>

讓所有第三方JavaScript離開關(guān)鍵路徑

第三方JS喜歡用同步JS加載贱鄙,還喜歡用document.write劝贸。比如,如果你有5個廣告逗宁,每個廣告有3個同步加載映九。每次鏈接有1秒延時,光是JS加載就需要18秒瞎颗。

AMP頁面只在內(nèi)聯(lián)框架iframe沙盒中有第三方JavaScript件甥。把第三方JS代碼限制在iframe中,它們就不會阻塞主頁面的運行哼拔。即使它們觸發(fā)多次樣式重計算引有,但iframes中幾乎沒有DOM,而樣式重計算和布局通常是針對DMO尺寸倦逐。所以相比對頁面的樣式重計算和布局譬正,對iframes的重計算是非常快速的僻孝。

使用有限的 inline CSS 樣式

CSS阻塞所有的渲染导帝、頁面加載,同時它很臃腫穿铆。在AMP HTML頁面中您单,只用內(nèi)聯(lián)風(fēng)格的CSS允許使用。比起大多web頁面荞雏,這個限制會從渲染關(guān)鍵路徑去除1個或多個HTTP請求虐秦。

同時,內(nèi)置樣式塊(sheet)最大可以有50KB大小凤优。但是對大多復(fù)雜的頁面來說悦陋,這些大小已經(jīng)足夠大了,當然這仍然需要頁面作者維護良好的CSS風(fēng)格筑辨。

字體觸發(fā)必須高效

網(wǎng)頁字體很大俺驶,所以字體優(yōu)化 對性能來說非常高效。一個有少量同步腳本或外部樣式塊的傳統(tǒng)頁面棍辕,瀏覽器也需要等待這些大字體下載暮现。

AMP頁面在字體開始下載之前都不會發(fā)出HTTP請求。這是因為AMP的JS是異步的楚昭,而且允許在線的內(nèi)置樣式塊栖袋;在下載字體時,沒有HTTP請求阻塞瀏覽器抚太。

最小化樣式重計算

當你測量某些元素時塘幅,它會觸發(fā)昂貴的樣式重計算昔案,因為瀏覽器需要布局整個頁面。在AMP頁面电媳,所有DOM在寫之前會先全部讀完踏揣。這確保了每幀最多只有一次樣式重計算。

你可以閱讀這篇 渲染性能學(xué)習(xí)更多關(guān)于樣式和布局重計算的影響匆背。

只運行GPU加速動畫

動畫加速的唯一方式是將它們運行在GPU上呼伸。GPU知道圖層,它知道如何在圖層上展示元素钝尸,它會移動圖層、淡入淡出圖層搂根,但是它不會更新頁面布局珍促;不過它會把任務(wù)拋給瀏覽器,這并不是很好剩愧。

關(guān)于動畫相關(guān)的CSS的規(guī)則能保證動畫是GPU加速猪叙。特別是AMP只允許動畫、仿射變換和不透明度仁卷,所以不需要布局穴翩。可以從使用轉(zhuǎn)換和不透明度的動畫修改了解更多知識锦积。

加載資源的優(yōu)先級策略

AMP控制所有資源下載芒帕。它給資源下載分優(yōu)先級,只在需要時加載丰介,并預(yù)取懶加載資源背蟆。

當AMP加載資源,它會優(yōu)化下載策略哮幢,當前最重要的資源會最先被下載带膀。圖片和廣告只會在它們需要可視的時候、在上半版面或者用戶快速滾動的時候被下載橙垢。

AMP會預(yù)取懶加載的資源垛叨。資源盡量晚加載,預(yù)取盡量早柜某。這種方式嗽元,加載會很快,但是只有在資源展示給用戶的時候CPU才會被使用莺琳。

瞬間加載頁面

想確保HTTP請求盡量快速还棱,使用新的 preconnect API 還是比較繁瑣。用AMP惭等,在用戶顯示指明他們想前往的頁面前珍手,該頁面就被渲染了。在用戶選擇前往該頁面前,它就可能已經(jīng)準備好了琳要,所以頁面就像瞬間被加載一樣寡具。

雖然頁面內(nèi)容可以被預(yù)渲染,但是預(yù)渲染也會消耗大量的CPU資源稚补。AMP會在兩者中優(yōu)化取平衡童叠。預(yù)渲染只下載上半版面的資源,而且不會渲染非常消耗CPU資源的元素课幕。

當AMP為瞬間加載頁面的效果做預(yù)渲染時厦坛,只有上半版面的資源會被下載。當AMP文檔做預(yù)渲染時乍惊,一些可能很耗CPU的資源(比如第三方iframes)不會被下載

更多詳情: why AMP HTML doesn’t take full advantage of the preload scanner.

幫忙讓AMP更快

AMP是個開源項目杜秸,我們需要你的幫助來讓它更快。 how to contribute.

參考

原文:https://www.ampproject.org/docs/get_started/technical_overview.html#font-triggering-must-be-efficient

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末润绎,一起剝皮案震驚了整個濱河市撬碟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莉撇,老刑警劉巖呢蛤,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棍郎,居然都是意外死亡其障,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門坝撑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來静秆,“玉大人,你說我怎么就攤上這事巡李「П剩” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵侨拦,是天一觀的道長殊橙。 經(jīng)常有香客問我,道長狱从,這世上最難降的妖魔是什么膨蛮? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮季研,結(jié)果婚禮上敞葛,老公的妹妹穿的比我還像新娘。我一直安慰自己与涡,他們只是感情好惹谐,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布持偏。 她就那樣靜靜地躺著,像睡著了一般氨肌。 火紅的嫁衣襯著肌膚如雪鸿秆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天怎囚,我揣著相機與錄音卿叽,去河邊找鬼。 笑死恳守,一個胖子當著我的面吹牛考婴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播催烘,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蕉扮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颗圣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屁使,失蹤者是張志新(化名)和其女友劉穎在岂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛮寂,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蔽午,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酬蹋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片及老。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖范抓,靈堂內(nèi)的尸體忽然破棺而出骄恶,到底是詐尸還是另有隱情,我是刑警寧澤匕垫,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布僧鲁,位于F島的核電站,受9級特大地震影響象泵,放射性物質(zhì)發(fā)生泄漏寞秃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一偶惠、第九天 我趴在偏房一處隱蔽的房頂上張望春寿。 院中可真熱鬧,春花似錦忽孽、人聲如沸绑改。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绢淀。三九已至萤悴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皆的,已是汗流浹背覆履。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留费薄,地道東北人硝全。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像楞抡,于是被迫代替她去往敵國和親伟众。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容