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