成都金牛區(qū)
網(wǎng)站制作公司我們是否發(fā)送響應?通過流傳輸,在初始導航請求期間呈現(xiàn)的HTML可以充分利用瀏覽器的流HTML解析器。
您是否傳送回應?
常常被遺忘和被忽視的,流的讀取或?qū)懭霐?shù)據(jù)的異步塊,其中只有一個子集的可能是內(nèi)存可在任何給定時間提供一個接口?;旧?,它們允許發(fā)出原始請求的頁面在第一塊數(shù)據(jù)可用時立即開始使用響應,并使用針對流進行了優(yōu)化的解析器來逐步顯示內(nèi)容。
我們可以從多個來源創(chuàng)建一個流。例如,您可以讓服務(wù)工作者構(gòu)造一個流,其中外殼程序來自緩存,而主體來自網(wǎng)絡(luò),而不是提供一個空的UI Shell并讓JavaScript填充它。正如Jeff Posnick指出的那樣,如果您的
網(wǎng)站制作應用程序是由CMS驅(qū)動的,該CMS通過將部分模板拼接在一起來服務(wù)器呈現(xiàn)HTML,則該模型將直接轉(zhuǎn)換為使用流式響應,并在服務(wù)工作者(而不是服務(wù)器)中復制模板邏輯。杰克·阿奇博爾德(Jake Archibald)的“網(wǎng)絡(luò)流年”文章重點介紹了如何構(gòu)建它。性能提升非常明顯。
流傳輸整個HTML響應的一個重要優(yōu)點是,在初始導航請求期間呈現(xiàn)的HTML可以充分利用瀏覽器的流HTML解析器。頁面加載后插入到文檔中的HTML塊(通過JavaScript填充的內(nèi)容很常見)無法利用此優(yōu)化。
瀏覽器支持?在Chrome,F(xiàn)irefox,Safari和Edge中獲得部分支持,從而支持所有現(xiàn)代瀏覽器都支持該API和Service Workers 。
考慮使您的組件具有連接意識。
數(shù)據(jù)可能會很昂貴,并且隨著有效負載的增加,我們需要尊重選擇訪問我們的網(wǎng)站或應用程序時選擇節(jié)省數(shù)據(jù)的用戶。在保存,數(shù)據(jù)客戶端提示請求頭讓我們可以自定義應用程序,并以具成本有效載荷和性能受限的用戶。實際上,您可以將對高DPI圖像的請求重寫為低DPI圖像,刪除
網(wǎng)站制作字體,奇特的視差效果,預覽縮略圖和無限滾動,關(guān)閉視頻自動播放,服務(wù)器推送,減少顯示的項目數(shù)并降低圖像質(zhì)量,或者甚至改變您交付標記的方式。蒂姆·韋里克(Tim Vereecke)發(fā)表了一篇關(guān)于數(shù)據(jù)平均(h)平均策略的非常詳細的文章 具有許多保存數(shù)據(jù)的選項。
當前僅在Chromium,Android版Chrome或通過臺式機設(shè)備上的Data Saver擴展程序支持標頭。更后,您還可以使用Network Information API來根據(jù)網(wǎng)絡(luò)類型傳遞低/高分辨率圖像和視頻。網(wǎng)絡(luò)信息API和具體navigator.connection.effectiveType使用RTT,downlink,effectiveType值(和一些其他人),以提供連接的表示,并且用戶可以處理數(shù)據(jù)。
在這種情況下,Max Stoiber談到了連接感知組件,而Addy Osmani談到了自適應模塊服務(wù)。。例如,使用React,我們可以編寫一個針對不同連接類型呈現(xiàn)不同內(nèi)容的組件。如Max所建議,新聞文章中的組件可能會輸出:
Offline:帶有alt文本的占位符,
2G/save-data模式:低分辨率圖像,
3G 在非視網(wǎng)膜屏幕上:中等分辨率的圖像,
3G 在Retina屏幕上:高分辨率Retina圖像,
4G:高清視頻。
Dean Hume使用服務(wù)工作者提供了類似邏輯的實際實現(xiàn)。對于視頻,我們可以默認顯示視頻海報,然后在更好的連接上顯示“播放”圖標以及視頻播放器外殼,視頻的元數(shù)據(jù)等。作為不支持的瀏覽器的備用,如果事件在2秒鐘內(nèi)未觸發(fā),我們可以監(jiān)聽canplaythrough事件并用于Promise.race()使源加載超時canplaythrough。
如果您想更深入一點,這里有一些入門資源:
Addy Osmani展示了如何在React中實現(xiàn)自適應服務(wù)。
React Adaptive Loading Hooks&Utilities提供了React的代碼片段,
Netanel Basel在Angular中探索了可感知連接的組件,
Theodore Vorilas分享了在Vue中使用Network Information API服務(wù)自適應組件的工作方式。
考慮使您的組件設(shè)備知道內(nèi)存。
但是,網(wǎng)絡(luò)連接僅在用戶上下文方面為我們提供了一種視角。更進一步,您還可以使用設(shè)備內(nèi)存API根據(jù)可用的設(shè)備內(nèi)存動態(tài)調(diào)整資源。返回設(shè)備有多少RAM(以GB為單位),四舍五入到更接近的2的冪。該API還具有報告相同值的“客戶端提示頭” 。navigator.deviceMemoryDevice-Memory
獎勵:Umar Hansa展示了如何通過動態(tài)導入來推遲昂貴的腳本,以基于設(shè)備內(nèi)存,網(wǎng)絡(luò)連接性和硬件并發(fā)性來改變體驗。
DevTools中的優(yōu)先級列
DevTools中的“優(yōu)先級”列。圖片來源:Ben Schwarz,關(guān)鍵請求
預熱連接以加快交付速度。
使用資源提示節(jié)省時間dns-prefetch(在后臺執(zhí)行DNS查找),preconnect(要求瀏覽器在后臺啟動連接握手(DNS,TCP,TLS)),prefetch(要求瀏覽器請求資源)和preload(它會在不執(zhí)行資源的情況下預取資源)。
還記得prerender嗎 資源提示用于提示瀏覽器在后臺構(gòu)建整個頁面以進行下一次導航。實施方面的問題非常棘手,從巨大的內(nèi)存占用和帶寬使用到多個已注冊的分析命中數(shù)和廣告展示次數(shù),不等。
毫不奇怪,它已被棄用,但Chrome團隊將其作為NoState Prefetch機制帶回了。實際上,Chrome會將prerender提示視為NoState預取,因此我們今天可以使用它。正如Katie Hempenius在那篇文章中解釋的那樣,“像預渲染一樣,NoState Prefetch會預先獲取資源;但是與預渲染不同,它不執(zhí)行JavaScript也不預先渲染頁面的任何部分。” NoState Prefetch僅使用?45MiB的內(nèi)存,并且將使用IDLENet Priority來獲取所獲取的子資源。從Chrome 69開始,NoState Prefetch會添加標頭用途:對所有請求進行預取,以使其與正常瀏覽區(qū)分開。
大多數(shù)時候,這些天,我們將使用至少preconnect和dns-prefetch,我們就可以用謹慎prefetch,preload和prerender; 僅當您對用戶接下來需要哪些資產(chǎn)(例如,在購買渠道中)有信心時,才應使用前者。
請注意,即使使用preconnect和dns-prefetch,瀏覽器在并行查找/連接的主機數(shù)量上也有限制,因此可以安全地根據(jù)優(yōu)先級對主機進行排序(感謝Philip Tellis?。?。
實際上,使用資源提示可能是提高性能的更簡單方法,并且確實效果很好。什么時候使用什么?正如Addy Osmani解釋的那樣,更好預加載我們非常有信心將在當前頁面上使用的資源。預取資源可能會用于將來跨多個導航邊界進行導航,例如用戶尚未訪問的頁面所需的網(wǎng)站制作pack捆綁包。
Addy的文章“在Chrome中加載優(yōu)先級”顯示了Chrome如何正確解釋資源提示,因此,一旦確定了哪些資源對于渲染至關(guān)重要,就可以為其分配高優(yōu)先級。要查看請求的優(yōu)先級,可以在Chrome DevTools網(wǎng)絡(luò)請求表(以及Safari)中啟用“優(yōu)先級”列。
細分顯示了Chrome 46及更高版本如何在Blink中區(qū)分不同資源的優(yōu)先級
(圖片來源:Pat Meenan)(大預覽)
由于字體通常是頁面上的重要資產(chǎn),因此有時更好要求瀏覽器使用來下載關(guān)鍵字體 preload。但是,請仔細檢查它是否確實對性能有所幫助,因為在預加載字體時會優(yōu)先考慮優(yōu)先順序:正如preload人們所認為的那樣,它可能會越過諸如關(guān)鍵CSS之類的更為關(guān)鍵的資源,就顯得尤為重要。(謝謝,巴里?。?/div>
您還可以動態(tài)加載JavaScript,有效地延遲執(zhí)行。另外,由于接受media屬性,因此您可以選擇根據(jù)查詢規(guī)則有選擇地對資源進行[email protected]/* */
需要牢記的一些陷阱:preload有利于移動資產(chǎn)的開始下載時間較接近初始請求,但預加載的資產(chǎn)位于與請求頁面相關(guān)的內(nèi)存緩存中。preloadHTTP緩存可以很好地發(fā)揮作用:如果HTTP緩存中已存在該項目,則永遠不會發(fā)送網(wǎng)絡(luò)請求。
因此,它對于后期發(fā)現(xiàn)的資源,通過背景圖像加載的英雄圖像,內(nèi)聯(lián)關(guān)鍵CSS(或JavaScript)以及預加載其余CSS(或JavaScript)非常有用。同樣,preload只有在瀏覽器已從服務(wù)器接收到HTML并且超前解析器已找到preload標簽后,標簽才能啟動預加載。
通過HTTP標頭進行預加載可能會更快一些,因為我們不必等待瀏覽器解析HTML來啟動請求(盡管有人對此進行了辯論)。早期的提示將有助于進一步,使預緊力踢了HTML的響應報頭被發(fā)送之前就(在路線圖鉻,火狐)。另外,優(yōu)先級提示將幫助我們指示腳本的加載優(yōu)先級。
當心:如果您正在使用preload,則as 必須進行定義或不加載任何內(nèi)容,加上不帶該 屬性的預加載字體會導致兩次獲取。crossorigin
使用服務(wù)人員進行緩存和網(wǎng)絡(luò)后備。
網(wǎng)絡(luò)上的任何性能優(yōu)化都無法比用戶計算機上本地存儲的緩存快。如果您的網(wǎng)站通過HTTPS運行,請使用“實用程序服務(wù)工作者指南”在服務(wù)工作者緩存中緩存靜態(tài)資產(chǎn),并存儲脫機后備(甚至脫機頁面),并從用戶的計算機中檢索它們,而不是去網(wǎng)絡(luò)。 。另外,請查看Jake的“離線食譜”和免費的Udacity課程“離線網(wǎng)站制作應用程序”。
瀏覽器支持?如上所述,它得到了廣泛的支持,無論如何,后備是網(wǎng)絡(luò)。它有助于提高性能嗎?哦,是的。而且它正在變得越來越好,例如通過Background Fetch允許服務(wù)人員后臺上傳/下載。
服務(wù)工作者有許多用例。例如,您可以實現(xiàn)“離線保存”功能,處理損壞的圖像,在選項卡之間引入消息傳遞或基于請求類型提供不同的緩存策略。通常,一種常見的可靠策略是將應用程序外殼以及一些關(guān)鍵頁面(例如脫機頁面,首頁和其他可能對您重要的內(nèi)容)存儲在服務(wù)工作者的緩存中。
但是要記住一些陷阱。配備服務(wù)人員后,我們需要提防Safari中的范圍請求(如果您將Workbox用于服務(wù)人員,則它具有范圍請求模塊)。如果您偶然在DOMException: Quota exceeded.瀏覽器控制臺中發(fā)現(xiàn)錯誤,請參閱Gerardo的文章何時7KB等于7MB。
正如Gerardo所說:“如果當服務(wù)工作者緩存從CDN提供的靜態(tài)資產(chǎn)時,如果您正在構(gòu)建一個漸進式
網(wǎng)站制作應用程序,并且正在經(jīng)歷cache腫的緩存存儲,請確??缬蛸Y源存在正確的CORS響應標頭,那么您就不會緩存不透明的響應與服務(wù)人員無意間,您可以通過將crossorigin屬性添加到
標簽來選擇跨域圖像資產(chǎn)進入CORS模式。”
使用Service Worker的一個很好的起點是Workbox,這是專門為構(gòu)建漸進式
網(wǎng)站制作應用程序而構(gòu)建的一組Service Worker庫。
名稱欄目:成都金牛區(qū)網(wǎng)站制作公司
網(wǎng)頁URL:http://muchs.cn/news35/178085.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項目有網(wǎng)站制作等
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)