性能測(cè)試是發(fā)布新網(wǎng)站和新代碼的重要環(huán)節(jié)。全面性能測(cè)試決定了發(fā)布的成功或失敗。
在發(fā)布新網(wǎng)站和應(yīng)用程序時(shí),性能測(cè)試尤其重要,因?yàn)檫@時(shí)還沒有任何關(guān)于應(yīng)用執(zhí)行性能的歷史數(shù)據(jù)。應(yīng)用程序框架、平臺(tái)和硬件的新技術(shù)也可能會(huì)開始起作用。硬件的變化是很快的,而使用最新發(fā)布的硬件來(lái)運(yùn)行應(yīng)用程序,其性能可能比六個(gè)月前預(yù)定的硬件高很多。
性能測(cè)試應(yīng)該盡早執(zhí)行,新產(chǎn)品的所有組件都應(yīng)該先進(jìn)行測(cè)試,然后才能進(jìn)行開發(fā)。如果新硬件的容量達(dá)到了遺留系統(tǒng)硬件容量的兩倍水平,那么使應(yīng)用架構(gòu)產(chǎn)生相同性能的硬件需求就會(huì)少于過去開發(fā)的應(yīng)用程序。
如果已經(jīng)有一個(gè)可訪問和正常運(yùn)行的Web應(yīng)用程序,那么先給新應(yīng)用程序分配一小部分測(cè)試帶寬(如果它將替代舊的應(yīng)用程序),然后讓最終用戶試用新應(yīng)用程序。這種“在生產(chǎn)環(huán)境中測(cè)試”的方法可以給我們提供一些非常寶貴的信息,從中可以了解當(dāng)生產(chǎn)流量進(jìn)人應(yīng)用程序時(shí)它的執(zhí)行情況。此外,我們也可以通過解析歷史Web日志來(lái)模擬一些生產(chǎn)流量,將這些流量導(dǎo)入到新應(yīng)用程序上,從而測(cè)試它在生產(chǎn)環(huán)境的運(yùn)行性能。然而,這仍然屬于一種合成測(cè)試,其測(cè)試結(jié)果肯定不同于公共互聯(lián)網(wǎng)的真實(shí)測(cè)覽器或客戶端成用程序的真頭流量的測(cè)試果。通過測(cè)量到達(dá)新應(yīng)用程序的流量數(shù)量,或者將現(xiàn)有網(wǎng)站的一小部分用戶導(dǎo)入到新應(yīng)用程序中,我們就可以獲得一些寶貴的信息,了解應(yīng)用程序在正式發(fā)布和接收生產(chǎn)流量之后可能的執(zhí)行情況。
1.本地性能測(cè)試
Web開發(fā)人員應(yīng)該在專用服務(wù)器上創(chuàng)建Web應(yīng)用程序?qū)嵗,這個(gè)專用服務(wù)器要的硬件和環(huán)境配置都要跟新網(wǎng)站及其應(yīng)用程序、數(shù)據(jù)庫(kù)或數(shù)據(jù)存儲(chǔ)將要使用的硬件和環(huán)境配置相類似。并不是每一位Web開發(fā)人員都能夠創(chuàng)建一個(gè)與生產(chǎn)環(huán)境類似的環(huán)境。然而,重要的是他們有足夠的可用資源,能創(chuàng)建最接近部署最終產(chǎn)品的生產(chǎn)環(huán)境。這可能意味著,Web開發(fā)人員要有一個(gè)塔式工作站,但是它的處理能力與運(yùn)行生產(chǎn)網(wǎng)站的服務(wù)器相當(dāng)。這樣可以保證開發(fā)應(yīng)用程序的環(huán)境盡可能接近最終的生產(chǎn)環(huán)境。
保證網(wǎng)站或應(yīng)用程序性能接近客戶所面對(duì)環(huán)境的另一種方法是,直接在一個(gè)與生產(chǎn)環(huán)境類似的測(cè)試環(huán)境上開發(fā)應(yīng)用程序。這取決于快照時(shí)間表是否合理,以及目前有多少的試生產(chǎn)或分段環(huán)境,但是這樣做可以節(jié)約很多時(shí)間,因?yàn)楸镜亻_發(fā)者工作站通常無(wú)法反映Web應(yīng)用程序在生產(chǎn)環(huán)境的真實(shí)性能。
本地測(cè)試可以直接通過使用一些自動(dòng)化工具或?yàn)g覽器插件完成。最使用真實(shí)Web瀏覽器去測(cè)試Web應(yīng)用程序性能,因?yàn)樗軌蚋鎸?shí)地反映網(wǎng)站的性能。大多數(shù)網(wǎng)站都是動(dòng)態(tài)的,而 Jmeter I或 Apache Bench等自動(dòng)化合成測(cè)試工具無(wú)法呈現(xiàn)動(dòng)態(tài)內(nèi)容,如 Javascript和CSs,而且它們會(huì)增加網(wǎng)站的響應(yīng)時(shí)間。工具 Hammerhead支持在Ficx瀏覽器中重復(fù)加載一個(gè)網(wǎng)頁(yè)并清除緩存,從而可以幫助Web開發(fā)人員了解一個(gè)網(wǎng)頁(yè)的加載時(shí)間。 Firebug.則是另一個(gè)實(shí)用工具,它可以顯示W(wǎng)eb瀏覽器呈現(xiàn)一個(gè)網(wǎng)頁(yè)所需要的時(shí)間,其中包括所有的動(dòng)態(tài)內(nèi)容。
如果本地測(cè)試發(fā)現(xiàn)頁(yè)面加載時(shí)間為1~3秒,而且網(wǎng)站本身沒有太多的圖片,那么這個(gè)網(wǎng)站就可能有一些問題。大多數(shù)網(wǎng)民都沒耐心,他們不愿意等待,特別是現(xiàn)在寬帶已經(jīng)非常普及,早不是撥號(hào)上網(wǎng)的時(shí)期,用戶并不理解數(shù)據(jù)庫(kù)需要先執(zhí)行一些査詢操作,然后才能呈現(xiàn)一個(gè)網(wǎng)頁(yè)。所以,在測(cè)試Web應(yīng)用程序時(shí),如果渲染時(shí)間超過3秒鐘,那么可能就要去掉一些需要加載的靜態(tài)內(nèi)容或所執(zhí)行的前端操作數(shù)量
2.緩存
許多公司會(huì)錯(cuò)誤地決定購(gòu)買一個(gè)內(nèi)容交付網(wǎng)絡(luò)(CDN)。CDN通常是一種Web內(nèi)容的反向代理,所以CDN公司會(huì)在各地配置Web服務(wù)器,它很像一個(gè)web性能監(jiān)控公司。CDN不會(huì)在服務(wù)器上使用Web瀏覽器去定期測(cè)試網(wǎng)站的加載速度,而是將我們的網(wǎng)站服務(wù)器副本存儲(chǔ)到全國(guó)或全世界各地。使用CDN的主要原因是因?yàn)閃eb服務(wù)器所在位置與用戶所在位置不同,例如網(wǎng)站在加拿大多倫多,而用戶從美國(guó)堪薩斯州威奇托市訪問網(wǎng)站,所以網(wǎng)站加載時(shí)間就包括從多倫多到威奇托之間的數(shù)據(jù)加載時(shí)間。相反,CDN會(huì)使用一個(gè)Web服務(wù)器的反向代理將內(nèi)容存到本地,所以當(dāng)有人從威奇托訪問網(wǎng)站時(shí),返回響應(yīng)的是CDN公司位于威奇托的服務(wù)器,而不是多倫多的原始服務(wù)器,這樣就可以顯著減少響應(yīng)時(shí)間。
許多CDN公司現(xiàn)在都會(huì)在服務(wù)中附加一些Web性能最佳實(shí)踐方法,如縮略或壓縮 Javascript、HTML和CSS內(nèi)容的壓縮技術(shù),甚至再添加層Web應(yīng)用程序安全抽象。這些都是非常適合生產(chǎn)網(wǎng)站的服務(wù),它們可以提高網(wǎng)站設(shè)計(jì)的性能,但是在解決性能問題時(shí),工程師必須謹(jǐn)慎使用這些“罐裝”服務(wù)。緩存是一種加速和提升網(wǎng)站性能的好方法,但并不是一種修復(fù)性能問題的有效方法,我們應(yīng)該在開發(fā)人員的本地工作站上解決性能問題。