天天看點

ASP.NET僞靜态的實作及僞靜态的意義 用 URLRewriter 實作

一、僞靜态的用處

     有些使用者覺得,僞靜态和真靜态實際被收錄量會相差很大,其實不然,從你個人角度,你去判斷一下一個文章到底是真靜态還是僞靜态?估計很難看得出,因為所謂靜态的意思,就是位址中不帶問号,不帶問号的就是靜态,管他是真的還是僞的?搜尋引擎看得出嗎?是以說,其實不論是真的還是僞的,其實對于搜尋引擎來說都是一樣的,搜尋引擎沒有說,你這個是僞的,我不收錄你。追根究底來說,為什麼搜尋引擎會不收錄帶問号的網址?因為搜尋引擎怕由于問号而進入死循環,稱為“搜尋機器人陷阱(Spidertraps)”(以前動網就有這樣一個漏洞,蜘蛛進去出不來了),是以很多時候帶問号的位址搜尋引擎是不會進去的,僞靜态對于搜尋引擎來說,其實就是靜态,因為位址中沒有帶問号,是以沒有真靜态比僞靜态收錄得多的說法。

二、為什麼選擇僞靜态?

      有很多使用者說:真靜态不好嗎?為什麼不用真靜态?通路起來不是更快嗎?負載不是更好嗎?等等等等。。。。。。在這裡,其實隻用一個問題來回答:為什麼選擇MYSQL?很多使用者大概不明白為什麼那麼多大型論壇都選擇了MYSQL資料庫作為儲存機制,大概大部分都是想:“因為DZ用了MYSQL,是以就是MYSQL”。其實不然,試想DZ為什麼會在那麼多論壇程式并存的日子生存下來并笑傲江湖,很大原因是因為DZ用了MYSQL。試想如果大C當年改的程式是一個文本論壇,那還會有DZ的今天嗎?或者從另一個角度問,為什麼那麼多大型網站都選擇了MYSQL而不是文本作為儲存機制?所謂文本論壇,實際就跟真靜态的說法差不多了,将資料儲存在空間上面,大量讀寫硬碟,等等。。。。。。為什麼這種寫法會被淘汰呢?我相信答案不會是老師所說的:“Discuz!目前有 2129867 篇文章,存儲成html的話大約是 20799M,也就是 20G左右。這當中還不計算由于磁盤存儲機制造成的空間浪費(100個 1k的檔案占用的空間可能會是200K)。” 這種說法從我個人觀點來看,這個理由不能給使用者不使用真靜态充分的理由。然而,另一個理由卻是值得我們注意思考的,也是為什麼絕大多數站都不選擇生成靜态: “删除、更新這些html内容會導緻大量的磁盤io操作以及大量的磁盤碎片。” 正如上面的說法,在實際當中确實會導緻大量的磁盤I/O操作(input/output),大量進行I/O操作帶來的後果可想而知,會産生大量的磁盤碎片甚至會導緻硬碟出現壞道。是以對于生成靜态而言,還不如去用文本論壇,可以更好的解決你們的需求。(副W就是做文本論壇出生的,當時的名字為ofstar,後因發展困難轉為MYSQL,而PW生成靜态頁面也就是PW以前文本方式稍加改進用于吸引使用者眼球的噘頭)當然,如果大家記憶力好的話,應該可以記得PW4的時候PW論壇不能通路很長一段時間,後來恢複到一段時間前的資料,官方的說法是被人攻擊而導緻硬碟損壞,其實這種說法是比較不可信的,相對于是被攻擊導緻硬碟損壞還是大量I/O操作而産生的後果,我個人更傾向于後者。當然,如果大家比較關注5d6d的話,應該知道前幾天有一天時間5d6d無法通路,根據非官方消息是因為硬碟壞了,而損壞的原因我想當然是因為大量使用者大量進行I/O操作了,試想,我們一個論壇,進行磁盤I/O操作的僅為管理者進行更新緩存時進行的,而5d6d每一個會員就是一個管理者,試想下對磁盤是多大的考驗?是以我并不奇怪5d6d的硬碟壞了。當然,也許在讀這篇文章的很多朋友都有使用過BT,也聽說過BT對硬碟很傷,不能開多,而所謂傷害,和這裡指的都是同一樣東西,大量I/O導緻磁盤出現碎片甚至出現磁盤壞道。這裡都是說些很實際的例子來說明問題了。

三、僞靜态的壞處

      當然猶如一篇文章的作者所說的:"如果流量稍大一些使用僞靜态就出現CPU使用超負荷,我的同時線上300多人就挂了,而不使用僞靜态的時候同時線上超500人都不挂,我的ISS數是1000。” 确實是這樣的,由于僞靜态是用正則判斷而不是真實位址,分辨到底顯示哪個頁面的責任也由直接指定轉由CPU來判斷了,是以CPU占有量的上升,确實是僞靜态最大的弊病。

四、我們應該選擇僞靜态還是真靜态?

我們來總結一下: 1、使用真靜态和假靜态對SEO來說沒有什麼差別 2、使用真靜态可能将導緻硬碟損壞并将影響論壇性能 3、使用僞靜态将占用一定量的CPU占有率,大量使用将導緻CPU超負荷 4、最重要的一點,我們要靜态是為了SEO 是以: 1、使用真靜态的方法可以直接排除了,因為無論怎麼生成,對硬碟來說都是很傷的。 2、既然真僞靜态的效果一樣,我們就可以選擇僞靜态了。 3、但是僞靜态大量使用會照成CPU超負荷。 4、是以我們隻要不大量使用就可以了。 5、既然靜态隻是給SEO看的,我們隻需要僞靜态給SEO就行了,不需要給使用者使用。 6、是以我們隻要在專門提供給SEO爬的Archiver中使用僞靜态就可以了。 7、謝謝大家耐心看我寫的文章。 8、有何不解的地方或是有不同的看法歡迎提出。

五、關于僞靜态和真靜态的評論

     真正的靜态化和僞靜态還是有本質的差別的。為浏覽使用者處理一個純粹htm和一個調用多個資料的php在CPU的使用率方面明顯前者少。記得原來有個人說html下載下傳硬碟讀寫頻繁,他這麼說好像讀取資料庫不用讀寫磁盤似的,何況還有一大堆緩存的零散php也是放在硬碟的,這些讀取不用磁盤操作麼?可笑。讀取單個htm+圖檔Flash等附件就可以實作的目的,何苦要讀資料庫又要讀php緩存檔案又要重新整合資料輸出再+圖檔Flash等附件這麼大費周章呢?CMS首頁不需要很多的互動的,論壇那一套不應該拿到這裡來用,相反應該更多考慮的是:美觀!相容!資訊的直覺!性能!還有穩定!其實所謂的僞靜态頁面,就是指的URL重寫,在ASP.NET中實作非常簡單首先你要在你的項目裡引用兩個DLL: ActionlessForm.dll URLRewriter.dll 真正實作重寫的是 URLRewriter.dll 但是如果你要實作分頁,那麼必須使用這個ActionlessForm .dll 首先在web.config裡寫

~/Products/Jurisdiction_(/w{3})/.aspx ~/En/Jurisdiction.aspx?jurid=$1 ~/Articles/(/d{1,})/.aspx

~/Articles/(/d{1,})_(/d{1,})/.aspx <![CDATA[~/En/Article_view.aspx?article_id=$1&page=$2]]--> 這樣比如上面的網址http://localhost/En/Article_View.aspx?article_id=9就可以用http://localhost/Articles/9.aspx來代替,當然,你代替後的擴充名可以用任何iis能解釋的擴充名,如果你喜歡用htm做擴充名,那麼在配置轉發規則上面配置為htm為擴充名的,同樣有些文章可能很長,往往我們會把一個文章分成幾頁,那麼根據上面的配置,我們如果想通路http://localhost/En/Article_View.aspx?article_id=9&page=3我們就可以用http://localhost/Articles/9_3.aspx來代替,這樣當搜尋引擎來抓起你的網頁的時候,就會收錄你這些網址下去,别人搜尋到你網頁的時候,就可以從這些位址連結過來。然後這樣操作: 右鍵點我的電腦-->管理-->展開'服務和應用程式'-->internet資訊服務-->找到你共享的目錄-->右鍵點選屬性 -->點選'配置'--> 映射下面 -->找到.aspx的可執行檔案路徑 複制路徑-->粘貼路徑-->擴充名為".html"-->然後把檢查檔案是否存在的勾去掉 這樣就可以了

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/swtseaman/archive/2010/04/09/5466263.aspx