上一篇文章「MiniProfiler 2.0.1」就有說到 MiniProfiler 有支援 ASP.NET WebForms 與 WCF,因為我對 WCF 相當不熟,而目前工作所執行的專案就是使用 ASP.NET WebForms,所以看到 MiniProfiler 有支援 WebForms,我就期待在 WebForms 上可以使用,因為在 MVC 的專案開發時使用 MiniProfiler,的確是有很大的幫助,而如果相同的功能可以在 WebForms 上執行就太好了,不過 MiniProfiler 的官網上的使用說明以及作者的部落格文章裡面對於 WebForms 專案如何配置 MiniProfiler 的設定卻是隻字未提。
而 github 上所開放的原始碼裡,WebForms 專案看起來就是個測試追蹤 SQLite 的 Demo 專案,如果要看原始碼中 WebForms 專案的配置設定來做為我們專案修改的參考,我必須說一定看不懂啦!不過我在幾次的測試之後整理出如何為 WebForms 專案配置設定 MiniProfiler 的方式,以下就是我所整理出的心得,分享給有需要的朋友做參考。
Step.1
先準備好一個 ASP.NET WebForms 網站專案,而且這個專案使用 ADO.NET Entity Framework,
Step.2
接著就是使用 Nuget 安裝 MiniProfiler 以及 MiniProfiler.EF
因為是 WebForms 專案,所以就不用裝 MiniProfiler.MVC3
另外記得也更新一下 EntityFramework (4.3.1) 與 jQuery (1.7.2)
Step.3:Default.aspx.cs
在進行配置設定 MiniProfiler 之前,先做個資料列表用來顯示等一下會用到的資料內容,
Step.4:修改 Global.asax
在 Global.asax 中修改以及增加以下的程式內容,記得要加入命名空間的使用「using StackExchange.Profiling;」
void Application_Start(object sender, EventArgs e){// 應用程式啟動時執行的程式碼
InitProfilerSettings();}/// <summary>
/// Customize aspects of the MiniProfiler.
/// </summary>
private void InitProfilerSettings(){// some things should never be seen
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();ignored.Add("WebResource.axd");
ignored.Add("/Styles/");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
MiniProfilerEF.Initialize();}protected void Application_BeginRequest(){MiniProfiler profiler = null;
// might want to decide here (or maybe inside the action) whether you want
// to profile this request - for example, using an "IsSystemAdmin" flag against
// the user, or similar; this could also all be done in action filters, but this
// is simple and practical; just return null for most users. For our test, we'll
// profile only for local requests (seems reasonable)
if (Request.IsLocal)
{profiler = MiniProfiler.Start();}}protected void Application_EndRequest(){MiniProfiler.Stop();}
Step.5 修改 Site.Master
Step.5 修改 Site.Master
一般做網站都會使用到 Site.Master,如果沒有使用的話,一樣把以下的修改內容給放到你的網頁上,
<%= StackExchange.Profiling.MiniProfiler.RenderIncludes() %>
放在網頁的最下方,這在之前曾經說過,因為 RenderIncludes() 這是會生成一段 Javascript 程式,
把 Javascript 程式或是引用放在網頁的下方,比較不會影響到網頁的載入與生成,
經過以上的五個步驟之後就完成了 ASP.NET WebForms 的 MiniProfiler 基本配置設定,接下來就是執行網頁看看結果,執行後的網頁左上方可以看到 Profiing Popup,點擊之後展開視窗內容就可以看到 Profiling 資料,
點擊 Profiling Popup 內容中的 sql 項目,可以看到追蹤到 EF 所執行的 SQL Command,
嗯……經由以上的步驟說明就應該清楚地知道如何配置來讓 MiniProfiler 在 ASP.NET WebForms 專案中運作。
進階設定
假如我們也想要追蹤前端網頁中的 Javascript 檔案的載入資訊呢?我們可以使用以下的方式,
展開執行網頁後的 Profiling Popup 視窗,一開始看不出剛才所設定要追蹤的資訊,
點擊 Profiling Popup 下方的「show trival」之後就可以看到我們剛剛設定要追蹤的資訊,
另外我們也可以在 Global.asax 或是 前端的 StackExchange.Profiling.MiniProfiler.RenderIncludes() 去設定 Profiling Popup 的樣式,
Global.asax
/// <summary>
/// Customize aspects of the MiniProfiler.
/// </summary>
private void InitProfilerSettings(){// some things should never be seen
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();ignored.Add("WebResource.axd");
ignored.Add("/Styles/");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
MiniProfilerEF.Initialize();MiniProfiler.Settings.PopupRenderPosition = RenderPosition.Right; //defaults to left
MiniProfiler.Settings.PopupMaxTracesToShow = 20; //defaults to 15
MiniProfiler.Settings.RouteBasePath = "~/profiler"; //e.g. /profiler/mini-profiler-includes.jsMiniProfiler.Settings.StackMaxLength = 256; // default is 120 characters
MiniProfiler.Settings.PopupShowTrivial = true;
MiniProfiler.Settings.PopupShowTimeWithChildren = true;
}
修改之後的網頁顯示
P.S.
我在工作上所執行的專案中使用 MiniProfiler,有關 MiniProifiler 於 Global.asax 裡的設定內容是與上面的設定不同,這必須要多次的調整才能正常執行,所以各位在使用的時候也要自行調整並作多次的測試。
ASP.NET WebForms 的 MiniProfiler 使用說明就簡短的介紹到這裡,基本上 MVC 專案的設置方式大多可以直接拿到 WebForms 使用,使用 MiniProfiler 就不再只是 ASP.NET MVC 獨享而已,相信在 WebForms 專案中導入使用 MiniProfiler,對開發上會有很大的幫助。
我目前工作所執行的 WebForms 專案也已經導入使用,我可以清楚地知道網頁執行的各個步驟所需花費的時間,開發時就可以知道那一個步驟是導致效能延遲並馬上進行改善,也可以在 Profiling Popup 中看到執行的 SQL Command 內容,善加使用 MiniProfiler 雖不會讓你如虎添翼,但至少可以讓你對於專案的開發能夠掌握更多的資訊。
以上
沒有留言:
張貼留言