WebサイトがハングしたユーザのJavaScriptコールスタックを取得する

Webサイトが応答しなくなった場合、ブラウザ側が強制的に停止したり、タブがクラッシュしたりします。

その際の、JavaScriptコールスタックを取得する仕組みとして『Crash Reporting』という仕組みがあります。この仕組みを使うことで、Webサイトを閲覧しているユーザが実際にどこでハングしているのか、コールスタックを調査できるようになります。

具体例

下記のように閲覧したユーザの ハングしたURLが、JavaScriptコールスタック付きのレポートとして取得する事ができます。

(json内改行は見やすくするために修正)

Crash Reporting

Reporting APIという仕組みがあり、自身のサイトで起こったCSP違反やネットワークエラー(DNSエラー・TLSハンドシェイクエラーなど)を、任意のエンドポイントにレポートさせる仕組みが標準化されています。 NEL(network-error-logging)レポートも面白い仕組みなので興味があるかたは調べてみてください。

その中の一つに、Crash Reportingという機能があり、仕様通り指定するとJavaScriptコールスタックを送信させる事ができます。

設定の仕方

HTTPレスポンスヘッダで、レポート送信先エンドポイント通知することで、ハング時にレポートを送ってくれます

report-to: {"group":"default","max_age":31536000,"endpoints":[{"url":"https://asnokaze.report-uri.com/a/d/g"}],"include_subdomains":true}
document-policy: include-js-call-stacks-in-crash-reports

今回はレポート収拾にreport-uriというWebサービスを利用しておりますが、任意のURLを指定できます。
(report-uri便利でしたが、もうすぐ有償化されますね)

おまけ

動作検証に当たり、Webページをハングさせる事に苦慮しました.... "chrome://crash/" は使えず...
とりあえず、ボタンを押したら無限ループするようにし何回か施行した所、、、運良くクラッシュしたり、反応がないと表示されたりするケースがありました。

何かうまいやり方はあるんだろうか。。。