動態還是靜態,這是乙個問題

2021-09-05 21:09:40 字數 2764 閱讀 5987

我們經常會討論到網頁內容的動態和靜態的問題,這是乙個沒有唯一答案的話題。

1.靜態,我們損失了靈活性,意味著,任何使用者在任何時候看到的效果都是一樣的。

2.動態,我們得到了靈活性,意味著,我們可以根據使用者的不同,時間的不同,或者僅僅是我們高興不高興,來決定要怎麼輸出內容到瀏覽器。

但是,動態的功能增加了伺服器的負擔,是因為動態頁面(或者其他動態資源),他們不可能被瀏覽器快取,換句話說,瀏覽器因為認為這是一項動態資源,所以它不敢擅自快取。

我們先看看靜態內容的快取機制:大部分的瀏覽器都會自動快取靜態的網頁(htm,html)以及靜態的(jpg等等),當乙個頁面重新整理的時候,它們會去伺服器比較一下,如果伺服器沒有更改(一般是比較檔案的屬性),則直接用304返回,表示無更改,也就是說它可以直接用瀏覽器快取裡面的檔案進行渲染和展現。

為什麼這麼說呢?我們先來看乙個靜態頁面,我定義為default.htm,裡面有兩張,一張是動態的(我用了乙個ashx來動態生成,後面介紹),一張是靜態的(直接引用jpg檔案)

下面的內容是default.htm

">

" >

靜態動態

這個頁面在瀏覽器中看起來像下面這樣:

【注意】雖然兩個看起來是一樣的,但下面這一張是動態生成的

請注意觀察:default.htm和test.jpg這兩個請求都是直接返回304的,意思是說沒有更改。請注意response這邊顯示為:not modifed

而image.ashx永遠都是返回200,也就是說真正執行了。

那麼,具體來說,那個default.htm和test.jpg是快取到了**呢?這個位置因人而異,但有乙個統一的叫法:ie 快取記憶體。在我的機器上,這個目錄被移動到了乙個特殊的磁碟

好了,到這裡為止,你應該知道了,瀏覽器對於一些靜態格式的檔案,是會做快取的。這樣很顯然可以減輕一些伺服器的壓力。因為沒有必要讀取檔案,再傳送到瀏覽器的。

那麼,對於動態內容是怎麼回事呢?

我們常見的asp,aspx和上面提到的ashx都是動態內容。它們的特點是可以動態生成內容。如下面這個

} 以上**就是我們常見的動態生成的**。你注意到,我也嘗試設定了cache的一些選項,而事實上這些選項也確實告知瀏覽器了,例如,我通過

context.response.cache.setexpires(datetime.now.addhours(1));

告訴他說,我希望快取乙個小時。

但你會發現瀏覽器不予理會

他每次都請求,頭部裡面都明確寫了,no-cache,也就是說他因為檢測到這種檔案格式(ashx)屬於動態內容,所以不考慮快取。

同樣的情況也發生在aspx上面,你注意看上圖,aspx的請求也都是200狀態的

【注意】乙個aspx即便不包含伺服器**,也會被認為是動態頁面,而不等同於htm檔案

那麼,動態內容難道就無法做快取了嗎?答案是:不,只是要在伺服器做快取。

一般情況下,用的最多的就是aspx的輸出快取(outputcache),以下指令是告知asp.net引擎,這個頁面的所有內容全部快取60秒。

也就是說,動態內容的快取應該是由服務端控制的,頁面仍然會被請求,進入執行管道(pipleline),但至於是否真得要去執行內部的**,則由asp.net引擎決定。

對於ashx,沒有辦法直接設定outputcache這樣的指令,但可以在**中通過訪問cacheapi去實現快取,例如下面這樣

} so, 你到底要用靜態,還是動態呢?

陳希章 於 2009/6/25 19:03:24 發布在:

陳希章的部落格中心

React 還是Vue 這是乙個問題

1.應用場景 主要了解前端最熱門的兩款框架,他們之間的特點 優缺點 幫助我們有個初步認識和判斷,在開發專案時選擇合適的框架.2.學習 操作 暫參見 react還是vue 你該如何選擇?資料補充 weekly downloads 1,737,515 vue 7,740,838 react 更多資訊 後...

「變還是不變,這是乙個問題?」 volatile

變還是不變,這是乙個問題?volatile 先看乙個簡單迴圈 for int i 0 i 100000 i volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的位址中讀取,因而編譯器生成的可執行碼會重新從i的位址讀取資料放在k中。而優化做法是,乙個定義為volatile的變...

閱讀還是寫作,這是個問題

最近節奏不錯,喜歡閱讀,閱讀哪怕一點點之後,我就有好多東西想寫寫寫。舉個生動的比喻,就好像你往乙個神秘的壺裡倒進去一小杯水,它嘩啦啦的湧出幾大桶水。然後我也沒有辦法,只有不斷的接水,接受潛意識的召喚,不斷的寫寫寫,唯一能做的,就是給自己定下 不准修改,一次成型 的寫作習慣,逼自己提高寫作效率。那麼問...