knockout-postboxのpublishでデータを渡す際に注意すること

knockout-postboxをよく使うのだけど、publish()で大きいデータを渡そうとしたら予期しない挙動をしたのでメモ。


knockout-postboxのpublishでデータを渡す時には

var data = {
  // 何かしらのデータ
};

ko.postbox.publish('message', data);

というふうにすると思うのだけど、270KB近くあるJSONを渡したところブラウザが固まってしまった。 ソースコードを追ってみたら、どうも第二引数に渡された値をko.toJSON()でディープコピーしているようだった。

JSON以外にも、要素を直接渡したらスタックオーバーフローしてしまったので、何も考えずに渡すと思ったように動作しなかったりする。

この時は手っ取り早くグローバル変数を作ってそれに代入してそれを参照するように書いたのだけど、ko.postbox.serializerを書き換えるなり他の方法もあったのかも。