asp.Netmvc性能最適化――(1)静態化

4864 ワード

asp.Netmvcパフォーマンス最適化--(1)静的化
ページのパフォーマンスを向上させると同時に、静的化ポリシーが採用され、リアルタイムで静的化できないコンテンツにはキャッシュが採用される場合があります.本稿では,cshtmlの静的化を実現する方法(実際には完全なhtmlファイルではないが,リアルタイムで静的化できないコンテンツがC#コードを再埋め込む必要があるため,ここでは議論しない)と,静的化によるいくつかの問題について主に論じる.
賃貸住宅などの検索ページについては、いくつかの地域、価格、戸型の分類検索があります.これらの分類検索は重ねて使用することができます.また、1つの組み合わせの検索結果にはいくつかのページの内容がある可能性があります.だから、私たちがしなければならないのは、すべての組み合わせを貧乏にすることです.対応する静的ファイルを生成し(一般的に、ユーザが入力したカスタムキーワードは、検索頻度の大きいキーワードを除いて、静的化処理を行わない.
1まず推定生成規模
一般的には,数学における組合せ法,すなわち地域にn個,価格区間にm個,戸型にk個,ページングにs個を用いると,生成された静的ページにはtotal=n*m*k*s個がある.もう一つの問題は,生成の頻度が毎日1回生成されるか,それともどれくらいの時間に1回生成されるかである.また,生成するプロセスには時間が必要であり,生成されていない場合,要求があれば,その場合どのように処理すべきかなども考慮する必要がある.
2次にcshtmlファイルを生成する方法
一般的なvar tt=View(「Index」,「Test」)を呼び出します.変数ttで望み通りに最終的なhtmlコードを得ることはできず,一定の処理が必要である.次のコードを参照してください.

protected static string RenderViewToString(Controller controller, string viewName, string masterName)
         {


    HttpContextBase wrapper;


    if (System.Web.HttpContext.Current != null)


        wrapper = new HttpContextWrapper(System.Web.HttpContext.Current);


    else


        throw new InvalidOperationException(


            "Can't create Controller Context if no "+


            "active HttpContext instance is available.");


      


    if (routeData == null)


        routeData = new RouteData();


      


    // add the controller routing if not existing


    if (!routeData.Values.ContainsKey("controller") &&


        !routeData.Values.ContainsKey("Controller"))


        routeData.Values.Add("controller",


                             controller.GetType()


                                       .Name.ToLower() .Replace("controller", ""));


      


        controller.ControllerContext = new ControllerContext(wrapper, routeData, controller);

             IView view = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, masterName).View;
             using (StringWriter writer = new StringWriter())
             {
                 ViewContext viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);
                 viewContext.View.Render(viewContext, writer);
                 return writer.ToString();
             }
         }

        ,       controller.ControllerContext     ,  ,             controller.ControllerContext  。     ,           ,     ,       Controller            。

   ,  :

var controller = new TestController();

var tt = RenderViewToString(controller,"Index",null);

     ,          html  ,                。



3        。

                cshtml   ,            ,      ,             ,      ,         ,      ,          。  ,             :

(1)    cshtml        ,                      ,       A,B,          1000 cshtml  ,      A       ,    ,     A         ,   A   ,      B     ,  ,  B         ,       B      。

(2)           HttpGet       ,          ,           。        ajax    。

(3)      cshtml            ,         ,      ,              (   ) ,            。         asp.net mvc   。



 :  cshtml   ,        ,     html  ,        ,    Layout     。       ,        _Layout.cshtml  _Layout.cshtml      。