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