什麼是靜態頁面?

2007-06-25 12:11 am
請問什麼是靜態頁面?
有什麼功用,實行後對網站有什麼改變。
優點及缺點。

回答 (2)

2007-06-27 5:23 pm
✔ 最佳答案
在网站设计中,纯粹HTML格式的网页通常被称为“静态网页”,早期的网站一般都是由静态网页制作的。静态网页的网址形式通常为:www.example.com/eg/eg.htm,也就是?htm、.html等为后后缀的。在HTML格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字母等,这些“动态效果”只是视觉上的,与我说常说的动态网页是不同的概念。静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件等。
ASP、JSP、PHP都能实现。
asp可以生成静态页面,用fso实现
好处如下:
1,安全,静态页面从理论上讲是没有攻击漏洞的
2,没有数据库访问或减少服务器对数据响应的负荷,速度快
3,化化引擎,易于搜索引擎收录,搜索引擎比较喜欢收录静态页面
4,降低服务器的承受能力,因为其不需要解析就可以返回客户端,因此减少了服务器的工作量,中时也减少了数据库的成本。
5,有意义的文件名,提高了可用性(对中文似乎就没这个优势了吧)
2007-06-25 12:23 am
一、引言 在速度上,靜態頁面要比動態頁面的比方php快很多,這是毫無疑問的,但是由於靜態頁面的靈活性較差,如果不借助數據庫或其他的設備保存相關資訊的話,整體的管理上比較繁瑣,比方修改編輯.比方閱讀權限限制等,但是,對應一些我們經常頻頻使用的文件,比方說,開發的新聞發布系統,我們不希望很多用戶都讀取數據庫才顯示結果,這樣一方面消耗了服務器的資源,另一方面佔去了瀏覽者大量可貴的響應時間,所有,有了"靜態頁面話"的做法,當前很多網站都採用這種技術,一般都是由管理後台控制,或者生成html直接顯示,或者xhtml用css控制顯示,或者生成xml用xslt顯示,這些技術都不是難的,在這裡我就淺顯的說說生成html的方法. 二、預備知識 模板技術: [PHP]模板引擎Smarty深入淺出介紹 --2005-12-31 [PHP]笑談配置,使用Smarty技術 --2006-01-04 緩存技術: 有些資訊比方經常不變的,但是還是能變的資訊放在緩存中以加快顯示速度,這是很有價值的,所謂的緩存,通俗的理解就是一些保存在服務器端的共用資訊.它是於服務器同生死的,我們在保存緩存的時候可以指定下次更新的時間的判斷,比方要在5分鐘更新一次,可以記錄上次更新的時間,和當前時間比較,如果大於5分鐘,讀取數據庫,更新換成,否則直接讀取緩存數據,當然,緩存需要客戶端用戶啟動的,只需一次. ob_start()函數:打開輸出緩衝區. 函數格式voidob_start(void) 說明:當緩衝區啟動時,所有來自PHP程式的非文件頭資訊均不會發送,而是保存在內部緩衝區。 為了輸出緩衝區的內容,可以使用ob_end_flush()或flush()輸出緩衝區的內容。 Flush:刷新緩衝區的內容,輸出。 函數格式:flush() 說明:這個函數經常使用,效率很高。 ob_get_contents:返回內部緩衝區的內容。 函數格式:stringob_get_contents(void) 說明:這個函數會返回當前緩衝區中的內容,如果輸出緩衝區沒有啟動,則返回FALSE. ob_get_length:返回內部緩衝區的長度。 函數格式:intob_get_length(void) 說明:這個函數會返回當前緩衝區中的長度;和ob_get_contents一樣,如果輸出緩衝區沒有啟動,則返回FALSE. ob_end_clean:刪除內部緩衝區的內容,並且關閉內部緩衝區 函數格式:voidob_end_clean(void) 說明:這個函數不會輸出內部緩衝區的內容而是把它刪除 ob_end_flush:發送內部緩衝區的內容到瀏覽器,並且關閉輸出緩衝區 函數格式:voidob_end_flush(void) 說明:這個函數發送輸出緩衝區的內容(如果有的話) ob_implicit_flush:打開或關閉絕對刷新 函數格式:voidob_implicit_flush([intflag]) 說明:默認為關閉緩衝區,打開絕對輸出後,每個腳本輸出都直接發送到瀏覽器,不再需要調用flush() 文件寫入: intfwrite(resourcehandle,stringstring[,intlength]) fwrite()把string的內容寫入文件指針handle處。 如果指定了length,當寫入了length個字節或者寫完了string以後,寫入就會停止,視乎先碰到哪種情況。 fwrite()返回寫入的字元數,出現錯誤時則返回FALSE。 相關參考官方網站:文件參考 三、解決方案 思路:開啟ob_start緩衝,當已經調出數據的時候獲取ob_get_contents,然後生成靜態頁,ob_end_clean清除緩衝.ok,就這麼來,來看一個例子(php+mysql的結合): 創建數據庫: CREATE TABLE `bihtml` (CREATETABLE`bihtml`( `id`int(11)NOTNULLauto_increment, `szdtitle`varchar(16)NOTNULL, `szdcontent`textNOTNULL, PRIMARYKEY (`id`) )TYPE=MyISAM; 獲取當前的ID,並導入模板: ob_start(); $id=_POST['id'] if(!isset($id)&&is_integer($id)) { @$db=newmysqli('localhost','root','admin','bihtml'); $result=$db->fetch_one_array("select *fromszd_biwhereid='$id'"); if(!empty($result)) { $tmp->assign(array( "Szdtitle",htmlspecialchars($result['titles']), "Szdcontent",$result['titles'])); } $tpl->display('default_1.tpl'); $this_my_f=ob_get_contents(); //此處關鍵 ob_end_clean(); $filename="$id.html"; if(tohtmlfile_cjjer($filename,$this_my_f)) echo"生成成功$filename"; else echo"生成識別"; }}//把生成文件的過程寫出函數 functiontohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content) { if(is_file($file_cjjer_name)){ @unlink($file_cjjer_name); }$cjjer_handle=fopen($file_cjjer_name,"w"); if(!is_writable($file_cjjer_name)){ returnfalse; } if(!fwrite($cjjer_handle,$file_cjjer_content)){ returnfalse; } fclose($cjjer_handle);//關閉指針 return$file_cjjer_name; }四、說明事項 1:一般建議管理員添加數據的時候就生成靜態頁面,可以考慮記錄生成的檔案名次和路徑. 2:php主要是 ob_starts()和ob_get_contents,生成靜態頁面的時候很有用,當然也可以考慮調出數據庫直接替換模板裡面的變量也是可以的. 3:主要的模板使用smarty,phplib都是可以的,smarty使用比較簡易.


收錄日期: 2021-04-23 17:06:36
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070624000051KK02521

檢視 Wayback Machine 備份