1.CDN
cdn——維基百科給出的解釋是:內(nèi)容分發(fā)網(wǎng)絡(luò)(Content delivery network或Content distribution network,縮寫:CDN)。簡(jiǎn)單來說它主要的工作是把我們需要被分發(fā)的內(nèi)容分發(fā)到世界各地的各個(gè)節(jié)點(diǎn)上,讓世界各地的人都可以在距離最近的網(wǎng)絡(luò)節(jié)點(diǎn)拿到想要拿到的內(nèi)容,減少網(wǎng)絡(luò)傳輸距離從而達(dá)到加速的目的。
2.Keep-Alive模式
我們知道HTTP協(xié)議采用“請(qǐng)求-應(yīng)答”模式,當(dāng)使用普通模式,即非KeepAlive模式時(shí),每個(gè)請(qǐng)求/應(yīng)答客戶和服務(wù)器都要新建一個(gè)連接,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議);當(dāng)使用Keep-Alive模式(又稱持久連接、連接重用)時(shí),Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),Keep-Alive功能避免了建立或者重新建立連接。
http 1.0中默認(rèn)是關(guān)閉的,需要在http頭加入”Connection: Keep-Alive”,才能啟用Keep-Alive;http 1.1中默認(rèn)啟用Keep-Alive,如果加入”Connection: close “,才關(guān)閉。目前大部分瀏覽器都是用http1.1協(xié)議,也就是說默認(rèn)都會(huì)發(fā)起Keep-Alive的連接請(qǐng)求了,所以是否能完成一個(gè)完整的Keep-Alive連接就看服務(wù)器設(shè)置情況。
3.cache-control
我們可以在請(qǐng)求頭中設(shè)置 cache-control 來指導(dǎo)瀏覽器進(jìn)行緩存?
比如response.setHeader('cache-control','max-age=30')
意思是 三十秒鐘之內(nèi),同樣的內(nèi)容不請(qǐng)求第二次。
3.Etag
Etag 可以在響應(yīng)頭中給你請(qǐng)求的文件設(shè)置一個(gè)MD5值 返回費(fèi)客戶端
當(dāng)你第二次請(qǐng)求的時(shí)候 請(qǐng)求頭就會(huì)帶上這個(gè)MD5? 然后對(duì)比這個(gè)值
如果一樣那就說明兩次請(qǐng)求的內(nèi)容是一樣的? 瀏覽器就會(huì) 返回 304 用緩存里面的內(nèi)容而不是重新下載(請(qǐng)求但是不下載)
4.G-zip
GZIP網(wǎng)頁壓縮,是一種WEB服務(wù)器與瀏覽器之間共同遵守的協(xié)議,也就是說WEB服務(wù)器和瀏覽器都必須支持該技術(shù)才能實(shí)現(xiàn)GZIP壓縮,而當(dāng)下主流的瀏覽器都是支持GZIP壓縮,包括IE6、IE7、IE8、IE9、FireFox、谷歌瀏覽器、Opera等,而常見的WEB服務(wù)器通常有Apache和IIS兩種。GZIP最早由Jean-loup Gailly和Mark Adler創(chuàng)建,用于UNIX系統(tǒng)的文件壓縮。我們?cè)贚inux中經(jīng)常會(huì)用到后綴為.gz的文件,它們就是GZIP格式的。目前,GZIP已經(jīng)成為Internet上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說一種文件格式。下面介紹一下GZIP壓縮時(shí),WEB服務(wù)器與瀏覽器之間的協(xié)商過程如下:1、首先瀏覽器請(qǐng)求某個(gè)URL地址,并在請(qǐng)求的開始部分頭(head) 設(shè)置屬性accept-encoding值為gzip、deflate,表明瀏覽器支持gzip和deflate這兩種壓縮方式(事實(shí)上deflate也是使用GZIP壓縮協(xié)議,在之后的內(nèi)容之我們會(huì)介紹二者之間的區(qū)別);2、WEB服務(wù)器接收到請(qǐng)求后判斷瀏覽器是否支持GZIP壓縮,如果支持就傳送壓縮后的響應(yīng)內(nèi)容,否則傳送不經(jīng)過壓縮的內(nèi)容;3、瀏覽器獲取響應(yīng)內(nèi)容后,判斷內(nèi)容是否被壓縮,如果是壓縮文件則解壓縮,然后顯示響應(yīng)頁面的內(nèi)容。
5.調(diào)整css文件和js文件位置
一般情況下我們都將css文件放在head中 而js文件則放在body后面,因?yàn)橐恍g覽器會(huì)先等css文件加載完畢再開始渲染頁面,把css放在前面可以讓頁面更快的被渲染出來,而js則可以利用頁面渲染后到用戶移動(dòng)鼠標(biāo)的這段時(shí)間完成加載。
6.合并文件
如果一個(gè)頁面的文件過多,那么可以通過合并文件來達(dá)到較少請(qǐng)求次數(shù)的目的。
7.增加域名以并行下載資源
上面提到我們可以通過合并文件來減少請(qǐng)求次數(shù),但是如果文件的體積過大,就算請(qǐng)求次數(shù)減少來,但是單次請(qǐng)求的時(shí)間變長(zhǎng)了,這時(shí)候我們就不能用合并文件的方法了,因?yàn)橐粋€(gè)域名最多可以同時(shí)發(fā)送四個(gè)請(qǐng)求,在文件過多的情況下我們可以通過增加域名的方法來同時(shí)請(qǐng)求多個(gè)資源。
8.減小Cookie尺寸
HTTP的cookies由于許多原因而被使用(例如權(quán)限認(rèn)證以及私人原因)。cookies中包含的信息會(huì)在web服務(wù)器和瀏覽器之間的HTTP報(bào)頭進(jìn)行交換。使得cookies的尺寸盡可能的小,將對(duì)用戶響應(yīng)時(shí)間造成的影響降到最低是非常重要的。
核對(duì)更多的信息,請(qǐng)查閱Tenni Theurer和Patty Chi編寫的“When the Cookie Crumbles”。調(diào)查后得到實(shí)際結(jié)果如下:
去除不必要的cookies cookies的尺寸盡可能的小,將對(duì)用戶響應(yīng)時(shí)間造成的影響降到最低。 在合適的域級(jí)別設(shè)置cookies應(yīng)該注意,所以其它子域名不會(huì)受影響。 合理設(shè)置過期時(shí)間。太早的過期時(shí)間或者不設(shè)過期時(shí)間,會(huì)更快的移除cookies,縮短用戶的響應(yīng)時(shí)間。