熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET偽靜態的實現及偽靜態的意義

2013-11-13 09:47:14  來源: .NET編程 
    偽靜態的用處
    有些用戶覺得偽靜態和真靜態實際被收錄量會相差很大其實不然從你個人角度你去判斷一下一個帖子到底是真靜態還是偽靜態?估計很難看得出因為所謂靜態的意思就是地址中不帶問號不帶問號的就是靜態管他是真的還是偽的?搜索引擎看得出嗎?所以說其實不論是真的還是偽的其實對於搜索引擎來說都是一樣的搜索引擎沒有說你這個是偽的我不收錄你
    追根究底來說為什麼搜索引擎會不收錄帶問號的網址?因為搜索引擎怕由於問號而進入死循環稱為搜索機器人陷阱(Spidertraps)(以前動網就有這樣一個漏洞蜘蛛進去出不來了)所以很多時候帶問號的地址搜索引擎是不會進去的偽靜態對於搜索引擎來說其實就是靜態因為地址中沒有帶問號所以沒有真靜態比偽靜態收錄得多的說法
為什麼選擇偽靜態?
    有很多用戶說真靜態不好嗎?為什麼不用真靜態?訪問起來不是更快嗎?負載不是更好嗎?等等等等
    在這裡其實只用一個問題來回答為什麼選擇MYSQL?很多用戶大概不明白為什麼那麼多大型論壇都選擇了MYSQL數據庫作為儲存機制大概大部分都是想因為DZ用了MYSQL所以就是MYSQL
    其實不然試想DZ為什麼會在那麼多論壇程序並存的日子生存下來並笑傲江湖很大原因是因為DZ用了MYSQL試想如果大C當年改的程序是一個文本論壇那還會有DZ的今天嗎?或者從另一個角度問為什麼那麼多大型網站都選擇了MYSQL而不是文本作為儲存機制?
    所謂文本論壇實際就跟真靜態的說法差不多了將數據儲存在空間上面大量讀寫硬盤等等
    為什麼這種寫法會被淘汰呢?我相信答案不會是老師所說的Discuz!目前有 篇帖子存儲成html的話大約是 M也就是 G左右這當中還不計算由於磁盤存儲機制造成的空間浪費(k的文件占用的空間可能會是K)
    這種說法從我個人觀點來看這個理由不能給用戶不使用真靜態充分的理由然而另一個理由卻是值得我們注意思考的也是為什麼絕大多數站都不選擇生成靜態
    刪除更新這些html內容會導致大量的磁盤io操作以及大量的磁盤碎片
    正如上面的說法在實際當中確實會導致大量的磁盤I/O操作(input/output)大量進行I/O操作帶來的後果可想而知會產生大量的磁盤碎片甚至會導致硬盤出現壞道
    所以對於生成靜態而言還不如去用文本論壇可以更好的解決你們的需求(副W就是做文本論壇出生的當時的名字為ofstar後因發展困難轉為MYSQL而PW生成靜態頁面也就是PW以前文本方式稍加改進用於吸引用戶眼球的噘頭)
    當然如果大家記憶力好的話應該可以記得PW的時候PW論壇不能訪問很長一段時間後來恢復到一段時間前的數據官方的說法是被人攻擊而導致硬盤損壞其實這種說法是比較不可信的相對於是被攻擊導致硬盤損壞還是大量I/O操作而產生的後果我個人更傾向於後者
    當然如果大家比較關注dd的話應該知道前幾天有一天時間dd無法訪問根據非官方消息是因為硬盤壞了而損壞的原因我想當然是因為大量用戶大量進行I/O操作了試想我們一個論壇進行磁盤I/O操作的僅為管理員進行更新緩存時進行的dd每一個會員就是一個管理員試想下對磁盤是多大的考驗?所以我並不奇怪dd的硬盤壞了
    當然也許在讀這篇文章的很多朋友都有使用過BT也聽說過BT對硬盤很傷不能開多而所謂傷害和這裡指的都是同一樣東西大量I/O導致磁盤出現碎片甚至出現磁盤壞道
    這裡都是說些很實際的例子來說明問題了
   偽靜態的壞處
    當然猶如一篇文章的作者所說的如果流量稍大一些使用偽靜態就出現CPU使用超負荷我的同時在線多人就掛了而不使用偽靜態的時候同時在線超人都不掛我的ISS數是
    確實是這樣的由於偽靜態是用正則判斷而不是真實地址分辨到底顯示哪個頁面的責任也由直接指定轉由CPU來判斷了所以CPU占有量的上升確實是偽靜態最大的弊病


 我們應該選擇偽靜態還是真靜態?
    我們來總結一下
    使用真靜態和假靜態對SEO來說沒有什麼區別
    使用真靜態可能將導致硬盤損壞並將影響論壇性能
    使用偽靜態將占用一定量的CPU占有率大量使用將導致CPU超負荷
    最重要的一點我們要靜態是為了SEO
    所以
    使用真靜態的方法可以直接排除了因為無論怎麼生成對硬盤來說都是很傷的
    既然真偽靜態的效果一樣我們就可以選擇偽靜態了
    但是偽靜態大量使用會照成CPU超負荷
    所以我們只要不大量使用就可以了
    既然靜態只是給SEO看的我們只需要偽靜態給SEO就行了不需要給用戶使用
    所以我們只要在專門提供給SEO爬的Archiver中使用偽靜態就可以了
    謝謝大家耐心看我寫的文章
    有何不解的地方或是有不同的看法歡迎提出
關於偽靜態和真靜態的評論
    真正的靜態化和偽靜態還是有本質的區別的為浏覽用戶處理一個純粹htm和一個調用多個數據的php在CPU的使用率方面明顯前者少記得原來有個人說html下載硬盤讀寫頻繁他這麼說好像讀取數據庫不用讀寫磁盤似的何況還有一大堆緩存的零散php也是放在硬盤的這些讀取不用磁盤操作麼?可笑
    讀取單個htm+圖片Flash等附件就可以實現的目的何苦要讀數據庫又要讀php緩存文件又要重新整合數據輸出再+圖片Flash等附件這麼大費周章呢?CMS首頁不需要很多的互動的論壇那一套不應該拿到這裡來用相反應該更多考慮的是美觀!兼容!信息的直觀!性能!還有穩定!
    其實所謂的偽靜態頁面就是指的URL重寫在ASPNET中實現非常簡單
    首先你要在你的項目裡引用兩個DLL:
    ActionlessFormdll
    URLRewriterdll
    真正實現重寫的是 URLRewriterdll   但是如果你要實現分頁那麼必須使用這個ActionlessForm dll
    首先在nfig裡寫
    <configSections>
    <section name=RewriterConfig type=URLRewriterConfigRewriterConfigSerializerSectionHandler URLRewriter />
    </configSections>
    <httpModules>
    <add type=URLRewriterModuleRewriter URLRewriter name=ModuleRewriter />
    </httpModules>
    <! 下面是配置重寫URL規則 >
    <RewriterConfig>
    <Rules>
    <RewriterRule>
    <LookFor>~/Products/Jurisdiction_(w{})aspx</LookFor>
    <SendTo>~/En/Jurisdictionaspx?jurid=$</SendTo>
    </RewriterRule>
    <RewriterRule>
    <LookFor>~/Articles/(d{})aspx</LookFor>      <! 這個是被代替後的文件名使用到正則表達式 >
    <SendTo><![CDATA[~/En/Article_viewaspx?article_id=$]]></SendTo>      <! 這個是要給代替的網頁一般是帶有問號後面帶參數的網頁 >
    </RewriterRule>
    <RewriterRule>
    <LookFor>~/Articles/(d{})_(d{})aspx</LookFor>
    <SendTo><![CDATA[~/En/Article_viewaspx?article_id=$&page=$]]></SendTo>
    </RewriterRule>
    </Rules>
    </RewriterConfig>
    這樣比如上面的網址x?article_id=就可以用x來代替當然你代替後的擴展名可以用任何iis能解釋的擴展名如果你喜歡用htm做擴展名那麼在配置轉發規則上面配置為htm為擴展名的同樣有些文章可能很長往往我們會把一個文章分成幾頁那麼根據上面的配置我們如果想訪問x?article_id=&page=我們就可以用x來代替這樣當搜索引擎來抓起你的網頁的時候就會收錄你這些網址下去別人搜索到你網頁的時候就可以從這些地址鏈接過來
    然後這樣操作:
    右鍵點我的電腦>管理>展開服務和應用程序>internet信息服務>找到你共享的目錄>右鍵點擊屬性 >點擊配置>
    映射下面 >找到aspx的可執行文件路徑復制路徑>粘貼路徑>擴展名為l>然後把檢查文件是否存在的勾去掉這樣就可以了


From:http://tw.wingwit.com/Article/program/net/201311/11583.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.