靜態頁面
最早的時候,網站內容是通過在主機空間中放置大量的靜態網頁實現的。為了方便對這些分散在不同目錄的靜態網頁的管理,(一般是通過FTP),像
frontpage/
dreamweaver這樣軟體甚至直接提供了向主頁空間以FTP方式直接訪問檔案的功能。以靜態網頁為主的網站最大的困難在於對網頁的管理,在這種框架里,網頁框架和網頁中的內容混雜在一起,很大程度地加大了內容管理的難度。為了減輕這種管理的成本,發展出了一系列的技術,在筆者的理解中,甚至連css本身,原本也是針對這種亂七八糟的網頁維護而設計的,目的就是把網頁表達的框架和內容本身抽象分離出來。
動態頁面
動態頁面是通過執行asp,php,jsp,.net等程式生成客戶端網頁代碼的網頁。 動態頁面通常可以通過
網站後台管理系統對網站的內容進行更新管理。發布新聞,發布公司產品,交流互動,部落格,網上調查等,這都是動態網站的一些功能。也是我們常見的。 動態頁面常見的擴展名有:.asp .php .jsp .cgi.aspx 等。 注意:動態頁面的“動態”是網站與客戶端用戶互動的意思,而非網頁上有動畫的就是動態頁面。
使用
動態網頁的技術是從幾年前興起,已經進入衰老期的網站技術,也是BS系統的核心技術。這種技術稱為動態網頁,就是因為一般是在共用的網頁框架下面通過
程式接口抽取放在資料庫或其他存儲媒體中的內容,從而真正實現了把網頁框架和內容提取分離的目的。也就是傳統中的
php,
asp,jsp,
servlet等。這種技術的發展一直以邏輯反覆抽象,直到把幾乎所有的系統業務邏輯合併到各個
組件、控制項中,
網頁代碼僅僅完成最後對象屬性讀取的任務。在JSP中,標籤結合EL語言就是這種發展方向的極致了。這種技術實際上就是不同的(不限數量的)內容共用網頁框架,從而將網頁維護成本下降到接近可以忽略的程度。在這種技術面前,象 frontpage/dreamwever這種軟體,實際上已經多少顯得有些過時了。
靜態化
但為什麼又要把
動態網頁以靜態網頁的形式發布呢?一個很重要的原因,就是因為
搜尋引擎。由於搜尋引擎對aspx頁面收錄和html頁面
收錄率的差別以及頁面資源占用問題,我們很多時候需要實現ASPX頁面動態轉靜態。以如今網際網路上最普通的查找資料的方式看,網際網路內容到達公眾面前大致只有三條路:第一條路是通過眾所周知的入口網站,老讀者有意識地到達這些地方搜尋相應的有針對性的資料;第二條路是做廣告,通過公眾使用一些免費服務的機會夾帶資料信息,把公眾帶到目標網站;第三條路是搜尋引擎,通過
關鍵字和其他因素,把相應的信息推介到公眾的面前。實際上,這也是帶來新公眾的最有效的途徑;而對於絕大多數的站點,除了屈指可數的幾個入口網站外,這種搜尋引擎帶來的讀者公眾,占比90%以上。
如此重要的一條公眾途逕自然是不能忽略的。因此,儘管搜尋機器人有點討厭,各個網站不但不會再象從前一樣把它封起來,反而熱情無比地搞
SEO,所謂的面向搜尋引擎的最佳化,其中就包括訪問地址的改寫,令
動態網頁看上去是靜態網頁,以便更多更大量地被
搜尋引擎收錄,從而最大限度地提高自已的內容被目標接收的機會。但是,在完全以動態技術開發的網站,轉眼中要求變換成靜態網頁提供,同時,無論如何,動態網頁的內容管理功能也是必須保留的;就如同一輛飛駛的賓士忽然要求180度轉彎,要付出的成本代價是非常大的,是否真的值得,也確實讓人懷疑。
另一個重要原因就是提高
程式性能。很多大型網站,進去的時候看它很複雜的頁面,但是載入也沒有耗費多長時間,除了其它必要原因以外,我認為靜態化也是其中必需考慮的技術之一。她先於用戶獲取資源或資料庫數據進而通過靜態化處理,生成
靜態頁面,所有人都訪問這一個靜態頁面,而靜態化處理的頁面本身的訪問速度要較動態頁面快很多倍,因此程式性能會有大大的提升。總之靜態化在頁面上的體現為:訪問速度加快,用戶體驗性明顯提升;在後台體現為:訪問脫離資料庫,減輕了資料庫訪問壓力。
靜態化雖然可以提升程式的性能,但是它並不是提升整體性能的根本原因,就像一台電腦,只有CPU好或顯示卡好,記憶體好,是不行的,要看整體性能。很多時候是開發者的原因,導致程式自身性能不佳,所以最好以項目本身性能為基礎,其它最佳化方法為輔,最終提升整個應用程式的性能。
動態變靜態
方法二:自己寫的代碼實現動態網頁靜態化,方法也有好幾種:
1、創建FSO對象,利用此對象將所需的內容動態創建到檔案中生成
HTML頁面;
2、利用模板技術,將模板中特殊代碼的值替換為從
表單或是資料庫欄位中接受過來的值 生成
HTML檔案;
3、使用Server.Transfer轉換技術,
方法三:使用HttpWebRequest請求客戶端的方式,獲取返回資源,生成
靜態頁面。一般這樣只需要獲取網頁內容即可,其它資源可放置在伺服器上,自動載入。(註:此方法缺點明顯,需要大量更改匹配URL,建議慎用)
方法四:在asp中有IhttpModule接口。Ihttpmodule可以簡單理解為一個可以在執行像.aspx,或者mvc中control/action前,添加我們自定義的操作的東西。
我們只需要編寫這么一個HttpModule就可以了,當用戶第一次請求asp處理時,我們可以在ihttpmodule中攔截到這個請求,然後獲取到這次請求應該返回的html代碼,然後我們返回這些html給用戶,並保存剛才我們獲取到的html到檔案內,當用戶下次請求時,我們只需要直接返回我們已經保存的html檔案即可。