-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
前端頁面性能優(yōu)化(前端頁面性能優(yōu)化指標(biāo)有哪些)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于前端頁面性能優(yōu)化的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、常用的前端性能優(yōu)化方法有哪些?
1、減少http請求,合理設(shè)置 HTTP緩存
2、使用瀏覽器緩存
3、啟用壓縮
4、CSS Sprites,合并 CSS圖片,減少請求數(shù)
5、CSS放在頁面最上部,javascript放在頁面最下面
前端對于網(wǎng)站來說,通常是指,網(wǎng)站的前臺部分包括網(wǎng)站的表現(xiàn)層和結(jié)構(gòu)層。因此前端技術(shù)一般分為前端設(shè)計(jì)和前端開發(fā),前端設(shè)計(jì)一般可以理解為網(wǎng)站的視覺設(shè)計(jì),前端開發(fā)則是網(wǎng)站的前臺代碼實(shí)現(xiàn),包括基本的HTML和CSS以及JavaScript/ajax,現(xiàn)在最新的高級版本HTML5、CSS3,以及SVG等。
二、瀏覽器層合成與頁面性能優(yōu)化
一個(gè)web頁面由多層構(gòu)成的
比如掘金:
瀏覽器渲染頁面
在編寫頁面中,我們要知道瀏覽器如何處理 HTML、JavaScript 和 CSS。 需要了解并注意五個(gè)主要區(qū)域, 這些我們擁有控制權(quán)的部分,也是像素至屏幕管道中的關(guān)鍵點(diǎn)。
每一步簡介
• JavaScript。 一般來說,我們會使用 JavaScript 來實(shí)現(xiàn)一些視覺變化的效果。比如用 jQuery 的 animate 函數(shù)做一個(gè)動畫、對一個(gè)數(shù)據(jù)集進(jìn)行排序或者往頁面里添加一些 DOM 元素等。當(dāng)然,除了 JavaScript,還有其他一些常用方法也可以實(shí)現(xiàn)視覺變化效果,比如:CSS Animations、Transitions 和 Web Animation API。• 樣式計(jì)算。 此過程是根據(jù)匹配選擇器(例如 .headline 或 .nav > .nav__item)計(jì)算出哪些元素應(yīng)用哪些 CSS 規(guī)則的過程。從中知道規(guī)則之后,將應(yīng)用規(guī)則并計(jì)算每個(gè)元素的最終樣式。• 布局。 在知道對一個(gè)元素應(yīng)用哪些規(guī)則之后,瀏覽器即可開始計(jì)算它要占據(jù)的空間大小及其在屏幕的位置。網(wǎng)頁的布局模式意味著一個(gè)元素可能影響其他元素,例如 元素的寬度一般會影響其子元素的寬度以及樹中各處的節(jié)點(diǎn),因此對于瀏覽器來說,布局過程是經(jīng)常發(fā)生的。• 繪制。 繪制是填充像素的過程。它涉及繪出文本、顏色、圖像、邊框和陰影,基本上包括元素的每個(gè)可視部分。繪制一般是在多個(gè)表面(通常稱為層)上完成的。• 合成。 由于頁面的各部分可能被繪制到多層,由此它們需要按正確順序繪制到屏幕上,以便正確渲染頁面。對于與另一元素重疊的元素來說,這點(diǎn)特別重要,因?yàn)橐粋€(gè)錯(cuò)誤可能使一個(gè)元素錯(cuò)誤地出現(xiàn)在另一個(gè)元素的上層。
ps: 當(dāng)然,不是每一步更改都會遵循上圖這個(gè)流程。
每一步不是必經(jīng)的
比如:
•更改了元素的布局相關(guān)的屬性:width, height, 位置... 那么瀏覽器就會檢查其他元素,自動 重排一次 。•更改了元素的 color, 陰影... 不會影響頁面的布局,那么瀏覽器就會跳過布局。這就是我們平常說的:重排一定引起重繪,重繪不一定引起重排。•如果更改了 一個(gè)既不會布局,也不會繪制的屬性,那么瀏覽器直接跳到最后一步,不得不說,這是最高效的
使用 csstriggers[1] 可以詳細(xì)看到 css 屬性改變時(shí)觸發(fā)的流程。
如何提升繪制的性能
盡量使用影響較少的屬性
舉個(gè)🌰:
<div class="box box1">1</div><div class="box box2"> 2 </div> <script> const box1 = document.querySelector('.box1'); setTimeout(() => { box1.style.display = 'none' }, 3000); </script>
我們可以看到,box1 和 box2 都綠(重繪)了一次,說明 box1 的變化影響了 box2。那這個(gè)屬性變化的代價(jià)是比較大的。
假如是我讓 box1 的位置 向右移動 60px,我們做如下更改:
document.querySelector('.box1').style.transform = 'translateX(60px)';
現(xiàn)在 box2的位置不受影響,直觀地看到 box2是沒被綠(重繪)的。
提升為合成層(Compositing Layers)
我們在上一步做了優(yōu)化,box2 已經(jīng)不受影響,但是box1 依然被重繪,那能不能在優(yōu)化呢。 答案是能的。 left 這個(gè)屬性的改變會造成的影響是:
layout -> painted -> composited
這個(gè)流程可以在 csstriggers[2] 看到。
那現(xiàn)在我們要找到一個(gè) css 屬性,既能讓元素位移,又能造成的影響最小。
答案是有的: transform:影響最小,直接到達(dá)最后一步 Composite 。 做如下更改:
box1.style.transform = 'translateX(60px)'
好像事與愿違。box1, box2 都被重繪了。
這里因?yàn)椋?#160; 他們都在一個(gè)層上,一個(gè)元素的變化也影響了其他元素。瀏覽器會聯(lián)合需要繪制的區(qū)域,而導(dǎo)致整個(gè)屏幕重繪。
為了直接到達(dá)最后一步 Composite 。其實(shí)這里有個(gè)條件: 更改屬性所在的元素應(yīng)處于其自身的合成層,如果沒在,我們可以提升為合成層` 這樣就不會影響其他元素,而能減少繪制區(qū)域。
提升為合成層的原因有一下幾種
這里我大概羅列了這么多
•video•有 3D transform•backface-visibility 為 hidden•對 opacity、transform、fliter、backdropfilter 應(yīng)用了 animation 或者 transition(需要是 active 的 animation 或者 transition,當(dāng) animation 或者 transition 效果未開始或結(jié)束后,提升合成層也會失效)•will-change 設(shè)置為 opacity、transform、top、left、bottom、right(其中 top、left 等需要設(shè)置明確的定位屬性,如 relative 等)•重疊原因
在 box1 上面做如下更改:
will-change: transform;
再次觀察效果:
大功告成:
•box1 不在重繪了•box2 不受影響 我們可以查看最終的分層效果:
和 ps 里面的圖層差不多,每一個(gè)圖層疊加在一起組成我們看到的網(wǎng)頁。
好處
提升為合成層簡單說來有以下幾點(diǎn)好處:
•合成層的位圖,會交由 GPU 合成,比 CPU 處理要快•當(dāng)需要 repaint 時(shí),只需要 repaint 本身,不會影響到其他的層•對于 transform 和 opacity 效果,不會觸發(fā) layout 和 paint
建議:
由于 transition animation 也有提升層的作用,所以動畫可以優(yōu)先考慮 css3 動畫。
物極必反
圖層越多越好嗎? 當(dāng)然不是。提升合成層也得 消耗額外的內(nèi)存和管理資源 ,
正所謂切勿提前優(yōu)化.
正如MDN所說: 如果你的頁面在性能方面沒什么問題,則不要添加 will-change 屬性來榨取一丁點(diǎn)的速度。 will-change 的設(shè)計(jì)初衷是作為最后的優(yōu)化手段,用來嘗試解決現(xiàn)有的性能問題.
參考
前端性能優(yōu)化之 Composite[3]
關(guān)鍵轉(zhuǎn)譯路徑 Critical Rendering Path[4]
will-change[5]
堅(jiān)持僅合成器的屬性和管理層計(jì)數(shù)[6]
最后
如果喜歡本篇文章,可以關(guān)注的微信公眾號,如果不嫌煩,還可以把它添加到桌面😀。
References
[1] csstriggers: https://csstriggers.com/
[2] csstriggers: https://csstriggers.com/
[3] 前端性能優(yōu)化之 Composite: https://zhuanlan.zhihu.com/p/41472193
[4] 關(guān)鍵轉(zhuǎn)譯路徑 Critical Rendering Path: https://cythilya.github.io/2018/07/13/critical-rendering-path/#browser-rendering-pipeline
[5] will-change: https://developer.mozilla.org/zh-CN/docs/Web/CSS/will-change
[6] 堅(jiān)持僅合成器的屬性和管理層計(jì)數(shù): https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count
三、前端優(yōu)化-LCP
LCP是最大內(nèi)容繪制的簡稱。LCP是用來測量感知加載速度。感知加載速度是以用戶為中心的重要指標(biāo)。因?yàn)樵擁?xiàng)指標(biāo)會在頁面的主要內(nèi)容基本加載完成時(shí),在頁面加載時(shí)間軸中標(biāo)記出相應(yīng)的點(diǎn),迅捷的LCP有助于讓用戶確信頁面時(shí)有效的。以前的指標(biāo)測量比如load(加載)或者DOMContentLoad(DOM內(nèi)容加載完畢)并不是很好,因?yàn)檫@些指標(biāo)并不一定與用戶看到的內(nèi)容相對應(yīng)。而向First Contentful Paint 首次內(nèi)容的繪制(FCP)這類以用戶為中心的新指標(biāo)只會捕獲加載最開始的部分。如果某個(gè)頁面顯示時(shí)一段啟動動畫或者加載之時(shí),那么這些時(shí)刻與用戶的關(guān)聯(lián)性并不大。First Meaningful Paint 首次有效繪制(FMP)和Speed Index速度指數(shù)(SI),這些指標(biāo)能夠捕獲到更多初始后的加載速度,但是這些指標(biāo)復(fù)雜,難以理解,而且容易出錯(cuò)。
LCP指標(biāo)會根據(jù)頁面首次開始加載的時(shí)間點(diǎn)來報(bào)告可視區(qū)域可見的最大圖像或者文本完成渲染的相對時(shí)間.良好的LCP的時(shí)間時(shí)2.5,較差的值為4.0s.最大內(nèi)容的繪制考量的元素類型為
報(bào)告給最大內(nèi)容繪制的元素大小通常時(shí)用戶在可視區(qū)域可見的大小,如果元素延伸到可視區(qū)域之外,或者任何元素被剪裁或者包含不可見的溢出,那么這部分不計(jì)入元素的帶線啊哦。對于在原始尺寸之上經(jīng)過調(diào)整的圖像元素,報(bào)告給指標(biāo)的元素大小為可見尺寸或者原始尺寸。
網(wǎng)頁通常時(shí)分階段加載的,因此,頁面上最大元素也可能會發(fā)生變化。為了應(yīng)對這種潛在的變化,瀏覽器會繪制第一幀立即發(fā)送一個(gè)largest-contentful-paint類型的PerformanceEntry,用于識別最大內(nèi)容元素,但是,在渲染后續(xù)幀之后,瀏覽器會在最大內(nèi)容元素發(fā)生變化時(shí)候分發(fā)另一個(gè)PerfornacneFanceEntry。需要主要的是,一個(gè)元素只能在渲染完成并且對用戶可見之后才視為最大元素,尚未加載點(diǎn)額元素不能視為渲染完成。在字體阻塞期使用網(wǎng)頁字體的文本節(jié)點(diǎn)也是這樣。在這種情況下,較小的元素可能會被報(bào)告稱最大元素,但一旦更大的元素完成渲染,就會通過另外一個(gè)PerformanceEntry對象進(jìn)行報(bào)告
為了使計(jì)算和分發(fā)新性能條目的性能開銷保持在較低的水平,對元素大小或者位置的更改不會生成新的LCP候選對象,只有元素在可視區(qū)域的初始化大小和位置會納入考量范圍。也就是說,最初在屏幕外完成渲染,然后過濾到屏幕上的圖像可能不會得到報(bào)告,這也意味著最初可視區(qū)域內(nèi)進(jìn)行渲染,然后被推出到可視區(qū)域外的元素人講報(bào)告其在可視區(qū)域的初始化大小
LCP主要受四個(gè)因素影響
四、如何進(jìn)行網(wǎng)站性能優(yōu)化
一、前端優(yōu)化
網(wǎng)站性能優(yōu)化是一個(gè)很綜合的話題,涉及到服務(wù)器的配置和網(wǎng)站前后端程序等各個(gè)方面,我只是從實(shí)際經(jīng)歷出發(fā),分享一下自己所嘗試過的網(wǎng)站性能優(yōu)化方法。之所以在標(biāo)題上掛一個(gè)web2.0,是因?yàn)楸疚母赜谥行【W(wǎng)站的性能優(yōu)化,我所使用的系統(tǒng)也是典型web2.0的LAMP架構(gòu)。
首先講講前端的優(yōu)化,用戶訪問網(wǎng)頁的等待時(shí)間,有80%是發(fā)生在瀏覽器前端,特別是頁面和頁面中各種元素(圖片、CSS、Javascript、 flash…)的下載之上。因此在很多情況下,相對于把大量的時(shí)間花在艱苦而繁雜的程序改進(jìn)上,前端的優(yōu)化往往能起到事半功倍的作用。雅虎最近將內(nèi)部使用的性能測試工具yslow向第三方公開,并發(fā)布了著名的網(wǎng)站性能優(yōu)化的十三條規(guī)則,建議你下載并安裝yslow,并作為測評網(wǎng)站優(yōu)化效果的工具。下面我挑其中特別有價(jià)值的具體說明一下優(yōu)化的方法:
對于第一次訪問您網(wǎng)站,尚未在瀏覽器cache中緩存您網(wǎng)站內(nèi)容的用戶,我們可以做的事情包括:
1)減少一個(gè)頁面訪問所產(chǎn)生的http連接次數(shù)
對于第一次訪問你網(wǎng)站的用戶,頁面所產(chǎn)生的http連接次數(shù)是影響性能的一個(gè)關(guān)鍵瓶頸。
對策:
- 盡量簡潔的頁面設(shè)計(jì),最大程度減少圖片的使用,通過放棄一些不必要的頁面特效來減少javascript的使用。
- 使用一些優(yōu)化技巧,比如利用圖片的背景位移減少圖片的個(gè)數(shù);image map技術(shù);使用Inline images將css圖片捆綁到網(wǎng)頁中。
- 盡量合并js和css文件,減少獨(dú)立文件個(gè)數(shù)。
2) 使用gzip壓縮網(wǎng)頁內(nèi)容
使用gzip來壓縮網(wǎng)頁中的靜態(tài)內(nèi)容,能夠顯著減少用戶訪問網(wǎng)頁時(shí)的等待時(shí)間(據(jù)說可達(dá)到60%)。主流的web服務(wù)器都支持或提供gzip壓縮,如果使用apache服務(wù)器,只需要在配置文件中開啟 mod_gzip(apache1.x)或mod_deflate(apache2.x)即可。凡是靜態(tài)的頁面,使用gzip壓縮都能夠顯著提高服務(wù)器效率并減少帶寬支出,注意圖片內(nèi)容本身已經(jīng)是壓縮格式了,務(wù)必不要再進(jìn)行壓縮。
3)將CSS放在頁面頂端,JS文件放在頁面底端
CSS的引用要放在html的頭部header中,JS文件引用盡量放在頁面底端標(biāo)簽的后面,主要的思路是讓核心的頁面內(nèi)容盡早顯示出來。不過要注意,一些大量使用js的頁面,可能有一些js文件放在底端會引起一些難以預(yù)料的問題,根據(jù)實(shí)際情況適當(dāng)運(yùn)用即可。
4)使JS文件內(nèi)容最小化
具體來說就是使用一些javascript壓縮工具對js腳本進(jìn)行壓縮,去除其中的空白字符、注釋,最小化變量名等。在使用gzip壓縮的基礎(chǔ)上,對js內(nèi)容的壓縮能夠?qū)⑿阅茉偬岣?%。
5)盡量減少外部腳本的使用,減少DNS查詢時(shí)間
不要在網(wǎng)頁中引用太多的外部腳本,首先,一次dns的解析過程會消耗20-120毫秒的時(shí)間;其次,如果在頁面中引用太多的外部文件(如各種廣告、聯(lián)盟等代碼),可能會因?yàn)橥獠课募捻憫?yīng)速度而將你的網(wǎng)站拖得很慢。如果不得不用,那么就盡量將這些腳本放在頁腳吧。不過有一點(diǎn)需要提及,就是瀏覽器一般只能并行處理同一域名下的兩個(gè)請求,而對于不同子的域名則不受此限制,因此適當(dāng)將本站靜態(tài)內(nèi)容(css,js)放在其他的子域名下(如 static.xxx.com)會有利于提高瀏覽器并行下載網(wǎng)頁內(nèi)容的能力。
對于您網(wǎng)站的經(jīng)常性訪問用戶,主要的優(yōu)化思路就是最大限度利用用戶瀏覽器的cache來減少服務(wù)器的開銷。
1)在header中添加過期時(shí)間(Expires Header)
在header中給靜態(tài)內(nèi)容添加一個(gè)較長的過期時(shí)間,這樣可以使用戶今后訪問只讀取緩存中的文件,而不會與服務(wù)器產(chǎn)生任何的交互。不過這樣做也存在一些問題,當(dāng)圖片、CSS和js文件更新時(shí),用戶如果不刷新瀏覽器,就無法獲得此更新。這樣,我們在對圖片、css和js文件修改時(shí),必須要進(jìn)行重命名,才能保證用戶訪問到最新的內(nèi)容。這可能會給開發(fā)造成不小的麻煩,因?yàn)檫@些文件可能被站點(diǎn)中的許多文件所引用。flickr提出的解決辦法是通過url rewrite使不同版本號的URL事實(shí)上指向同一個(gè)文件,這是一個(gè)聰明的辦法,因?yàn)閡rl級別的操作效率是很高的,可以給開發(fā)過程提供不少便利。
要理解為什么這樣做,必須要了解瀏覽器訪問url時(shí)的工作機(jī)制:
a. 第一次訪問url時(shí),用戶從服務(wù)器段獲取頁面內(nèi)容,并把相關(guān)的文件(images,css,js…)放在高速緩存中,也會把文件頭中的expired time,last modified, ETags等相關(guān)信息也一同保留下來。
b. 用戶重復(fù)訪問url時(shí),瀏覽器首先看高速緩存中是否有本站同名的文件,如果有,則檢查文件的過期時(shí)間;如果尚未過期,則直接從緩存中讀取文件,不再訪問服務(wù)器。
c. 如果緩存中文件的過期時(shí)間不存在或已超出,則瀏覽器會訪問服務(wù)器獲取文件的頭信息,檢查last modifed和ETags等信息,如果發(fā)現(xiàn)本地緩存中的文件在上次訪問后沒被修改,則使用本地緩存中的文件;如果修改過,則從服務(wù)器上獲取最新版本。
我的經(jīng)驗(yàn),如果可能,盡量遵循此原則給靜態(tài)文件添加過期時(shí)間,這樣可以大幅度減少用戶對服務(wù)器資源的重復(fù)訪問。
2)將css和js文件放在獨(dú)立外部文件中引用
將css和js文件放在獨(dú)立文件中,這樣它們會被單獨(dú)緩存起來,在訪問其他頁面時(shí)可以從瀏覽器的高速緩存中直接讀取。一些網(wǎng)站的首頁可能是例外的,這些首頁的自身瀏覽可能并不大,但卻是用戶訪問網(wǎng)站的第一印象以及導(dǎo)向到其他頁面的起點(diǎn),也可能這些頁面本身使用了大量的ajax局部刷新及技術(shù),這時(shí)可以將 css和js文件直接寫在頁面中。
3)去掉重復(fù)的腳本
在IE中,包含重復(fù)的js腳本會導(dǎo)致瀏覽器的緩存不被使用,仔細(xì)檢查一下你的程序,去掉重復(fù)引用的腳本應(yīng)該不是一件很難的事情。
4)避免重定向的發(fā)生
除了在header中人為的重定向之外,網(wǎng)頁重定向常在不經(jīng)意間發(fā)生,被重定向的內(nèi)容將不會使用瀏覽器的緩存。比如用戶在訪問,服務(wù)器會通過301轉(zhuǎn)向到/,在后面加了一個(gè)“/”。如果服務(wù)器的配置不好,這也會給服務(wù)器帶來額外的負(fù)擔(dān)。通過配置apache的 alias或使用mod_rewrite模塊等方法,可以避免不必要的重定向。
還有一些,比如使用CDN分發(fā)機(jī)制、避免CSS表達(dá)式等、避免使用ETags等,因?yàn)椴惶S?,這里就不再贅述了。
做完了上述的優(yōu)化,可以試著用yslow測試一下網(wǎng)頁的性能評分,一般都可以達(dá)到70分以上了。
當(dāng)然,除了瀏覽器前端和靜態(tài)內(nèi)容的優(yōu)化之外,還有針對程序腳本、服務(wù)器、數(shù)據(jù)庫、負(fù)載的優(yōu)化,這些更深層次的優(yōu)化方法對技術(shù)有更高的要求。本文的后半部分將重點(diǎn)探討后端的優(yōu)化。
二、后端優(yōu)化
上次寫完web2.0網(wǎng)站前端優(yōu)化篇之后,一直想寫寫后端優(yōu)化的方法,今天終于有時(shí)間將思路整理了出來。
前端優(yōu)化可以避免我們造成無謂的服務(wù)器和帶寬資源浪費(fèi),但隨著網(wǎng)站訪問量的增加,僅靠前端優(yōu)化已經(jīng)不能解決所有問題了,后端軟件處理并行請求的能力、程序運(yùn) 行的效率、硬件性能以及系統(tǒng)的可擴(kuò)展性,將成為影響網(wǎng)站性能和穩(wěn)定的關(guān)鍵瓶頸所在。優(yōu)化系統(tǒng)和程序的性能可以從以下的方面來入手:
1)apache、mysql等軟件的配置的優(yōu)化
盡管apache和mysql等軟件在安裝后使用的默認(rèn)設(shè)置足以使你的網(wǎng)站運(yùn)行起來,但是通過調(diào)整mysql和apache的一些系統(tǒng)參數(shù),還是可以追求更高的效率和穩(wěn)定性。這個(gè)領(lǐng)域中有很多專業(yè)的文章和論壇(比如: ),要想掌握也需要進(jìn)行深入的研究和實(shí)踐,這里就不重點(diǎn)討論了。
2)應(yīng)用程序環(huán)境加速
這里僅以我最常應(yīng)用的php開發(fā)環(huán)境為例,有一些工具軟件可以通過優(yōu)化PHP運(yùn)行環(huán)境來達(dá)到提速的目的,其基本原理大致是將PHP代碼預(yù)編譯并緩存起來,而不需要改變?nèi)魏未a,所以比較簡單,可以將php的運(yùn)行效率提升50%以上。比較常用的php加速工具有:APC( http: //pecl.php.net/package-info.php?package=APC)、Turck MMCache( )、php accelebrator(),還有收費(fèi)的Zend Performance Suite
3)將靜態(tài)內(nèi)容和動態(tài)內(nèi)容分開處理
apache是一個(gè)功能完善但比較龐大的web server,它的資源占用基本上和同時(shí)運(yùn)行的進(jìn)程數(shù)呈正比,對服務(wù)器內(nèi)存的消耗比較大,處理并行任務(wù)的效率也一般。在一些情況下,我們可以用比較輕量級的web server來host靜態(tài)的圖片、樣式表和javascript文件,這樣可以大大提升靜態(tài)文件的處理速度,還可以減少對內(nèi)存占用。我使用的web server是來自俄羅斯的nginx,其他選擇方案還包括lighttpd和thttpd等。
4)基于反向代理的前端訪問負(fù)載均衡
當(dāng)一臺前端服務(wù)器不足以應(yīng)付用戶訪問時(shí),通過前端機(jī)實(shí)現(xiàn)web訪問的負(fù)載均衡是最快速可行的方案。通過apache的mod_proxy可以實(shí)現(xiàn)基于反向代理的負(fù)載均衡,這里推薦使用nginx做代理服務(wù)器,處理速度較apache更快一些。
5)應(yīng)用緩存技術(shù)提高數(shù)據(jù)庫效能,文件緩存和分布式緩存
數(shù)據(jù)庫訪問處理并發(fā)訪問的能力是很多網(wǎng)站應(yīng)用的關(guān)鍵瓶頸,在想到使用主從結(jié)構(gòu)和多farm的方式構(gòu)建服務(wù)器集群之前,首先應(yīng)該確保充分使用了數(shù)據(jù)庫查詢的緩存。一些數(shù)據(jù)庫類型(如mysql的innoDB)自身內(nèi)置對緩存的支持,此外,還可以利用程序方法將常用的查詢通過文件或內(nèi)存緩存起來。比如通過 php中的ob_start和文件讀寫函數(shù)可以很方便的實(shí)現(xiàn)文件形式的緩存,而如果你擁有多臺服務(wù)器,可以通過memcache技術(shù)通過分布式共享內(nèi)存來對數(shù)據(jù)庫查詢進(jìn)行緩存,不僅效率高而且擴(kuò)展性好,memcache技術(shù)在livejournal和Craigslist.org等知名網(wǎng)站應(yīng)用中都得到了檢驗(yàn)。
6)服務(wù)器運(yùn)行狀態(tài)的檢測,找到影響性能的瓶頸所在
系統(tǒng)優(yōu)化沒有一勞永逸的方法,需要通過檢測服務(wù)器的運(yùn)行狀態(tài)來及時(shí)發(fā)現(xiàn)影響性能的瓶頸,以及可能存在的潛在問題,因?yàn)榫W(wǎng)站的性能,永遠(yuǎn)取決于木桶中的短板??梢跃帉懸恍┠_本來檢測web服務(wù)的運(yùn)行,也有一些開源的軟件也提供了很好的功能
7)良好的擴(kuò)展架構(gòu)是穩(wěn)定和性能的基礎(chǔ)
一些技巧和竅門可以幫你度過眼前的難關(guān),但要想使網(wǎng)站具備應(yīng)付大規(guī)模訪問的能力,則需要從系統(tǒng)架構(gòu)上進(jìn)行徹底的規(guī)劃,好在很多前人無私的把他們架構(gòu)
網(wǎng)站的經(jīng)驗(yàn)分享給我們,使我們可以少走甚多彎路。我最近讀到的兩篇有啟發(fā)的文章:
- 從LiveJournal后臺發(fā)展看大規(guī)模網(wǎng)站性能優(yōu)化方法
- Myspace的六次重構(gòu)
最后不得不提到程序編碼和數(shù)據(jù)庫結(jié)構(gòu)對性能的影響,一系列糟糕的循環(huán)語句,一個(gè)不合理的查詢語句、一張?jiān)O(shè)計(jì)不佳的數(shù)據(jù)表或索引表,都足以會使應(yīng)用程序運(yùn)行的速度成倍的降低。培養(yǎng)全局思考的能力,養(yǎng)成良好的編程習(xí)慣,并對數(shù)據(jù)庫運(yùn)行機(jī)制有所了解,是提高編程質(zhì)量的基礎(chǔ)。
以上就是關(guān)于前端頁面性能優(yōu)化相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
前端頁面性能優(yōu)化(前端頁面性能優(yōu)化指標(biāo)有哪些)
杭州的前端開發(fā)好找嗎(杭州的前端開發(fā)好找嗎工資高嗎)
景觀設(shè)計(jì)如何選擇燈具類型(景觀設(shè)計(jì)如何選擇燈具類型圖片)