エラーによってライブラリを使用しているサードパーティのページが壊れないように、javascript ライブラリ全体を try catch ブロック内にラップすることを考えています。
また、自分のコードによってスローされたエラーをキャッチして、サーバーに送信することもできます。
私の唯一の質問は、これを行うことで発生する可能性のある潜在的な負の副作用はありますか? (パフォーマンス、エラー追跡など)
エラーによってライブラリを使用しているサードパーティのページが壊れないように、javascript ライブラリ全体を try catch ブロック内にラップすることを考えています。
また、自分のコードによってスローされたエラーをキャッチして、サーバーに送信することもできます。
私の唯一の質問は、これを行うことで発生する可能性のある潜在的な負の副作用はありますか? (パフォーマンス、エラー追跡など)
ライブラリをtry{}
ブロックにラップするのは得策ではありません。いくつかの異なる問題があります。特に、V8 は の内部でスタックを最適化できないため、try{}
パフォーマンスが大幅に低下します。実際には想定していないものをthrow
エラーにラップすることは、デバッグ コンソールからエラーを飲み込んで隠してしまうため、一般的には良い方法ではありません。
また、ライブラリをラップしても、try{} catch(e) {}
発生するすべてのエラーを魔法のようにキャッチできるわけではありません。おそらく、「ライブラリ」は、ロード時に 1 回実行される JavaScript コードのチャンクにすぎませんが、try{}
. これはキャッチしないことに注意することが重要です:
try {
setTimeout(function() {
throw "test";
}, 100);
} catch(e) {
console.log( "I got caught" );
}
幸いなことに、「処理されていない」エラーをキャッチするのに適した場所があります。window.onerror
「ファースト パーティ」の開発者にとっては、正気を保つことはかなり良い考えですが、ライブラリに取り組んでいるときは、代わりに堅実な単体テストに頼る必要があります。「ファースト パーティの開発者」向けに、明確で使いやすいバグ報告フォームを用意することも必須です。私を信じてください、あなたのライブラリが壊れたら、人々は文句を言うでしょう。:)
PS -プログラマー SE でこの質問を見つけました。try{}
PPS - まともなjsperfを使用して見つけました。見てみると、ブロックtry{}
を含む関数のパフォーマンスが低下することが示唆されているようです。try{}
例外を飲み込んでいる場合、サードパーティのページが壊れるのを止めているわけではありません.コードが呼び出されて例外が発生しました.明らかにページは壊れています.サードパーティのページの開発者はそれを知らない.あなたのコードが壊れました。それは私見の大きな欠点です。何か悪いことが起こったら、善のために誰かに知らせてください。そのための例外です。
私はBlenderに同意しますが、理想的には、徹底的なQAによってエラーを追跡しようとしますが、「マイナスの影響は何でしょうか」という質問に答えます。