7

クライアントから報告されたバグを再現しようとしています。これは、JS/DOM の解析が非常に遅いために IE に表示される「このスクリプトの実行が遅い」という通知です。

これは、私の仮想ボックス IE6 (クライアントには IE6 があります) では発生せず、私が持っているテスト マシン (いくつかの mac mini ) でも動作しません。

ただし、多くの JS が発生し、XHR を使用して取得された後に処理される HTML が多く、さらにその後に追加された DOM 要素に対して多くの JS が動作していることは保証できます。スクリプト全体を投稿することはできませんが、問題を簡単に追跡できると確信していますが、これを再現して最適化を試したいと考えています。

これは非常に知名度の高いクライアントであるため、電話や IM に出て話をすることはできません。このバグを再現するためにマシンの速度を落とす方法はありますか? それとも、クライアントのコンピューターの仕様を尋ねることに固執し、問題を再現する可能性が高い古いコンピューターにアクセスしようとする必要がありますか? または、ブラウザカムのようなものを使用しますか?

私が考えたもう1つのアイデアは、JSをさらに動作させることで、問題を解決してコードを最適化し、追加のコードを使用してもスクリプト通知エラーを投稿しないようにすることです。

アドバイスをいただければ幸いです。

4

3 に答える 3

5

VM 内で実行し、余分なスワッピングを行うために意図的にメモリを減らします。これでもうまくいかない場合は、バックグラウンドでベンチマーク ソフトウェアを実行できます。これらは、多くの CPU を消費する傾向があります。

于 2010-09-10T16:48:26.517 に答える
4

コンピュータの速度を落とすためにできることはたくさんあります。ここでの本当の問題は、それを正確にしたいのか、それともIE6がこの問題をより頻繁に再現できるようにするのに十分なCPUサイクルをかみ砕くようなものにしたいのかということです。

大まかな簡単な方法から始めます。仮想マシンを使用して、CPUを1つだけ指定し、映画の再生など、CPU使用率の高いものを実行します。IEをページファイルに強制してもここでは役に立たないため、RAMをあまり使用しないものを使用してみてください。より正確に速度を落とすには、CPUをアンダークロックすることをお勧めしますが、Javascriptをデバッグするためにこれを行うのは少し極端です。古いコンピューターにアクセスすることもうまくいくかもしれませんが、これらのどれも問題を再現することが保証されていません。

画面共有ソフトウェアの使用も難しい場合があります。クライアントがそのようなソフトウェアをインストールしてセットアップする意思があるかどうかによって異なりますが、これは間違いなくバグの再現に役立ちます。クライアントのコンピュータの時間を使い果たしている間にそれをいじくり回さなければならないことは、おそらく受け入れられないでしょう。

コンピュータの速度を落とすだけでなく、他にも試すことができることがあります。このMicrosoftサポート記事によると、いくつかのレジストリ値を変更することにより、IEの低速スクリプト警告の制限時間を実際に手動で下げることができます。自分のマシンでJavascriptを詳細にプロファイリングしてみてください。遅いスクリプトエラーを生成できない場合でも、ボトルネックやスクリプトのパフォーマンスが悪い場所を見つけることができます。

于 2010-09-10T17:15:13.153 に答える
1

私はあなたの問題を見つけました:
This is a really high profile client so I can't just get on the phone or IM and speak to them.- これは、彼らがそれを修正したいのであれば、あなたが修正したいものです.


それ以外の場合、問題について何らかの考えがある場合は、次のことができます。

  • ランダムな情報を使用して XML/HTML ドキュメントを作成し、文字列に格納します
  • 次に、XMLDomなどを使用してそれを解析してみてください

100万行で試してみてください:

sXML     = "<?xml version="1.0" encoding="UTF-8"?>\n<rootElement>\n";
for (var i=0;i<1000000;i++){
   sXML += '<element name="' + Math.floor(Math.random()*10001) + '">' 
         +    'some more random text: ' + Math.floor(Math.random()*1001) 
         + "</element>\n";
}
sXML     = "</rootElement>";

var oXML = (new DOMParser()).parseFromString(sXML, "text/xml");
var root = oXML.documentElement;

もちろん、ランダム要素などを使用して、必要に応じて精巧にすることもできます。

于 2010-09-10T18:01:19.483 に答える