2016-11-17 12:07:04
網(wǎng)站建設(shè)有關(guān)的重定向技術(shù)綜述...
因?yàn)閞esponse是jsp頁(yè)面中的隱含對(duì)象,故在jsp網(wǎng)站建設(shè)頁(yè)面中可以用response.sendRedirect()直接完成重定位。 留意: (1).運(yùn)用response.sendRedirect時(shí),后面不克...
發(fā)表日期:2017-11-23 10:55:08   文章編輯:紅海小編   瀏覽次數(shù):0
今日大致瀏覽了一下《High Performance Web Sites》。本書(shū)的中文版是《高性能網(wǎng)站建設(shè)指南》。
本書(shū)另有對(duì)其中個(gè)別問(wèn)題深入探究的進(jìn)階篇《Even Faster Web Sites》,中譯《高性能網(wǎng)站建設(shè)進(jìn)階指南》。
作者介紹上面的豆瓣鏈接中有,就不再照搬過(guò)來(lái)了。
這本書(shū)中給出了14條網(wǎng)站性能提升的原則,每個(gè)原則獨(dú)立成章,配有示例。這些原則大多數(shù)都非常實(shí)用,適合站點(diǎn)架構(gòu)師、前端工程師。其中對(duì)于前端工程師的意義更大一些。
這次看的是原版。我對(duì)于Web開(kāi)發(fā)較缺乏實(shí)踐經(jīng)驗(yàn),加之看得匆忙,因此可能存在遺漏、表述不當(dāng)之處,希望廣大網(wǎng)友不吝指正。
原則1 減少HTTP請(qǐng)求數(shù)
構(gòu)造請(qǐng)求、等待響應(yīng)需要時(shí)間,因此請(qǐng)求數(shù)量越少越好。減少請(qǐng)求的總體思路就是合并資源,減少顯示一個(gè)頁(yè)面需要的文件數(shù)。
1. Image Map
通過(guò)設(shè)置<img>標(biāo)簽的usemap屬性與使用<map>標(biāo)簽可以在一幅圖片上切分出多個(gè)區(qū)域,指向不同的鏈接。比起使用多幅圖片分別構(gòu)造鏈接減少了請(qǐng)求數(shù)。
2. CSS Sprite(CSS貼圖整合/貼圖拼合/貼圖定位)
通過(guò)設(shè)置元素的background-position樣式做到。一般用于界面圖標(biāo)。典型的可以參考TinyMCE編輯器上方的那些小按鈕。多個(gè)小圖實(shí)質(zhì)是從一個(gè)統(tǒng)一的大圖通過(guò)不同的偏移量裁剪而來(lái),這樣加載界面上的眾多按鈕實(shí)際上只要請(qǐng)求一次(請(qǐng)求大圖一次),從而減少HTTP請(qǐng)求數(shù)。
3. Inline Image(內(nèi)聯(lián)圖片)
在<img>的src中不指定外部圖片文件的URL,而是直接將圖片信息放入。例如src="data:image/gif;base64,R0lGODlhDAAMAL..."某些特殊情況下有用(例如一個(gè)不大的圖片僅在當(dāng)前頁(yè)面用到)。
原則2 利用多線(xiàn)路CDN
為你的站點(diǎn)提供多種線(xiàn)路(例如國(guó)內(nèi)電信、聯(lián)通、移動(dòng))、多個(gè)地理位置(北方、南方、西部)的訪(fǎng)問(wèn),使得所有用戶(hù)都能夠快速訪(fǎng)問(wèn)。
原則3 利用HTTP Cache
給不頻繁更新的資源(例如靜態(tài)圖)加較長(zhǎng)的Expires頭信息,這些資源一經(jīng)緩存,未來(lái)很長(zhǎng)時(shí)間都可以不再重復(fù)傳輸了。
原則4 使用Gzip壓縮
使用Gzip壓縮HTTP報(bào)文,減小體積,減少傳輸時(shí)間。
原則5 將樣式表置于頁(yè)面前部
先加載樣式表,這樣頁(yè)面渲染得以較早開(kāi)始,給用戶(hù)頁(yè)面加載較快的感覺(jué)。
原則6 將腳本置于頁(yè)面尾部
原因同5,先處理頁(yè)面顯示,頁(yè)面渲染較早完成,而腳本邏輯稍后執(zhí)行,這樣給用戶(hù)頁(yè)面加載較快的感覺(jué)。
原則7 避免使用CSS表達(dá)式
過(guò)于復(fù)雜的JavaScript腳本邏輯、DOM查找、選擇操作將會(huì)降低頁(yè)面處理效率。
原則8 將JavaScript與CSS作為外聯(lián)資源
這似乎與原則1中的合并思想相悖,但其實(shí)不然:考慮每個(gè)頁(yè)面都引入了一個(gè)公共的JavaScript資源(例如jQuery或是ExtJS這樣的JavaScript庫(kù)),單就一個(gè)頁(yè)面的表現(xiàn)來(lái)看,內(nèi)聯(lián)(即將JavaScript嵌入HTML)頁(yè)面將比外聯(lián)(使用<script>標(biāo)簽引入)頁(yè)面加載更快(因?yàn)槠漭^少的HTTP請(qǐng)求數(shù))。但如果有很多頁(yè)面都引入了這個(gè)公共JavaScript資源,那么內(nèi)聯(lián)方案會(huì)造成重復(fù)傳輸(因?yàn)檫@個(gè)資源內(nèi)嵌在每個(gè)頁(yè)面中了,所以每次打開(kāi)一個(gè)頁(yè)面都要將這部分資源傳輸一遍,從而造成網(wǎng)絡(luò)傳輸資源的浪費(fèi))。而將這種資源獨(dú)立出來(lái)外聯(lián)引用可以解決這個(gè)問(wèn)題。
由于JavaScript和CSS相對(duì)穩(wěn)定,我們可以對(duì)其對(duì)應(yīng)的資源設(shè)置較長(zhǎng)的失效期(參考原則3)。
原則9 減少DNS查找
作者給出的建議是:
1. 使用Keep-Alive保持連接
如果連接斷開(kāi),那么下次連接又要執(zhí)行DNS查找,即使對(duì)應(yīng)的域名-IP映射已被緩存,查找也是要消耗一些時(shí)間的
2. 減少域名
每次請(qǐng)求新域名都需要進(jìn)行通過(guò)DNS查找不同的域名,且DNS緩存無(wú)法發(fā)揮作用。因此應(yīng)該盡量將站點(diǎn)組織在一個(gè)統(tǒng)一域名下,避免使用過(guò)多子域名
原則10 壓縮你的JavaScript
使用JS壓縮工具壓縮你的JavaScript吧,很有效哦。看看jQuery的兩個(gè)不同的發(fā)行版本就知道區(qū)別了:
http://code.jquery.com/jquery-1.6.2.js 閱讀版jQuery代碼,230KB
http://code.jquery.com/jquery-1.6.2.min.js 壓縮版jQuery代碼(用于實(shí)際部署),89.4KB
原則11 盡量避免重定向
一次重定向意味著在你真正訪(fǎng)問(wèn)到想要看到的頁(yè)面前加入了一輪額外的HTTP請(qǐng)求(客戶(hù)端發(fā)起HTTP請(qǐng)求→HTTP服務(wù)器返回重定向響應(yīng)→客戶(hù)端對(duì)新URL發(fā)起請(qǐng)求→HTTP服務(wù)器返回內(nèi)容,下劃線(xiàn)部分為額外的請(qǐng)求),因此消耗更多的時(shí)間(也就給人反應(yīng)更慢的感覺(jué))。因此除非必要,不要隨意使用重定向。幾個(gè)“必要”的情況:
1. 避免URL失效
舊站點(diǎn)遷移后,為了避免舊的URL失效,通常將對(duì)舊URL的請(qǐng)求重定向至新系統(tǒng)的對(duì)應(yīng)地址。
2. URL美化
在可讀性好的URL與實(shí)際資源URL之間轉(zhuǎn)換,例如對(duì)于Google Toolbar,用戶(hù)記得住http://toolbar.google.com這個(gè)對(duì)人類(lèi)富有語(yǔ)義的地址,卻很難記住http://www.google.com/tools/firefox/toolbar/FT3/intl/en/index.html這個(gè)真正的資源地址。因此有必要保留前者,并且將對(duì)前者的請(qǐng)求重定向至后者。
原則12 移除重復(fù)的腳本
不要在一個(gè)頁(yè)面中重復(fù)引入相同的腳本。例如腳本B和C都依賴(lài)于A,那么在使用了B和C的頁(yè)面中就有可能存在對(duì)A的重復(fù)引用。解決方法,對(duì)于簡(jiǎn)單的站點(diǎn)手動(dòng)檢查依賴(lài)性,消去重復(fù)引入;對(duì)于復(fù)雜的站點(diǎn)則需要構(gòu)建自己的依賴(lài)管理/版本控制機(jī)制。
原則13 小心處理ETag
ETag是除Last-Modified之外的另一種HTTP Cache手段。通過(guò)hash的辦法辨識(shí)資源是否被修改。但ETag存在一些問(wèn)題,例如:
1. 不一致:不同Web服務(wù)器(Apache, IIS等)定義的ETag格式不同
2. ETag的計(jì)算是不穩(wěn)定的(由于考慮過(guò)多因素),例如:
1) 相同資源在不同服務(wù)器上計(jì)算出來(lái)的ETag不一樣,而大型Web應(yīng)用通常由不止一臺(tái)服務(wù)器提供服務(wù),這就導(dǎo)致客戶(hù)端在服務(wù)器A緩存好的資源明明仍然有效,而在下次請(qǐng)求B時(shí)由于ETag不同而被認(rèn)定為失效,導(dǎo)致相同資源的重復(fù)傳輸。
2) 資源不變,而由于一些其他因素的變化,例如配置文件更改,導(dǎo)致ETag變化。直接后果是系統(tǒng)更新后客戶(hù)端大規(guī)模發(fā)生Cache失效,導(dǎo)致傳輸量大增,站點(diǎn)性能下降。
作者給出的建議是:要么根據(jù)你的應(yīng)用特點(diǎn)改進(jìn)已有的ETag計(jì)算方法,要么干脆就不用ETag,而改用最簡(jiǎn)單的Last-Modified。
原則14 在Ajax中利用HTTP Cache
Ajax是異步請(qǐng)求,異步請(qǐng)求不會(huì)阻塞你現(xiàn)在的操作,而且當(dāng)請(qǐng)求完成時(shí),你馬上就可以看到結(jié)果。但異步不代表能夠瞬時(shí)完成,也不代表能夠容忍它花無(wú)限多的時(shí)間完成。因此對(duì)于Ajax請(qǐng)求的性能也需要重視。有很多Ajax請(qǐng)求訪(fǎng)問(wèn)的是一些相對(duì)穩(wěn)定的資源,因此別忘了對(duì)Ajax請(qǐng)求利用好HTTP Cache機(jī)制,具體參見(jiàn)原則3、13。
News
提供網(wǎng)站建設(shè)相關(guān)資訊、互聯(lián)網(wǎng)行業(yè)資訊、網(wǎng)站設(shè)計(jì)知識(shí)、空間域名郵箱、網(wǎng)站解決方案、常見(jiàn)問(wèn)題、簽約新聞等
2016-11-17 12:07:04
因?yàn)閞esponse是jsp頁(yè)面中的隱含對(duì)象,故在jsp網(wǎng)站建設(shè)頁(yè)面中可以用response.sendRedirect()直接完成重定位。 留意: (1).運(yùn)用response.sendRedirect時(shí),后面不克...
2016-11-18 23:32:44
立異于軟件業(yè),就比方錢(qián)于社會(huì)人,立異不是全能的,沒(méi)有立異卻是萬(wàn)萬(wàn)不能的。可是立異也象錢(qián)相同,不是說(shuō)有就有,乃至不能說(shuō)跟自個(gè)努力有決議聯(lián)系。所以許多時(shí)分,媒體...
2016-11-18 23:33:21
導(dǎo)讀:本溪紅海傳媒網(wǎng)站12月4日在“特別報(bào)道”專(zhuān)欄中撰文指出:伴隨著上個(gè)世紀(jì)90年代經(jīng)濟(jì)的高速增加,很多的商用軟件層出不窮,而現(xiàn)在如此紛繁復(fù)雜的商...
2016-11-18 23:36:31
教學(xué)構(gòu)造單一 人才才能弱化 如今,我國(guó)軟件人才的培育首要依托規(guī)范院校的學(xué)歷教學(xué),集中在本科期間。據(jù)統(tǒng)計(jì),我國(guó)當(dāng)時(shí)軟件從業(yè)人員約有40萬(wàn)...
2016-11-18 23:37:58
在前不久的殺毒廠(chǎng)商降價(jià)熱潮后,有人提出這個(gè)疑問(wèn)?國(guó)內(nèi)通用軟件廠(chǎng)商在將來(lái)的存活點(diǎn)終究在哪里?之所以用“存活點(diǎn)”這個(gè)詞匯來(lái)形容,是因?yàn)楦鴮?duì)于個(gè)人...
2016-11-18 23:39:36
《復(fù)興軟件工業(yè)舉動(dòng)大綱》日前正式發(fā)動(dòng)。2002年9月18日,國(guó)務(wù)院辦公廳轉(zhuǎn)發(fā)了《復(fù)興軟件工業(yè)舉動(dòng)大綱(2002年至2005年)》(國(guó)辦發(fā)〔2002〕47號(hào))(以下簡(jiǎn)稱(chēng)《舉動(dòng)大綱...