寫這篇文章的目的:在日常的工作中,經常有同事來詢問有關快取的問題,例如這樣的url會不會被快取、快取期多長等;另一方面,也在生產環境的cache伺服器上發現很多不可快取的引用,既降低了cache效率,又增加了伺服器負擔。所以,希望借此文把一些經驗總結向大家分享一下,設計頁面url的同學們如果可能的話,就可以在以後的工作中盡量避免出現自己「攻擊」自家的cache的情況。好了話不多說
1.快取的意義
首先老生常談一下快取的意義,不外乎:
1.1.減少對網路頻寬的占用
1.2.提高訪問速度,提公升使用者的體驗
1.3.減輕**伺服器的負擔
ok意義談完了,接下來步入正題。
2.靜態檔案url應該長什麼樣
下面主要講講好的靜態url設計應該是什麼樣的,哪些設計可能會造成cache不友好。
長的過期時間
設定方法很簡單,在apache新增expires模組就行了,手冊網上很多。
避免更新
這裡的更新指「同名更新」,有人可能會問,快取的檔案我要更新怎麼辦?這個問題與快取本身是矛盾的,解決方法很簡單:不更新。例如,`
避免同名更新,使檔案版本化,這就是最佳答案。最近發現國際站的檔案長過期版本化已經有很大進展了,例如`
——相信下次修改會是v3.gif
避免隨機數
如果是類似這樣的url呢`
,理論上講這種是可以的,它可能是把這個css檔案的修改時間作為乙個引數放在末尾,除非下次修改否則數字永遠不變。但是這種方法與動態指令碼上傳引數的方式無法區分,如果有動態指令碼被快取比如login的結果,阿貓會發現自己登到阿狗的帳戶去了。所以萬全之策是兩種方法都不使用。
簡短明了
|run/intl_searchweb/listsearchbar|run/intl_searchweb/list_page_select|run/intl_searchweb/yahoo_dms_create|r20101008|\
,40個字元。在這裡不是對這個url進行批判,相信這麼長有它的道理,只是用這個極端的例子說明乙個對比,假設我們的**有10000個併發(高峰期實際不止),不考慮請求的檔案是什麼,僅僅我們的請求本身消耗的頻寬是328byte*10000*8bit/byte=26mbps。如果同樣縮減到40個字元,則頻寬消耗就變成3mbps了,差別還是有的,保證功能的前提下就短不就長。
避免cookie
現在咱們**的cookie是500-700位元組,計算取平均值600byte,與上一條同理,使用者請求我們的檔案需要傳送cookie,10000的併發數,僅請求本身消耗頻寬就是48mbps。cookie是頁面必須的東西不能少,但是對於檔案和css這類檔案來講,cookie就完全多餘了,所以靜態檔案避免cookie既可以加快請求速度(不必send 600byte了),又可以減少伺服器接收處理cookie的額外開銷,何樂而不為呢?方法也很簡單,把靜態檔案的網域名稱改為無cookie的域就可以了。
網域名稱數量
另一方面,拆分網域名稱和控制網域名稱數量是乙個平衡的過程,頁面上網域名稱的數量不能太多,否則花在dns解析上的時間也不少,雅虎牛人出的著名**優化「14條」中說靜態網域名稱不要超過4個,就是從dns解析效率方面出發的。其實在瀏覽可以支援大併發的前提下,這一點已經不太重要,建議結合上面提到的「避免cookie」的那條規則,酌情定數量。
3.總結
不知不覺列了這麼多,基本上都是平時工作中遇到的問題的總結,共享給大家作為參考。上面提到的很多東西都要倚仗咱們的開發、ued工程師來完成,這裡只是結合了通行的優化做法和**實際情況提供了一些建議,期望在以後新建站點、開發新業務時可以避免歷史的錯誤。共同將**速度優化這件事情做好。
SEO 友好的URL和重定向應用
之前的提到搜尋引擎的索引排名的基礎就是鏈結,而實際站點中鏈結都是指向的url位址的,url是明顯影響單擊率的因素。url是乙個頁面的所有內容的位址,除了要對使用者友好外 url位址命名 最關鍵的就是對搜尋引擎友好,因為這是每個頁面索引的基礎。1 對搜素引擎排名有好處,在正式的排名中url位址起到的作...
搜尋引擎優化程式設計(二) 友好的URL位址
友好的 url位址,很多 做到了這一點,有些人會理解為友好的 url位址更便於使用者記憶,僅此而已。事實上,這只是乙個方面,它對於搜尋引擎優化也有一定的好處。現在的搜尋引擎收錄時,對不同的位址確實不會有不同的待遇。我現在舉出兩個例項 類似這樣的 我們經常遇到,很顯然,後者的位址更容易被我們記住 通常...
httpclient的幾種請求URL的方式
一 httpclient專案有兩種使用方式。一種是commons專案,這乙個就只更新到3.1版本了。現在挪到了httpcomponents子專案下了,這裡重點講解httpcomponents下面的httpclient的使用方式。二 加入jar包 三 使用方式 1 get方法 相對於commons h...