開発中のウェブサービスで、ある時から、フリーズしたと思うくらい固まってしまう事案が発生。
Chromiumのコンソールを見ると、フロントエンドのストレージとして使ってるPouchDBの、destroyメソッドで止まっている模様。
エラーログを見てもブロックされている理由がよくわからないので、PouchDBのdestroyメソッドを使うのをやめて、IndexedDBを直に操作する方式に変えて、deleteDBに変更してみる。
しかーし、変えてみたけど、これもいっこうに非同期処理が返ってこない。
ブロックされる時間を計るために、ログにDateを仕込んで計測してみると、だいたい3分〜10分くらい。
不思議なのは10分以上にはならない。
いろいろ試してみたものの、今の所解決する方法がさっぱりわからない。
現在は回避策として、おとなしくuserAgentでlinuxを判別して、PouchDBを使ってdestroyメソッドは使わずIndexedDBのオブジェクトストア自体を消さずに、bulk updateでドキュメントをdeleteする処理に変更しました。これだとdeleteフラグが着いただけで、スッキリしないっちゃスッキリしない。
ですがlinux版は、このサービスのターゲットユーザーにはほぼいないと想定されるから、今の所はいいんじゃないでしょうか。
ちなみに、linux版以外のChromiumではこの箇所でブロックが発生しない模様。
追記 23.08.23
数日前ついにWindowsでも発生した模様。
しかーし、ある呪文を唱えることによって、解決したっぽい模様。
追記 23.09.27
ある呪文でその後ブロックが全然発生しなくなっているのと、なんだか意外とアクセス数があったので、これだけで結構な時間を費やしたけど呪文公開。
呪文というか、setTimeoutでdestroyにあたる処理をasyncで囲ったら、ブロックが発生しなくなりました。
追記 23.11.6
この方法でもブロック発生しているので、destroyやめました。