私は非常に大きな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と同等のパフォーマンスを実現するにはどうすればよいですか?
これは非常に広範な質問なので、いくつかの小さな質問に分けたいと思います。
IE11に開発者ツールが開いていると思わせる方法はありますか? x-ua-compatibleメタタグのようなものがありませんか?
開発者ツールを閉じたときに速度低下の原因は何ですか? IE8と9の開発者ツールがないと、console.log関数の呼び出しが遅いと聞きました。たぶん、asm.jsは最適化されていませんか?これの原因がわかっていれば、少なくともこれを回避するためにコードを書き直すことができます。
JavaScriptコードから開発者ツールを開く方法はありますか? 「アプリを高速化する」ために、ウェブサイト上のボタンを押すようにユーザーに求めることができます。 F12キーを押すか、設定をナビゲートするように依頼するのは多すぎるようです。
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プラットフォームステータスリンクを追加しました。
これは推測に過ぎませんが、反応ネイティブで同様の問題が発生したため、これについて知りました:
リモートでデバッグする場合、jsバンドルはchromeのJSCを使用し、デバイス上で実行する場合は、Appleによって提供されるJSCを使用します。
urho3d
は、開発者ツールのオン/オフ時に環境を変更しません。