Blog
Kentico Xperience 13 Refresh 1は、.NETCoreアプリのデバッグモジュールを復活させます
By Sean G. Wright
.NET Core Debugは、ソフトウェア開発者にとって非常に役立ち、サイトのパフォーマンスに関する貴重な洞察を提供し、問題の診断に役立ちます。
Kentico Xperience 13 Refresh 1がリリースされたばかりなので、プラットフォームに追加された拡張機能を確認する絶好の機会です。マーケター、コンテンツマネージャー、開発者向けに多くのエキサイティングな製品拡張機能を提供します。 Kentico Xperienceアプリケーションの構築と保守に取り組んでいるソフトウェア開発者にとって非常に役立つものを簡単に見てみましょう。コンテンツ配信(MVC)アプリケーションのデバッグモジュール機能を有効にします。
Kentico 12 MVCがリリースされたとき、コンテンツ管理アプリケーションの機能とインターフェイスにいくつかの矛盾がありました。 Portal Engine開発モデルはまだ利用可能であったため、アプリケーションのすべての機能がPortalEngineサイトとMVCサイトで同じように機能するわけではありませんでした。
デバッグモジュールはその1つであり、サイトのパフォーマンスに関する貴重な洞察を提供し、開発者が問題を診断するのに役立ちました。特に、サイトが展開されていて、VisualStudioでのデバッグがオプションにならない場合に役立ちます。このモジュールにより、SQLクエリ、キャッシュされたデータ、およびK#マクロのライブスナップショットを表示できるようになりました。 MVCの追加により、これらの機能はコンテンツ管理(Webフォーム)アプリケーションにのみ適用され、コンテンツ配信(MVC)アプリケーションには適用されませんでした。
ただし、Kentico Xperience 13.0 Refresh 1では、このデバッグ情報が両方のアプリケーションで利用できるようになりました。
Kentico Xperienceを初めて使用する場合は、それらを有効にする方法を確認してから、DancingGoatデモサイトでそれらを使用したときに得られるさまざまな種類の洞察を探ります。
SQLデバッグ
コンテンツ管理アプリケーションを開き、設定モジュールに移動することで、SQLデバッグを有効にできます。
このオプションは、[設定]-> [コンテンツ]-> [システム]-> [デバッグ]-> [SQLクエリ]-> [SQLクエリのデバッグを有効にする]にあります。
これを有効にすると、デバッグモジュールに移動して、SQLクエリ-> [ライブサイト]タブを表示できます。
コンテンツ配信(MVC)アプリケーションが実行されていることを確認し、ブラウザーにページをロードします。次に、「ライブサイト」ナビゲーションリンクをもう一度クリックして、実行されたクエリのリストを再読み込みします。
ここには多くの情報があり、そのほとんどは、SQLデータベースクエリがどのように機能するかを理解している開発者にはなじみのあるものです。
注意すべき重要なデータポイントは、個々のクエリの「期間」、各クエリの結果のデータセットのサイズ、および特定のURLのデータをロードするために必要なクエリの総数です。
空のキャッシュを使用してDancingGoatホームページをロードすると、ページのすべてのデータを取得するために合計55のクエリが実行されていることがわかります。次にページをリロードすると、前のページのロードでキャッシュされたアイテムの数が原因で、13個のクエリのみが実行されます。これは大きな違いです。
これらのカウントには、ページ上のすべての画像を表示するためのクエリや、アクティビティログ用のデータベースの更新が必ずしも含まれているわけではありませんが、キャッシュがサイトの読み込み速度とコストに与える影響については十分に理解できます。効果的なキャッシュの実装なしでサイトを本番環境にデプロイする必要があるかもしれないインフラストラクチャの。
SQLデバッグのもう1つの用途は、実行されたクエリをコピーして、優先するMS SQLエディターに貼り付けることです(クロスプラットフォームのAzure Data Studioを使用するのが好きです)。デバッグモジュールに記録されるSQLは、実行される正確なSQLクエリであり、すべてのパラメーター化された値が含まれているため、エディターに表示される結果は、アプリケーションがサイトに表示するために受け取るものと一致する必要があります。
クエリされているデータの量に注意を払い、すべてが必要かどうかを判断する必要があります。クエリの最適化は、パフォーマンスに2倍の影響を与える可能性があります。データベースからアプリケーションに転送されるデータが少なくなり、メモリにキャッシュされるデータが少なくなるためです。
これで、次のデバッグモジュール機能であるキャッシュアイテムのデバッグに進みます。
キャッシュアイテムのデバッグ
キャッシュアイテムのデバッグは、SQLデバッグのように有効にする必要はありません。
キャッシュアイテムリスト([キャッシュアイテム]-> [ライブサイト])を見ると、コンテンツ配信アプリケーションに現在キャッシュされているすべてのものが表示されます。
キャッシュアイテム名(キー)でキャッシュアイテムを検索し、内容を表示して、正確にキャッシュされているものを確認できます。
キャッシュされた各アイテムの依存関係キーも一覧表示されます。このリストは、特定のキャッシュアイテムがキャッシュから削除される原因となるデータベースの更新内容を示しています(キャッシュアイテムが古くなるため)。キャッシュアイテムの詳細には、有効期限も表示されます。
Kentico Xperienceの内部によって作成されたキャッシュアイテムの場合、各エントリに論理的な原因があることを確認できます。このデバッグ機能の本当の利点は、カスタムコードをキャッシュしているときに見られます。
キャッシュの無効化は、コンピュータサイエンスにおける2つの困難な問題の1つと見なされているため、開発者がアプリケーションで古い情報が使用されている理由を不思議に思うことがよくあります。
これは、代わりにデータベースにクエリを実行するときにキャッシュにクエリを実行していたことが原因である場合もありますが、より一般的な原因は、データが更新されたためにキャッシュが空であると考え、代わりにキャッシュに古いデータが入力されていることです。 。これは、[キャッシュアイテム]リストに移動し、そこにあるべきではないアイテムを見つけて、 キャッシュ依存キーを表示するのに最適なタイミングです。これは、誤って設定されている可能性があります。
キャッシュアクセスのデバッグ
キャッシュアイテムのデバッグは、キャッシュに何かが挿入されたことを知るのに役立ちますが、キャッシュアクセスのデバッグは、キャッシュから何かが取得されたときに通知します。
キャッシュアクセスのデバッグは、他のデバッグ機能と同じ場所で有効にできます([設定]-> [システム]-> [デバッグ]-> [キャッシュアクセス]-> [キャッシュアクセスデバッグを有効にする])。
適切で一意のキャッシュアイテム名を思いついた場合は、アクセスされたキャッシュアイテムのリストを参照して、キャッシュされた各アイテムを取得しようとしたものをかなりよく理解できます。さらに情報が必要な場合は、[コンテキスト]列に次の情報が表示されます。フルスタックトレース。
キャッシュアイテムのデバッグと同様に、ここで各キャッシュアイテムの詳細を表示できます。
キャッシュアイテムを調べるだけでは不十分です。ロードしたページが実際にキャッシュされたデータを使用していたかどうかはわかりません。 SQL、キャッシュアイテム、およびキャッシュアクセスのデバッグは次の式のように考えることができます。
ページ上のコンテンツ=キャッシュアクセス+ SQL
または
SQL =キャッシュアイテム-キャッシュアクセス
これらのツールはすべて連携して、必要な情報を提供してくれます。
マクロ(K#)デバッグ
強力な型付け、ページ・ビルダー・コンポーネント、明示的なクエリなどを備えたMVC開発の世界では、マクロの使用や依存は少なくなったかもしれませんが、Kentico Xperienceでは、コンテンツ配信アプリケーションでも、適切な場所でマクロを使用していないわけではありません。
マクロデバッグを有効にすると、ほとんどの場合、ページの<title>を決定するためにマクロが評価されているのがわかります。
これは、Kentico Xperienceの設定([設定]-> [コンテンツ]-> [メタデータ]-> [ページタイトルの形式])で、ページのタイトルの形式がK#マクロで定義されているためです。
とはいえ、マクロを評価する必要があることが明らかでない状況は他にもたくさんあります。たとえば、ストアページにアクセスするときのDancingGoatデモサイトを見てください。ここでは、表示される製品の価格を決定する必要があります。製品の価格は、コンテンツ管理アプリケーションで定義された割引に関連付けられている場合があります。
識別情報は、マクロ式にあります。 「ProductIsOneOf」と「HarioVacuumPot」が表示されます。 コンテキストの下に、CatalogPriceCalculator .GetPrices ()が存在するスタックトレースを確認できます。が呼び出されています—カタログ割引のようです。
そしてそれはまさに私たちが見つけたものです!
マクロデバッグをキャッシュおよびSQLデバッグと組み合わせて使用すると、サイトのパフォーマンスのボトルネックがどこにあるかを判断できます。 50個のアイテムを一覧表示するページを想像してみてください。各アイテムは、データベースからキャッシュやデータが過剰に取得されることなく、値を決定するためにマクロを実行する必要があります。うわぁ。
結論
最新のWebアプリケーションの複雑さに圧倒されるのは簡単です。幸い、Kentico Xperienceは、マーケティングエキスパート、コンテンツマネージャー、およびソフトウェアエンジニアに、Webサイトの訪問者に価値をもたらすためのツールと機能を常に提供してきました。
これで、Kentico Xperience 13 Refresh 1を使用して、ASP.NETMVC5とASP.NETCoreアプリケーションの両方で、問題を解決し、サイトのパフォーマンスを向上させるために必要なデータにアクセスできます。デバッグモジュールを毎日使用することはないかもしれませんが、使用するときにそこにあることを嬉しく思います。