生成靜態頁面技術

2021-08-29 11:42:54 字數 2883 閱讀 7193

生成靜態頁面一般來說都是做好靜態頁面的模板,然後從資料來源讀取資料,生成html**塊替換模板中的標籤,然後生成靜態檔案。比如文章頁面模板部分如下:

(#title#)

作者(#author#) 時間2006-3-24 13:38:00

摘要:(#description#)

(#content#)

我們可以用如下的方法讀取該模板的內容

///

/// 讀取檔案內容

///

/// 檔案路徑

/// 檔案內容字串

public string readfile(string strfilepath, string strencodingname)

catch(exception e)

finally

return strfile;

}假設返回的字串是strtemplate,從資料庫中讀取的文章標題為strtitle,作者為strauthro,發布時間為strposttime,描述為strdescription,內容為strcontent,我們就可以用string的replace方法把標籤替換為實際要顯示的內容了

strarticle = strtemplate.replace("(#title#)", strtitle);

strarticle = strarticle.replace("(#author#)", strauthor);

……………………………………

這樣,strarticle就是要顯示頁面的html**了,再用如下的方法寫入檔案

///

/// 寫html檔案

///

/// 寫入的字串

/// 目的檔案路徑

public void writefile(string strhtml, string strdestinationfilepath, string strencodingname)

catch(exception e)

finally

}這裡要注意的是replace方法有時候替換會失效,比如one這裡的(#userid#)不能用replace方法替換,可以這樣來替換

strarticle = regex.replace(article, "\\(#userid#\\)", struserid);

現在,生成靜態檔案的方法我們會了,再來看看一些個性化技巧,如何給使用者提供不同風格的各種頁面。

現在一般是通過div+css的方法給每個使用者提供不同風格的頁面。也就是說每個使用者頁面的html**結構是一樣的,只是外部css不一樣,這樣在寫頁面的時候,我們可以把基本的html**硬編碼到我們的程式中,減少了複雜度。css可以很好的控制頁面布局,實現起來很方便。這種方法中,所有風格的同一頁面模板只有乙個,乙個風格對應乙個css檔案。這樣,可以滿足一般的需求了,很多的blog都是採用這種方法來實現,比如blogcn,douban。

但是,這種方法也有個缺陷,因為html**是硬編碼到後台**中,所有風格的同一頁面模板只有乙個,所以頁面的個性化也受到了一定限制。比如我想讓乙個風格的文章列表用**形式,另乙個採用其他方式,就無法實現了,因為我們已經把具體內容寫在後台**中了,只是引用的css檔案不同。只要我們稍加改進,就完全可以隨心所欲定製頁面了,我的方法如下:

(#title#)

作者(#author#) 時間2006-3-24 13:38:00

摘要:(#description#)

(#content#)

同樣,我們也可以用上面替代的方法生成頁面,只是每次要根據使用者所選擇的模板來選擇不同的模板檔案,而不是所有的使用者選擇同乙個。看到這裡,你可能會問,那要是列表怎麼辦?以前是把列表的html**直接寫在後台**中,現在呢?遇到這樣的情況,我們可以做下面這樣的模板。

(#title#)

摘要:(#description#)

上面的模板中和之間的內容就是文章列表中乙個文章的**,我們只需要用正規表示式把這部分找出來,替換標籤就得到了乙個列表中乙個文章的html**,把所有文章的**連起來就得到了文章列表的**,再讓得到的**替換模板中和的內容就得到了最終要寫入頁面的**。雖然比以前div+css的方式多了些步驟,但是,這樣確實有效可行。大家也許會發現,上面的模板也為某些更新頁面而不需要讀資料庫提供了基礎,比如我要從文章列表中刪除id為100的文章,我們只要刪除和之間的內容就可以了,根本不需要再讀資料庫。但是,這樣也會帶來隱患,假如某次檔案操作失敗,那就永遠是失敗,不能跟資料庫的內容同步,當然你可以通過提供其他功能來解決這個問題。

既然是為了效能,我們把頁面發布成靜態,那我們不如再進一步,看看怎樣提高寫靜態頁面的效能。

1.提取所有頁面的公共部分,放外部檔案進行引用。

比如所有頁面的導航部分是相同的,這些部分經常要根據使用者的操作進行更新,如果把它完全寫在每個頁面中,更新起來代價是很大的,必須重寫每個頁面。我們可以把這些內容外掛程式到js中,更新這些內容的時候,更新相應的js檔案就可以了,一次更新,整站更新。這裡,要注意的是要對js的特殊字元要進行轉義,比如;'"等特殊字元要在前面加上/進行轉義。

2.區域性更新,而不是整體更新

我們可以用和這樣的標記把文章列表標記出來,更新文章頁面的時候,我們只需要生成文章列表html**,代替原頁面(非模板)這兩個標記之間的內容就可以了。這樣,能大量減少讀資料庫的次數,效能自然也提高不少。在不同內容越多的頁面,效能優勢越明顯。

3.使用分層樹結構存放檔案

這個其實是對讀取效能的優化了。我們不要把大量的檔案都生成在同乙個根目錄下,這樣伺服器遍歷檔案就會影響效能。我們可以使用分層樹結構來生成檔案,比如按年/月/日的形式組織檔案目錄。

綜合有目的性的使用以上方法可以提高發布系統的效能,也能使使用者介面最大限度地個性化。有時,我們可以採用靜態和動態結合的方法提高系統效能,比如文章列表第一頁生成靜態,後面的採用動態方式。總之,對訪問頻率越高的頁面生成靜態越有優勢,更新頻率越高的頁面動態方式越有優勢,所以我們要均衡兩者,有的放矢的選擇。

本文**

php技術生成靜態頁面的實現

我們先回顧一些基本的概念。一 php指令碼與動態頁面。php指令碼是一種伺服器端指令碼程式,可通過嵌入等方法與html檔案混合,也可以類,函式封裝等形式,以模板的方式對使用者請求進行處理。無論以何種方式,它的基本原理是這樣的。由客戶端提出請求,請求某一頁面 web伺服器引入指定相應指令碼進行處理 指...

aspx生成靜態頁面

前台 如下 default.aspx 後台 如下 default.aspx.cs 注 其中hover為web專案名 using system using system.data using system.configuration using system.web using system.web....

PHP生成靜態頁面

php生成靜態頁面 php生成靜態頁面的條件 使用ob start 方法開啟快取區也是生成靜態頁面的開始 使用ob get contect 方法獲取快取內容 使用ob clean 方法清空快取 ob start 開啟快取區 filename date ymdhis rand 1000,9999 ht...