2012-03-22 16 views
20

私は、JavascriptMvcを使ってシングルページのJavaScriptアプリケーションを作成し、ASP.NET MVC3の上にRESTサービスを組み込んだバックエンドを作成しました(NServiceMVCを使用)。シングルWebアプリケーション/ RESTバックエンドでMiniProfilerを使用するにはどうすればよいですか?

RESTサービスにはMiniProfilerがインストールされて実行されており、X-MiniProfiler-Idsヘッダーは各AJAXリクエストとともに返されます。私は実際にミニプロファイアを稼働させていますが、これについての情報は見つかりませんでした。したがって、私が正しい方法で行っているかどうかはわかりません。

これはサポートされているシナリオですか、これを行うには特別な方法がありますか?私は現在やっていることはこれです


(すべての静的コードで、動的なもの)HTMLアプリでは、私が持っている:私のMVCアプリで

<script type="text/javascript" src="/api/profiler"></script> 

を、私が持っている:

public ActionResult Profiler() 
    { 
     if (!ControllerContext.HttpContext.IsDebuggingEnabled) 
     { 
      return new EmptyResult(); 
     } 
     return new ContentResult() { 
      Content = StackExchange.Profiling.MiniProfiler.RenderIncludes(
         position: RenderPosition.Right, 
         showControls: true 
        ) 
         .ToString() 
         .Replace("<script type=\"text/javascript\">", "") 
         .Replace("</script>", "") 
     }; 
    } 

は明らかに、ハードコーディングさ<script>タグを取り除くために、ここでのハックがあります。

これ以外のものは、MVC側から見ると、プロファイラはまったく同じように使用されます。アプリケーションでREST呼び出しが発生するアクションを実行すると、miniprofilerがそのコールをコーナーに表示します。 showControls:trueパラメータを使用すると、クリアボタンが表示されるので、ページ全体が本質的に更新されないので、アクションの定数リストを取得するだけでよいので、ここでも役立ちます。

これは「正しい」方法ですか、それとも良い方法ですか?

+0

解決策はありますが、ベストプラクティスに従っていることを確認したいのですか? –

+0

@KirkWollはい。プロファイラに関するドキュメントはあまりないので、既存の解決策を見落としているかどうかを知りたい。最悪の場合、この質問は将来のWeb検索のためのドキュメントを提供することができます。これが「最良の」方法であれば、私はおそらくパッチを提出して、私の '.replace()'ハックを行う必要はなく、これを実際の「公式」な方法にします。 – gregmac

+0

私は同じ質問があります。あなたはまだこのようにしていますか? – Jerry

答えて

1

@ MiniProfiler.RenderIncludes()がjavascriptを使用してすべてのコンテンツを生成することを前提としています。これは現時点で有効な前提かもしれませんが、これは変更される可能性があります。

単純にハッキングを回避し、ajaxリクエストを使用してプロファイラを読み込むのはなぜですか?どちらのシナリオでも、ajaxか組み込みスクリプトのどちらであっても、プロファイラをコールバック経由で挿入すると、プロファイリングの結果に多少影響します。

<div id="profiler"></div> 
<script type="text/javascript"> 
    $.load("#profiler","api/profiler"); 
</script> 
関連する問題