6

ここの人々は、パフォーマンステストにVisualStudioを使用しています。ここで、いくつかのjavascriptパーツにいくつかの小さな問題があります。それらは、VisualStudioWebパフォーマンステストでjavascriptパーツのパフォーマンスをチェックできません。

Visual Studioのパフォーマンステストを使用したことがないので、そこでベンチマークを行う方法がわかりませんが、Web+jsのパフォーマンスチェックには多くのソリューションがあることがわかりました。他のツールやフレームワークを使用できると思いましたが、許可されていません。ここの人々は、すべてにVisualStudioを使用したいと考えています。ですから、これは物事をよりトリッキーにします。

javascriptのパフォーマンスを確認する必要がある場合は、次のように簡単に実行できます。

var begin = new Date();
functionA();
functionB();
functionX();
var end = new Date();
var bench = end - begin;

最後に、変数benchで結果を確認できます。今、私はこの変数を「どういうわけか」ビジュアルスタジオのパフォーマンステストに渡す必要がありますか?C#経由?または、これはどのように機能していますか?これは良い解決策でしょうか?他のアイデアはありますか?

4

4 に答える 4

5

VS Performance Test Engineはクライアント側のコードをまったく実行せず、HTTPレベルでのみ機能するため、それは不可能だと思います。したがって、例として提供したコードは実行されません。

証拠については、こちらをご覧ください-http://msdn.microsoft.com/en-us/library/ff520100.aspx

WebパフォーマンステストエンジンはHTTPレイヤーで動作するため、JavaScriptやActiveXコントロールのようなクライアント側のスクリプトは実行されません。Webパフォーマンステストは、サーバーでの負荷の生成に関係しています。したがって、Webページの外観にのみ影響するクライアント側のスクリプトは、Webパフォーマンステストにとって重要ではありません。パラメータ値を設定したり、AJAXなどの追加のHTTPリクエストを生成したりするクライアント側のスクリプトは、サーバーの負荷に影響を与えるため、スクリプトをシミュレートするためにWebパフォーマンステストを手動で変更する必要がある場合があります。

よくある誤解は、記録はInternet Explorerで行われ、Webパフォーマンステスト結果ビューアは結果をブラウザコントロールに表示するため、WebパフォーマンステストはInternetExplorerを使用して何らかの方法で実行する必要があるというものです。これはそうではありません。すべてのリクエストは、Webパフォーマンステストエンジンを使用して直接実行されます。InternetExplorerやその他のブラウザとのやり取りは発生しません。Webパフォーマンステストエンジンは、標準のHTTP要求/応答メッセージを使用してターゲットWebサーバーと直接通信します。

したがって、唯一の方法は、他のソリューションを使用してjavascriptのパフォーマンスをチェックするか、たとえばSeleniumに基づいて独自のソリューションを実装することです。ビルドの一部としてVisualStudioから実行できるSeleniumRCを使用して、このような測定を自動化することは可能だと思います(すべてにVisual Studioを使用する必要がある場合)。

于 2013-01-13T01:33:14.127 に答える
2

確かにこれは機能しますが、VSパフォーマンステストと直接ブリッジできるかどうかはわかりません。C#およびVSとの統合を望んでいる場合は、別の方法として独自の方法を作成することもできます。

その場合、質問はJSとC#をブリッジする方法につながります。これは、JSをページに埋め込んでから、WebBrowserコントロールを使用して実行する場合に.NETプラットフォームで実行できます。JavaScriptでは、を参照して情報をC#アプリケーションに戻すことができますwindow.external。javascriptの例を次に示します。

window.external.performanceCallback([yourdata]); 

WebBrowserコントロールを格納しているクラスでperformanceCallback()メソッドを呼び出します。ただし、その前に、Webブラウザが開いているページにクラスを表示する必要があります(window.externalは、参照しているインスタンス化されたクラスです)。

したがって、C#でwebBrowserを作成するときに、window.externalを設定するには、次のようにします。

webBrowser1.ObjectForScripting = this;

さらに、ComVisible属性でクラスをマークする必要があります

[ComVisible(true)]

注意として、WebBrowserControlは、コンピューターにインストールしたIEのバージョンによって異なります。したがって、バージョン管理には注意してください。javascriptは、自分のバージョンのIEが処理できる範囲でのみ実行されます。JSがすべての妥当なバージョンのIEで実行されていることを確認してください。

于 2013-01-13T06:57:47.640 に答える
1

JavaScriptを直接監視することはできませんが、JavaScriptにタイミングの詳細を含むC#Webサービスを定期的に呼び出すように依頼することはできます。(確かに、これにより余分なオーバーヘッドが追加され、結果が確実に歪められ、目的全体が無効になる可能性があります。LANでこのテストを実行する場合は、遅延をいくらか軽減する必要があります。)

JavaScript

var log = function (message) {
    $.ajax('/path/to/log', {
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({message:message})
    });
}
// then just call it like so in appropriate places: log('started foo at 12:34:56');

C#:

asmxサービスまたはMVCコントローラーまたはajax投稿を受け入れるもの

于 2013-01-19T18:52:39.063 に答える
0

それは不可能です。http://msdn.microsoft.com/en-us/library/ff520100.aspxを確認してください。

于 2013-01-18T07:50:02.463 に答える