web-dev-qa-db-ja.com

開発者ツールが有効になるまでIE11でのJavaScriptの実行が遅い

私は非常に大きなjavascriptアプリケーションを持っています。これには大部分がasm.jsコードが含まれています(urho3d c ++エンジン上に構築され、asm.jsにコンパイルされます)。

ほとんどのブラウザー(chrome、firefox、safari、Edge)では問題なく動作しますが、IE11では非常に低速です。問題は、開発者ツールを開くまで遅いだけです。開発者ツールを開くと、IE11は約10倍高速になり、他のブラウザーとほぼ同じ速度になります。

問題を再現する最小限の例を次に示します。
http://test.sebbia.com/urho3d/test.html
動作中のブラウザでページを開き、「Run-start」メッセージとの間の時間「実行-終了」メッセージは約1〜2秒です。
開発者ツールを使用せずにIE11でページを開きます。時間は約35〜50秒です。
開発者ツールを開いてリロードします。時間は約2〜3秒です。

もう1つの重要な注意点は、開発者ツールでセッションのプロファイリングを開始すると、開発者ツールが閉じられたかのようにパフォーマンスが低下することです。だから私は実際に問題をプロファイルすることができます。しかし、プロファイリングに数時間を費やし、大きな機能にログメッセージを挿入しようとしましたが、ボトルネックは見つかりませんでした。すべての関数の実行にはほぼ同じ時間がかかります。大きな関数の途中にログメッセージを挿入すると、通常2つの類似した部分に分割されます。そのため、スローダウンの原因となる単一の関数はなく、コードの実行はただ遅いだけです。ビットシフト、関数呼び出し、算術演算-これらはすべて、オープンな開発者ツールに比べて時間がかかりすぎるようです。

私は本当にアプリをIE11で動作させる必要があり、開発者ツールが開いている状態で動作するという事実に夢中になります。 IEツールが開いていなくてもツールが開いていると考えるか、他の手段で良好なパフォーマンスを達成する方法を見つけようとしています。だから私の質問は開発者ツールを実際に手動で開かずにIE11と同等のパフォーマンスを実現するにはどうすればよいですか

これは非常に広範な質問なので、いくつかの小さな質問に分けたいと思います。

  1. IE11に開発者ツールが開いていると思わせる方法はありますか? x-ua-compatibleメタタグのようなものがありませんか?

  2. 開発者ツールを閉じたときに速度低下の原因は何ですか? IE8と9の開発者ツールがないと、console.log関数の呼び出しが遅いと聞きました。たぶん、asm.jsは最適化されていませんか?これの原因がわかっていれば、少なくともこれを回避するためにコードを書き直すことができます。

  3. JavaScriptコードから開発者ツールを開く方法はありますか? 「アプリを高速化する」ために、ウェブサイト上のボタンを押すようにユーザーに求めることができます。 F12キーを押すか、設定をナビゲートするように依頼するのは多すぎるようです。

11
Alexey

debuggerが有効な場合、asm.jsのコンパイルはdisabledおよび実行は通常のJSとして実行されるようにフォールバックします-実行の開始時にこれらの行に沿って_console.log_ sを見ることができます。

_asm.js has been disabled as the script debugger is connected. Disconnect the debugger to enable asm.js._ Edgeで、

_asm.js type error: Disabled by debugger_はFirefoxで、

一方、Chromeは、デバッガーで_01_HelloWorld.js_を開こうとするだけでは開きません。

debuggerのIE(デバッガータブ、ソケット記号、左から8番目)を無効にして、_asm.js_を使用すると、開発ツールを開くことができますが、実行速度が遅くなります。デバッガーを閉じたときのスローダウンは、実際にはIE11の_asm.js_の最適化の速度の問題にすぎません。

IE11が_asm.js_に対して最適化されていないという多くの参照があります。 caniuse.comはIE11をリストする限り、_asm.js_をまったくサポートしていないとしています。

https://caniuse.com/#feat=asmjs

これはMicrosoft自身によってバックアップされているようです。

https://developer.Microsoft.com/en-us/Microsoft-Edge/platform/status/asmjs/

確かに、いくつかのベンチマークで実証されているように、明らかにいくつかの速度の問題がありますが、それに対する何らかのサポートがあるように見えます:

https://github.com/Kukunin/asm.js-benchmark/blob/master/README.md

IE11が他のブラウザよりも10倍遅いことを示しています、または

https://www.ghacks.net/2014/11/03/massive-benchmark-highlights-asm-js-performance-of-web-browsers/

に基づいています:

https://kripken.github.io/Massive/ -自分で試すことができます。

そして、他の多くの。 IE11の_asm.js_の実装が非常に貧弱であるため、それがない場合よりも遅い場合があります。

編集:Microsoftプラットフォームステータスリンクを追加しました。

7
Perran Mitchell

これは推測に過ぎませんが、反応ネイティブで同様の問題が発生したため、これについて知りました:

リモートでデバッグする場合、jsバンドルはchromeのJSCを使用し、デバイス上で実行する場合は、Appleによって提供されるJSCを使用します。

urho3dは、開発者ツールのオン/オフ時に環境を変更しません。

0
Michal