4

組み込みの Sitecore レンダリング統計http://<sitename>/sitecore/admin/stats.aspxは、非効率的で読み込みが遅い XSLT レンダリングを特定するのに非常に役立ちます。最近、.ascx サブ レイアウトに切り替えて Sitecore C# API を利用するようになりました。これは、正しく使用するとパフォーマンスを向上させるのに役立ちます。

ただし、サブ レイアウト (XSLT レンダリングとは対照的に) が統計ページで正しく報告されていないことに気付きました。以下のスクリーンショットを参照してください....

サブレイアウト統計の例

このサブ レイアウトの生成には約1.8 秒かかることがわかっています(コード ビハインドで計算しました)。キャッシュはオフになっています。平均を取得するために、ページを 20 回更新しました。「平均アイテム数」は常に 0 であることがわかりますが、これで問題ありませんが、「平均時間 (ミリ秒)」は1 ミリ秒未満であり、明らかに間違っています。

誰かがこれについて何か洞察を持っていますか? 誰かがそれを正しく動作させる方法を見つけましたか?

4

1 に答える 1

3

統計が正しいか間違っているかを判断するには、それが何を測定しているのかを正確に理解する必要があります。

Reflector を使用して Sitecore.Diagnostics.Statistics を調べてみると、次の点に注意してください。

  • Sitecore.Web.UI.Webcontrol にはフィールド m_timer が含まれています
  • これは、BeforeRender() メソッドで「開始」され、AfterRender() メソッドで「停止」されます
  • そのタイマーからのデータは Statistics.AddRenderingData() に送信され、コントロールに対してログに記録されます

これは、コントロールのレンダリングにかかる​​時間を測定していることを意味します。これには、XSLT の場合、その中のすべてのデータを準備するための処理時間が含まれますが、通常の ASCX の作業の多くはレンダリング段階の前に行われるため、統計は次のようになります。あまり役に立ちません。時間に Load ステージを組み込むと、Load シーケンスがチェーンされて再帰的に呼び出されるため、すべての子コンポーネントの処理時間が誤って含まれてしまい、おそらくあまり役​​に立ちません。

特定の ASCX コントロール (子を除く) の処理時間を測定するには、最初に累積データを取得してから、呼び出しチェーンを後処理して時間を分割しない限り、良い方法はないと思います。これは、RedGate ANTS が非常にうまく機能する種類のものですが、オーバーヘッドを考えると、実際の運用システムで実行されていた場合はあまりうまくいかない可能性があります。

于 2013-05-10T02:41:00.663 に答える