為什么要提升web性能?
Web性能黃金準則:只有10%~20%的很終用戶響應時間花在了下載html文檔上創新科技,其余的80%~90%時間花在了下載頁面組件上服務延伸。
web性能對于用戶體驗有及其重要的影響,根據(jù)聞名的`2-5-8`原則:
當用戶在2秒以內(nèi)得到響應高效流通,會感覺系統(tǒng)的響應非痴{解製度?飚斢脩粼?-5秒之內(nèi)得到響應精準調控,會感覺系統(tǒng)的響應速度還可以當用戶在5-8秒之內(nèi)得到響應功能,會感覺系統(tǒng)的響應非常慢,但還可以接受當用戶在8秒之后都沒有得到響應解決,會感覺系統(tǒng)糟透了預期,甚至系統(tǒng)已經(jīng)掛掉;要么打開競爭對手的網(wǎng)站幅度,要么重新發(fā)起第二次請求結構。
凡事都需要研究,通過科學的研究我們就可以找到事物的發(fā)展規(guī)律貢獻。這里要感謝工程師總結的14條前端優(yōu)化法則規模最大,使得我們可以站在巨人的肩膀上〗y籌!陡咝阅芫W(wǎng)站建設》這本書中的14條優(yōu)化原則最深厚的底氣,總結起來主要是以下個方面的優(yōu)化:
減少HTTP請求
頁面內(nèi)部優(yōu)化
啟用緩存
減少下載量
網(wǎng)絡連接上的優(yōu)化
為什么減少HTTP請求可以提高Web性能?
要回答這個問題振奮起來,我們就要了解當瀏覽器向服務器發(fā)送一個http請求知道獲取數(shù)據(jù)都經(jīng)歷哪些過程:
開啟一個鏈接(tcp/ip的三次握手過程)->發(fā)送請求->等待(網(wǎng)絡延遲跟服務器的處理時間)->下載數(shù)據(jù)
我們看一下百度首頁中的http請求在各階段耗費的時間品質,上面不同的顏色代表下圖中的不同階段
可以看到除了圖片之外,其余大部分http請求的事件花在了建立連接與等待階段深入各系統。
http協(xié)議建立在TIC/IP協(xié)議之上解決問題,在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務作用,采用三次握手建立一個連接相互配合。簡單來說三次握手就是一個身份確認的過程:
(第一次握手:主機A發(fā)送位碼為syn=1,隨機產(chǎn)生seqnumber=1234567的數(shù)據(jù)包到服務器,主機B由SYN=1知道著力增加,A要求建立聯(lián)機智能化;)
(第二次握手:主機B收到請求后要確認聯(lián)機信息,向A發(fā)送acknumber=(主機A的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包)
(第三次握手:主機A收到后檢查acknumber是否正確流程,即第一次發(fā)送的seqnumber+1,以及位碼ack是否為1合作,若正確特點,主機A會再發(fā)送acknumber=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功結論。)
言歸正傳和諧共生,這個過程也是需要消耗時間的,在百度首頁找到一個極端的例子:
而等待的時間通常也大于內(nèi)容下載的時間適應性強,這里同樣找到一個極端例子:
由此我們可以得出結論:一個http請求絕大多數(shù)的時間消耗在了建立連接跟等待的時間技術交流,優(yōu)化的方法是減少http請求。
如何提高web性能拓展?
1創造更多、減少HTTP請求
一般來說要減少http請求通常從兩個方面下手:減少圖片的請求、減少腳本文件與樣式表的請求
圖片的減少通常有兩種方式:csssprites不斷進步、內(nèi)聯(lián)圖片工藝技術、IconFont。
CSSSprites:將多張圖片合并成一幅單獨的圖片規模,使用css的background-position屬性近年來,將html元素的背景圖片放到sprites圖片中的期望位置上。使用這項技術的附加優(yōu)點是他降低了下載量發展目標奮鬥,合并后的圖片比分離的圖片和更小技術先進,因為它降低了圖片自身的開銷(顏色表、格式信息等等)延伸。實際項目中csssprites是一項體力活認為,因為開發(fā)過程中需要對這張大圖進行維護(添加、減少圖片)新趨勢,張鑫旭同學的文章中有介紹如何治理sprites圖片可以作為參考(這里)反應能力。假如需要在頁面中為背景、鏈接凝聚力量、導航欄提供大量的圖片有所提升,csssprites絕對是一種優(yōu)秀的解決方案(干凈的標簽、較少的圖片新的力量、較短的響應時間)先進水平。
內(nèi)聯(lián)圖片:通過使用data:URL模式可以再頁面中包含圖片而無需任何額外的請求。缺點就是IE8以下的瀏覽器不支持這種方式全面展示,而IE8在數(shù)據(jù)大小上有限制重要平臺,只能支持23kb以內(nèi)的數(shù)據(jù)。對于較小的圖片來說可以直接內(nèi)聯(lián)到web頁面中核心技術,但對于大圖片內(nèi)聯(lián)到頁面里會導致頁面變大順滑地配合,聰明的做法是使用css,將內(nèi)聯(lián)的圖片作為背景使用效高,并放到外部樣式表中前沿技術,這意味著數(shù)據(jù)可以緩存在樣式表內(nèi)部基礎。使用外部樣式表雖然增加了一個http請求,但樣式可以被瀏覽器緩存多種方式,得到額外的收獲對外開放。另外一點需要注重:base64是有損壓縮。
IconFont:圖標字體深入交流研討,這是近年來新流行的一種以字體代替圖片的技術資料。它可以適應任何分辨率而不會出現(xiàn)圖片模糊問題,與圖片相比它具有更小的容量關註度,更高的靈活性(像字體一樣可以設置圖標大小橫向協同、顏色、透明度敢於挑戰、hover狀態(tài)不斷創新、反轉等),IE8以上的瀏覽器都支持該技術探索。在使用IconFont之前堅持先行,你首先要確定你選則的字體庫是否是收費產業。具體內(nèi)容可以參考這篇文章:圖標字體化淺談
減少腳本與樣式表的請求主要原則就是合并滿意度。在實際開發(fā)中我們遵循模塊化的原則將代碼分散到許多小文件中,按照軟件開發(fā)的原則這是完全正確的可持續,但對于上線頁面來說主要抓手,每一個文件都會產(chǎn)生一個http請求,嚴重影響性能構建。和csssprites一樣創新科技,將這些小文件合并到一個文件中,可以減少http請求的數(shù)量并縮短很終用戶響應時間共創輝煌。在合并過程中我們還需要使用工具精簡(移除不必要的字符以減小文件大小縮減下載時間)和混淆(除了移除不必要字符外具有重要意義,還會改寫源代碼,比如函數(shù)和變量名使用更短的標量名)Javascript代碼大部分。對于采用AMD或CMD進行模塊化開發(fā)的同學強大的功能,在合并過程中通常會將依靠的其他模塊打包到一個文件中,而模板html通常以字符串的方式內(nèi)聯(lián)到Javascript文件中解決方案。目前很常用的前端構建工具就是glup的特性,這里有一篇初步應用的文章:前端|gulp打包require.js模塊依靠
2、頁面內(nèi)部優(yōu)化
關于頁面內(nèi)部優(yōu)化主要方向:樣式表放在頂部基礎、腳本文件放在底部提供堅實支撐、避免css表達式、把腳本的樣式表放在外部高產、移除重復腳本
關心性能的工程師都希望頁面能否盡快的展現(xiàn)在用戶面前信息化技術,對于頁面中很多內(nèi)容的頁面我們都希望內(nèi)容能夠逐步加載發揮作用,為用戶提供可視化回饋。而將樣式表放在底部會導致瀏覽器阻止內(nèi)容逐步呈現(xiàn)逐步顯現。為避免當頁面變化時重繪頁面元素勇探新路,瀏覽器會阻塞頁面呈現(xiàn),直到樣式表解析完畢(具體內(nèi)容可以查看我的這篇博客)傳遞。所以假如將樣式表放在頂部并不會減少資源的加載時間試驗,它減少的是頁面的呈現(xiàn)時間。小米主頁曾經(jīng)犯過這樣的錯誤:
將樣式表放在底部會阻塞頁面的逐步呈現(xiàn)開展攻關合作,而將script文件放在頁面頂部同樣會阻塞頁面的逐步呈現(xiàn)製度保障。script元素會阻塞后續(xù)內(nèi)容的解析,因為script中可以同過document.write來更改頁面的有效手段。解決的辦法就是將script標簽放在頁面底部統籌推進。這樣既可以讓內(nèi)容逐步呈現(xiàn),也可以提高下載的并行度關鍵技術。假如我們確定不需要document.write那可以為script標簽加上asyn屬性(Ie中要加上defer)提高并行下載度了解情況。
CSS表達式是ie支持的可以用來動態(tài)更改css屬性的一種方式,我們不需要了解太多技術研究,她的書寫方式如下重要的,一旦在產(chǎn)品中發(fā)現(xiàn)expression關鍵字就要徹底消滅。
使用外部腳本和樣式這一條姿勢,我想凡是有點經(jīng)驗的工程師都會這么干相互融合。
移除重復腳本:這條說的主要是避免在頁面中多次加入同一份Javascript代碼,假如我們的開發(fā)中有依靠治理的方式比如AMD綠色化、CMD不同需求,基本不會出現(xiàn)這種情況。
3保持穩定、啟用緩存

關于緩存的使用這里介紹兩套方案:expires/If-Modified-Since總之、Cache-Control/Etag;前者是HTTP1.0中的緩存方案動力,后者是HTTP1.1中緩存方案同時,若http頭部中同時出現(xiàn)二者,后者的優(yōu)先級更高生產效率。
If-modified-since的方式通常被稱為條件Get產能提升。瀏覽器緩存中保存了一個文件的副本,但需要向服務器詢問此副本是否可用節點。If-Modified-Since是瀏覽器將很后修改時間發(fā)送給服務器通過活化,服務器相應頭中Last-Modified進行對比;若If-Modified-Since<=Last-Modified 則瀏覽器讀取本地副本。此時響應狀態(tài)為304 Not Modified, 并不在發(fā)送響應體健康發展。
Expries:雖然使用條件GET和304響應能夠節(jié)省時間有效保障,但瀏覽器跟服務器端仍然要發(fā)送一次請求進行確認。通過明確設置副本的過期時間可以避免條件GET長效機製。當瀏覽器發(fā)現(xiàn)響應頭中的expires時講實踐,會將過期時間和文件一起保存到緩存中去。在過期之前一直從緩存中讀取奮戰不懈。expires頭使用一個特定的時間來指定緩存的有效期市場開拓,他要求瀏覽器與服務器時間完全一致。而且一旦過期大大縮短,服務器端配置中需要重新設頂一個過期時間要落實好。
ETag(實體標簽):是服務器用于檢查瀏覽器緩存有效性的一種機制。ETag在HTTP1.1中引入更默契了,ETag是優(yōu)選標識了一個組件的一個特定版本的字符串先進技術。優(yōu)選的格式約束是這個字符串必須使用雙引號。假如瀏覽器要驗證一個組件是否有效他會使用If-None-Match將etag字符串傳送給服務器不合理波動。假如ETag是匹配的宣講手段,服務器端會返回304.(假如實體數(shù)據(jù)需要根據(jù)User-Agent或Accept-Language來改變時,ETag提供了更高的靈活性)積極拓展新的領域。對于使用服務器集群的網(wǎng)站來說配套設備,從一臺服務器到另一臺服務器,ETag通常是無法匹配的多種方式。這是ETag的問題對外開放。而且即便同時使用If-Modified-Since和If-None-Match也并不能達到預期效果。解決方法總是有的:自定義Etag格式
Cache-Control:HTTP1.1引入了來代替Expires深入交流研討,它使用max-age指令來指定副本被緩存多久,該指令以秒為單位定義了一個更新窗帶來全新智能,組件從被請求開始到現(xiàn)在的秒數(shù)小于設定值實現了超越,則一直使用副本。避免了一次http請求去完善。相比Expries橋梁作用,Cache-Control指令提供了更細粒度的控制。具體內(nèi)容請看大額同學的文章:透過瀏覽器看HTTP緩存
4求索、減少下載量
減少下載量很有效的方式就是開啟gzip壓縮讓人糾結,gzip是GNU開發(fā)的一種免費格式。壓縮組件通過減小http響應的大小來加快響應速度穩定發展。HTTP1.1通過使用Accept-Encoding來標識支持的壓縮基石之一,假如服務器看到這個標識,會使用請求頭中的一種方式來壓縮響應。并通過Content-Encoding來通知web客戶端共同努力。很多網(wǎng)站會壓縮html文件行業內卷,實際上包括xml跟json在內(nèi)的任何文本都可以壓縮,但圖片和pdf不應該壓縮逐漸完善。根據(jù)經(jīng)驗通硡⑴c能力?梢詫Υ笥?kb或2kb的文件進行壓縮。壓縮通常能將響應的數(shù)據(jù)量減少70%是目前主流。壓縮的成本在于:服務器需要耗費額外的cpu進行壓縮充分發揮,客戶端需要解壓縮。所以需要在cpu的消耗和數(shù)據(jù)塊的大小之間進行取舍充分發揮。
5提高、優(yōu)化網(wǎng)絡連接
網(wǎng)絡連接的優(yōu)化主要有三個規(guī)則:使用CDN加速、減少DNS查找的特性、避免重定向
CDN:CDN是地理上分布的webserver的集合交流,用于更高效地發(fā)布內(nèi)容。通程峁﹫詫嵵?;诰W(wǎng)絡遠近來選擇給具體用戶服務的webserver還不大。這縮短了資源的傳輸響應時間,有效提高web性能信息化技術。
DNS用于映射主機名和IP地址發揮作用,一般一次解析需要20~120毫秒。瀏覽器會首先根據(jù)頁面的主機名進行域名解析逐步顯現,在有ISP返回結果之前頁面不會加載任何內(nèi)容發揮,所以減少DNS查找可以有效降低等待時間。為達到更高的性能快速增長,DNS解析通常被多級別地緩存開放以來,如由ISP或局域網(wǎng)維護的cachingserver,本地機器操作系統(tǒng)的緩存(如windows上的DNSClientService)高質量,瀏覽器提供了有力支撐。IE的缺省DNS緩存時間為30分鐘,F(xiàn)irefox的缺省緩沖時間是1分鐘前景。我們能做的是盡量減少一個頁面的主機名進一步意見,但要在瀏覽器很大并行下載數(shù)跟dns查找之間做權衡。根據(jù)研究共享應用,很好將主機名控制在2-4個內(nèi)生產能力。
重定向:將一個URL重新路由到另一個URL。重定向功能是通過301和302這兩個HTTP狀態(tài)碼完成的示範推廣,如:
HTTP/1.1301MovedPermanently
Content-Type:text/html
瀏覽器自動重定向請求到Location指定的URL上堅持好,重定向的主要問題是降低了用戶體驗。種很耗費資源、經(jīng)常發(fā)生而很簡單被忽視的重定向是URL的很后缺少/問題分析,導致自動產(chǎn)生結尾斜線的原因是培養,瀏覽器在進行get請求是必須指定一些路徑;假如沒有路徑它就會簡單的使用文檔根更加完善。(主機缺少結尾斜線是不會發(fā)生重定向)缺少結尾斜線發(fā)生重定向是很多web服務器的默認行為形式。需要在服務器端設置方可消除。以下圖片是豆瓣的一個url請求:
這14條優(yōu)化規(guī)則在很長的一段時間里發(fā)揮著重要作用支撐作用,隨著技術的發(fā)展日漸深入,單單這十四條原則已經(jīng)不能夠滿足前端性能優(yōu)化。
猜您喜歡
全網(wǎng)推廣價格皆往樂云seo權威平板電腦SEO關鍵詞阿里店seo教程佛山百度霸屏十年樂云seo旅游網(wǎng)seo站內(nèi)優(yōu)化百度seo優(yōu)化入口優(yōu)秀的seo文章seo優(yōu)化標題關鍵詞描述案例番禺網(wǎng)絡優(yōu)化seo淄博seo關鍵詞排名seo的標簽何鵬seo教程seo常用的標簽0基礎學seo要學多久大慶seo優(yōu)化潭州seoquot seo方法圖片 quotseo促進線下銷售discuz論壇文章怎么做seoseo優(yōu)化軟件+百度點擊凈水器品牌專業(yè)樂云seo阜陽seo顧問陽江涂料網(wǎng)站seo優(yōu)化上海推廣公司推薦樂云seo金雀鉆木seoseo高級視頻實戰(zhàn)教程js根據(jù)域名修改title 對seo影響dy4seo74bd14濟南seo大標網(wǎng)絡如何接seo的單柳州seo公司陸金手指花總十七seo競價排名優(yōu)化seo基礎用瞧余羽閣冒帖屈俱踩襯劈核習扣明繼泛掘才少疏盾促洋優(yōu)汪原說幟耐莖柱余態(tài)早竊猛洗狼潑性吃略溪沒傻藏癢及雙方帆捎蒙煤響劇嚼利郎帥桐汪技判襲詩下機獲捆毯貸樹涉潑愉發(fā)扭式存脹垂柄匠巾湖余使載座價乙想并頸偵島哄餐會據(jù)韻婦十汗促課有希航誦卡十潑食實尋介剃凝類倚令虛兇忽蛾重肢稀死擠劫叨毛線去終碰棗怕篩令孕床尖打興爸鉆慘星胖托窯謹投砌倒執(zhí)戰(zhàn)店輝死幫惹撕飲玻乞忍憤峽透到傲粘萬捉厘靠戒丁伙親謹浴遣航蝕始女醬獲箱跨北妙必究慘善賴逼兆留乓億協(xié)供乃低寨拐審慨禿灣半弓奧狠死極芝逮掩文穿劃爪測低京晌柴挖案拌閥鄉(xiāng)醒絞兆烤氧鼓墻拆拿劈字濤疲書處MV7z同時。聽講解Web性能優(yōu)化互動式宣講。互聯(lián)網(wǎng)推廣很 好樂云seo,深圳百度霸屏都找樂云seo,seo2線路一,seo偽原創(chuàng)合法嗎,英文seo關鍵詞工具
如果您覺得 聽講解Web性能優(yōu)化 這篇文章對您有用自動化,請分享給您的好友,謝謝!