既に持っているアセットの多重ロードが走らないように、ローディングのプロミスをキャッシュするようにした。
https://github.com/kt3k/bw/commit/d5959e25be58db586b876ff1bd2a7f8a488b4caf
単純にキャッシュしてしまうと、全てメモリ上に乗ってしまって良くない。オープンワールドを想定しているので、フィールドは無限に広くて、すべてのオブジェクトがメモリには乗らない想定なので。
不要なロードは避けつつ今必要なアセット以外は適切に回収されるように、アセットを WeakRef としてキャッシュする仕組みを入れた。これによって「今使われているアセット」は全てキャッシュに乗っていて「誰も使わなくなったアセット」が自然に回収されるようになった。