<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    靜態(tài)技術(shù)詳解

    Refer to: http://www.cnblogs.com/funnyking/archive/2010/05/26/1744834.html

    一. 
    什么是靜態(tài)化

    在此之前,我們好多的人不知道什么是靜態(tài)化,說得簡(jiǎn)單點(diǎn),就是把所有不是.htm或者.html的頁面改為.htm或者.html

    我們?cè)谔幚矸椒ㄉ希徐o態(tài)化和偽靜態(tài)方法,希望大家不要把兩者混為一潭。當(dāng)然更不要把他和純靜態(tài)頁面混為一潭。

    1、 純靜態(tài)頁面                         

    當(dāng)用戶訪問是,不需要經(jīng)過服務(wù)器解析,直接就可以傳送到客戶端,此類型的頁面,由于不需要解析就能直接訪問,一般情況下,比動(dòng)態(tài)頁面的執(zhí)行速度快。

    2、 靜態(tài)化

    頁面靜態(tài)化就是用動(dòng)靜結(jié)合的方式將動(dòng)態(tài)網(wǎng)站生成靜態(tài)網(wǎng)站來保存。這是實(shí)實(shí)在在的html文件,也就是靜態(tài)頁面。

    3、 偽靜態(tài)方法(Url靜態(tài)化)

    偽靜態(tài)不是真正意義上的靜態(tài)化,它只是利用某種方法將訪問的路徑也就是url地址轉(zhuǎn)換成為.html為后綴的文件,但是實(shí)際上,文件本身還是以原來的后綴保存在服務(wù)器上。

    二. 為什么要使用靜態(tài)化技術(shù)

    隨著web1.0web2.0時(shí)代的跨度,web2.0不但要求網(wǎng)站的交互性提高,而且還對(duì)靜態(tài)化要求更高,要以靜制動(dòng),動(dòng)靜結(jié)合。同時(shí),靜態(tài)化也是提高網(wǎng)站訪問速度、減輕服務(wù)器壓力常用解決方案之一。

    4、 僅為了SEO 我們也要實(shí)現(xiàn)靜態(tài)化

    相信對(duì)于SEOSearch Engine Optimization漢譯:搜索引擎優(yōu)化)這個(gè)詞大家都不陌生。很多人都想讓自己的網(wǎng)站在百度,谷歌的位次靠前。而又不愿意花更大的價(jià)錢去做他們的競(jìng)價(jià)排名。這個(gè)時(shí)候,你就可以使用到網(wǎng)頁靜態(tài)化這個(gè)技術(shù),雖然和花錢的沒法比,可是我們?cè)诓换ㄥX的情況下比較而言已經(jīng)能夠滿足我們的要求了。當(dāng)然,不是說實(shí)現(xiàn)SEO就一定要用靜態(tài)化技術(shù),只是說這樣做相比較而言才操作性更簡(jiǎn)單,效果更好。

    5、 靜態(tài)化讓給我們帶來用戶

    我們經(jīng)常會(huì)遇到這樣的情況,當(dāng)我們輸入關(guān)鍵字進(jìn)行搜索時(shí),點(diǎn)擊鏈接進(jìn)入頁面,卻發(fā)現(xiàn)不是我們想要的那些內(nèi)容。這是因?yàn)樗阉饕胬锩娴臄?shù)據(jù)并不是實(shí)時(shí)更新的。可是如果我們點(diǎn)進(jìn)進(jìn)去顯示的是一張404頁面,那又會(huì)怎么樣呢?

    第一,我們的大部分潛在用戶被流失。

    第二、我們的網(wǎng)站還可能被搜索引擎所K掉,因?yàn)樗阉饕鏁?huì)認(rèn)為我們有無效鏈接,而無效鏈接過多,則會(huì)導(dǎo)致搜索引擎搜索質(zhì)量下降。從這一點(diǎn)考慮,相比而言,靜態(tài)頁面一般不會(huì)出現(xiàn)這樣的問題。潛在用戶的增加,這一點(diǎn)不用多說。

     

     

    6、 靜態(tài)化讓我們有證可查

    通常我們?nèi)绻檎乙恍┍容^古老的歷史資料,都會(huì)發(fā)現(xiàn)很難查找。就算是找到了,也不一定是在來源網(wǎng)站找到的。如果我們要想深入追究這些資料的原始作者、發(fā)布網(wǎng)站、以及其他資料,我們都無從下手。但現(xiàn)在有相應(yīng)的互聯(lián)網(wǎng)檔案館專門收集網(wǎng)站內(nèi)容,只要你是HTML靜態(tài)頁,那么你的內(nèi)容是可以根據(jù)連接找到原來的內(nèi)容的。可是如果你是動(dòng)態(tài)網(wǎng)站,那么,至多能找到標(biāo)題和列表。

    7、 讓我們服務(wù)器資源最大化吧

    動(dòng)態(tài)網(wǎng)站與數(shù)據(jù)庫交互頻繁,如果訪問量增大,那么讀寫次數(shù)就會(huì)相應(yīng)的增加。這個(gè)時(shí)候,打開的數(shù)據(jù)連接自然會(huì)隨之增加,那么服務(wù)器壓力增大是必然的。要是這個(gè)時(shí)候數(shù)據(jù)庫不能承受,直接死掉,想想你的系統(tǒng)會(huì)怎樣?可是如果我們換成靜態(tài)頁面,即使數(shù)據(jù)庫死掉,我們依然可以正常訪問。用戶體驗(yàn)大大的提升,用戶的信任度也會(huì)有很大的提高。

    三. 靜態(tài)化的劣勢(shì)

    8、 可維護(hù)性下降

    采用靜態(tài)頁面生成,會(huì)對(duì)磁盤某一區(qū)域讀寫平凡,對(duì)服務(wù)器的損耗較大,需要即時(shí)的備份。而且針對(duì)大型系統(tǒng),有必要制定相應(yīng)的備份規(guī)范和更新制度。同時(shí)如果后期系統(tǒng)需要修改,針對(duì)大量頁面文件的修改也是需要耗費(fèi)人力的,維護(hù)成本增加。

    9、 增大服務(wù)器空間占有率

    由于生成的文件數(shù)量太多,就需要考慮文件以及文件夾結(jié)構(gòu)問題,甚至對(duì)于服務(wù)器空間大小的要求也是比較高的。同時(shí)備份的實(shí)時(shí)性也要求較高,文件數(shù)量一旦增大,備份也是一個(gè)相當(dāng)大的問題。

    10、        消耗服務(wù)器資源

    剛剛才說了靜態(tài)化會(huì)讓服務(wù)器資源最大化,怎么又消耗服務(wù)器資源了呢?那是因?yàn)槲募趯懭胗脖P時(shí)會(huì)調(diào)用IO流,這個(gè)對(duì)服務(wù)器資源的占用是比較高的。

    四. 適當(dāng)?shù)倪x擇是有必要的

     

    手工靜態(tài)化

    模板靜態(tài)化

    url rewrite偽靜態(tài)

    占用硬盤空間

    占用服務(wù)器資源

    技術(shù)難度

    簡(jiǎn)單

    后期維護(hù)

    簡(jiǎn)單

    需要學(xué)習(xí)的內(nèi)容

    html

    模板技術(shù)

     在線生成文件

    正則表達(dá)式

    看了上面的對(duì)比圖,我們明顯知道靜態(tài)化有很多優(yōu)勢(shì),也有很多劣勢(shì)。通過對(duì)比,我給大家提供一些使用的建議:

    1、在處理上沒有生成的頁面使用動(dòng)態(tài)數(shù)據(jù)代替,一定頁面生成則使用更新的頁面訪問。

    2、對(duì)訪問量大的網(wǎng)址建議使用,但是如果你的寫入比較頻繁,而且實(shí)時(shí)性要求較高的話,建議放棄。或者,你可以選擇進(jìn)行周期性更新。

    3、對(duì)于SEO權(quán)重比較高,而且你又剛剛起步,為非搜索引擎合作網(wǎng)址的話,建議使用。

    4、對(duì)于服務(wù)器空間較小而訪問量較大的朋友,建議你們放棄使用,要不你們就擴(kuò)大你們服務(wù)器的空間吧。

    5、 如果你的服務(wù)器硬盤對(duì)頻繁寫入承受能力不夠的話,建議放棄。

     

    在對(duì)這項(xiàng)技術(shù)有了一個(gè)較為全面的了解之后,我們接下來看看如何來實(shí)現(xiàn)它吧!

     

    五. 靜態(tài)化實(shí)例

    1、 偽靜態(tài)實(shí)例

    顧名思義偽靜態(tài)是相對(duì)真實(shí)靜態(tài)來講的.通常我們?yōu)榱烁玫木徑夥?wù)器壓力,和增強(qiáng)搜索引擎的友好面.都將文章內(nèi)容生成靜態(tài)頁面.但是有的朋友為了實(shí)時(shí)的顯示一些信息.或者還想運(yùn)用動(dòng)態(tài)腳本解決一些問題.不能用靜態(tài)的方式來展示網(wǎng)站內(nèi)容.但是這就損失了對(duì)搜索引擎的友好面.怎么樣在兩者之間找個(gè)中間方法呢,這就產(chǎn)生了偽靜態(tài)技術(shù).就是展示出來的是以.html一類的靜態(tài)頁面形式。

    相關(guān)鏈接:偽靜態(tài)百科說明

    (http://baike.baidu.com/view/1570373.htm?fr=ala0_1_1)

                         A.                 ASP.NET偽靜態(tài)

    1st.         方法一(Global.asax幾乎不用)

    IIS從收到Request開始,到返回Response整個(gè)過程中的幾個(gè)主要步驟:

    1.IIS收到請(qǐng)求。

    2.選擇器根據(jù)URL的特點(diǎn)與IIS中的配置,選擇一個(gè)ISAPI用于處理該請(qǐng)求——現(xiàn)在自然會(huì)選擇ASP.NET ISAPI

    3.ASP.NET執(zhí)行引擎接收到請(qǐng)求,于是初始化數(shù)據(jù)(例如構(gòu)建各種對(duì)象)。

    4.開始觸發(fā)各種Pipeline事件,自然先從BeginRequest開始。

    5.經(jīng)過了多個(gè)Pipeline事件,ASP.NET根據(jù)配置為當(dāng)前請(qǐng)求選擇一個(gè)合適的HandlerHandlerFactory進(jìn)行處理(當(dāng)然特殊情況例外,例如已經(jīng)在之前的事件中直接輸出結(jié)果并結(jié)束請(qǐng)求了)。

    6.經(jīng)過了Handler處理之后又經(jīng)過幾個(gè)Pipeline事件,以EndRequest結(jié)束。

    7.輸出Response

     

    一般就是在BeginRequest事件中調(diào)用HttpContextRewritePath方法,將該請(qǐng)求重新定位至一個(gè)目 標(biāo)URL。例如我們就可以在Global.asax中重寫Application_BeginRequest方法來實(shí)現(xiàn)這一點(diǎn).

    public class Global : System.Web.HttpApplication
    {
        
    protected void Application_BeginRequest(object sender, EventArgs e)
        {
            
    HttpContext context = HttpContext.Current;
     
            
    if (context.Request.Path.Equals("/Customers",
                
    StringComparison.InvariantCultureIgnoreCase))
            {
                context.RewritePath(
    "~/CustomerList.aspx");
            }
        }
    }

    2nd.      方法二(ASP.NET級(jí)別的URL Rewrite組件查看

    b.1_ 引用URLRewriter.dll;

    b.2_ 在web.xml中配置

    <httpModules>
      <add name="ModuleRewriter"
           type="URLRewriter.ModuleRewriter, URLRewriter" />
    </httpModules>

    <configSections>

    <section name="RewriterConfig"
               type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

    </configSections>
    <RewriterConfig>
      <Rules>
        <RewriterRule>
          <LookFor>~/test/([\w]+).html/</LookFor>
          <SendTo>~/Default.aspx?test=$1</SendTo>
        </RewriterRule>
      </Rules>
    </RewriterConfig>

     

    相關(guān)鏈接:ASP.NET偽靜態(tài)實(shí)例1

    (http://allanpie.blog.163.com/blog/static/2132041020100892132572/)

            

                         B.              JAVA偽靜態(tài)實(shí)例

    1.需要包urlrewrite.zip查看

    2. WEB-INF目錄下建一個(gè)urlrewrite.xml文件

    內(nèi)容示例:

    <?xml version="1.0" encoding="utf-8"?>

    <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"

    "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

    <urlrewrite>

    <rule>

    <from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>

    <to type="forward">/$1.htm?category=$2&amp;page=$3</to>

    </rule>

    <rule>

    <from>^/rss/yahoo\.html$</from>

    <to type="redirect">

     http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/W3CSSiteFeed

    </to>

    </rule>

    </urlrewrite>

     

    3.修改WEB.XML

    <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <init-param>
    <param-name>confPath</param-name>
    <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>

    原文地址:http://blog.csdn.net/snowwhite1129/archive/2010/04/12/5477079.aspx

    2、 生成靜態(tài)頁面實(shí)例

    不管怎么說,雖然有了靜態(tài)化技術(shù),但是網(wǎng)頁的內(nèi)容管理功能也是必須保留的,下面我們來看下如何用代碼來實(shí)現(xiàn)靜態(tài)化文件的制作。

                            A.              ASP.NET靜態(tài)化

    當(dāng)然首先,我們得有一個(gè)靜態(tài)模板頁,也就是要生成頁面的樣式我們得有。

    那么我們看下目錄結(jié)構(gòu)

    1a.html 這個(gè)頁面就是模板頁

    2a.aspx 這個(gè)頁面當(dāng)然是內(nèi)容編輯頁面了

    3a.aspx.cs 這個(gè)不用說,就是內(nèi)容編輯頁面的服務(wù)器端代碼。

    好了,了解了目錄結(jié)構(gòu)我們來看下代碼的實(shí)現(xiàn)。

    1a.html 部分

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>!title!</title>

    <link href="../css/User_Reg.css" rel="stylesheet" type="text/css" />

    </head>

     

    <body>

    <br/>

    <div class="content title30">!title!</div>

    <br/>

    <div class="content">

     <div class="agreement">

    !content!

    <br/>

    <input name="bt_1" type="button" value="關(guān)閉" onclick="<script></script>"/>

    <br/>

    </div>

    <div class="copyright_line"></div>

    <div class="copyright">

    Copyright © 2008 <a ><strong>Xiexieshu.Com </strong></a>All rights Reserved

    </div>

    </div>

    </body>

    </html>

     

     

     

     

    這里大家注意下紅色部分,紅色部分就是你要替代的內(nèi)容。比如!title!就是標(biāo)題。這里的替換字符大家可以隨意改變,因?yàn)?span style="margin: 0px; padding: 0px; line-height: 1.5; color: red;">雙感嘆號(hào)的使用在內(nèi)容里面是比較少見的,所以我用的是這種方法。大家可以把這個(gè)改為其他的不常用的特殊符號(hào),越特殊越好,越復(fù)雜越好,不過你們可得考慮下可操作性。

    那么有了模板也,我們接下來就是要從內(nèi)容編輯頁面獲取字符串替換掉我們想替換的部分。然后生成頁面就可以了。我們看看編輯頁面代碼

    2a.aspx 部分

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AgreeMent.aspx.cs" Inherits="AgreeMent" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

        <title>無標(biāo)題頁</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

            <asp:Literal ID="Literal3" runat="server" Text="頁面名稱:"></asp:Literal><br />

            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<asp:TextBox ID="TextBox3"

                runat="server"></asp:TextBox><br />

            <asp:Literal ID="Literal1" runat="server" Text="標(biāo)題:"></asp:Literal><br />

            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;<asp:TextBox ID="TextBox1"

                runat="server"></asp:TextBox>

            <br />

            <br />

            <asp:Literal ID="Literal2" runat="server" Text="內(nèi)容:"></asp:Literal><br />

            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

            <asp:TextBox ID="TextBox2" runat="server" Height="331px" TextMode="MultiLine" Width="566px"></asp:TextBox>

            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成頁面:" /></div>

        </form>

    </body>

    </html>

    編輯頁面和普通的編輯頁面沒有什么兩樣。重點(diǎn)在于后面的服務(wù)器端頁面

    3a.aspx.cs頁面

    using System;

    using System.Data;

    using System.Configuration;

    using System.Collections;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

     

    using System.IO;//調(diào)用IO包,讀取文本文件 打開和讀取文件進(jìn)行讀取訪問是輸入/輸出

    using System.Text; //對(duì)流進(jìn)行操作時(shí)要用到的包

     

    public partial class AgreeMent : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {       

        }

        protected void Button1_Click(object sender, EventArgs e)

        {

            String path = HttpContext.Current.Server.MapPath("");//獲取當(dāng)前文件路徑

            StreamReader r = new StreamReader(path + @"a.html");//通過路徑獲取模板文件內(nèi)容

            String line = null;

            StringBuilder str = new StringBuilder();//大量字符串拼接或頻繁對(duì)某一字符串進(jìn)行操作時(shí)最好使用 StringBuilder

            //開始讀取模板文件內(nèi)容

            while ((line = r.ReadLine()) != null)

            {

                str.AppendLine(line);//這里就是一行一行的拼接字符串

            }

            r.Close();

            str.Replace("!title!", TextBox1.Text);//好了,開始替換文本

            str.Replace("!content!", TextBox2.Text);

            StreamWriter w = new StreamWriter(path + @"\agreement\" + TextBox3.Text + ".html");//實(shí)例化,并制定文件名稱規(guī)則和生成文件路徑

            w.Write(str);//這里才真正開始創(chuàng)建文件

            w.Close();//不要忘了關(guān)閉哦

        }

    }

     

     

     

     上面的代碼相信已經(jīng)寫得很詳細(xì)了,如果你還看不懂,那么我只能說是你的人品問題了,好好復(fù)習(xí)下基礎(chǔ)吧!

     

                            B.              JAVA靜態(tài)化

    這里難得去寫了,好吧,我承認(rèn)我不稱職。不過,我是在教大家方法,你們可以按照上面的方法依瓢畫葫蘆,掌握了思路就知道該怎么辦了。

    六. 更為詳細(xì)的解決方案

     


    如圖所示:

    1、 編輯文章,通過頁面編輯儲(chǔ)存到數(shù)據(jù)庫,數(shù)據(jù)操作用來增刪改數(shù)據(jù)。

    2、 發(fā)布文章,通過頁面生成器從數(shù)據(jù)庫讀取數(shù)據(jù)和模板生成相應(yīng)的靜態(tài)頁面。

    3、 讀取整個(gè)欄目文件數(shù)量,重構(gòu)索引文件和分頁文件。

    注意:這三個(gè)步驟看是分開的,但是在執(zhí)行時(shí)是一氣呵成的。也就是說點(diǎn)擊一個(gè)按鈕的同時(shí),要依次執(zhí)行這三個(gè)功能。



    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2013-03-25 10:29 Chan Chen 閱讀(309) 評(píng)論(0)  編輯  收藏 所屬分類: Architecture

    主站蜘蛛池模板: 亚洲精品综合一二三区在线| 国产成人精品免费视频大全五级| 亚洲国产综合精品中文字幕 | 亚洲宅男精品一区在线观看| 四虎永久在线精品免费一区二区| 国产高清对白在线观看免费91 | 亚洲精品~无码抽插| 亚洲视频在线免费看| 国产成人无码精品久久久久免费 | 亚洲?v无码国产在丝袜线观看| 伊人久久亚洲综合| 亚洲精品国产综合久久久久紧| 日韩在线视频免费| 女人18毛片免费观看| 亚洲嫩草影院在线观看| 久久九九全国免费| 曰批视频免费30分钟成人| 亚洲Av无码精品色午夜| 亚洲色大成WWW亚洲女子| 永久免费在线观看视频| 亚洲国产精品无码成人片久久| 一级毛片在线免费播放| 亚洲免费网站在线观看| 亚洲高清无码综合性爱视频| 亚洲av永久无码精品网址| 黄视频在线观看免费| 99热在线精品免费全部my| 亚洲福利精品电影在线观看| 亚洲熟女www一区二区三区| 无码乱肉视频免费大全合集| 亚洲视频在线免费播放| 最近中文字幕国语免费完整 | 国产成人精品亚洲一区| 黄色免费在线网站| 中文亚洲AV片在线观看不卡| 一区二区三区视频免费观看| 亚洲第一区在线观看| 男人j进女人p免费视频| 亚洲国产精品毛片av不卡在线| 免费国产va在线观看| 亚洲 另类 无码 在线|