[mayaa-user:1053] 巨大なループをサポートする方法
Susumu ISHIGAMI
[E-MAIL ADDRESS DELETED]
2016年 1月 15日 (金) 14:52:09 JST
いしがみです。
UserMLで扱う内容なのかどうか悩みつつ、微妙なことを質問させていただきます。
意地悪な例でMayaaファイルに
<m:for id="LARGE_LOOP" init="${var i = 0;}" test="${i < 256}"
after="${i++}" />
のように書いて、テンプレートで次のように、無理やり入れ子すると、
<div id="LARGE_LOOP">
<div id="LARGE_LOOP">
<div id="LARGE_LOOP">
<div id="LARGE_LOOP">
<div id="LARGE_LOOP">
aaa
</div>
</div>
</div>
</div>
</div>
OutOfMemoryErrorが発生します(起動時の割当てヒープ量に依存)
原因は
AbstractResponse._stack
に格納された
CycleWriterImpl
の_buffer
が無限に増殖してしまうためです。
もし上手いこと、ForProcessor処理中でも、
CycleWriterImpl
をflushできれば、
クライアントに結果をストリーミングできるのではないかなと思います。
実現するための、良いアイデアはありませんでしょうか?
(例えば、CycleWriterImplが一定のバッファサイズを超えたら自動でwriteOutするようにしたらまずいか?)
これが出来れば、ループの上限も256で制限する必要もなくなり、
MayaaでCometのような仕組みも作れるのではないかと思います。
基本的なことなので初期の頃議論済みであれば申し訳ありません。
以上、よろしくお願い致します。
--
Susumu ISHIGAMI
susumu.ishigami @ gmail.com
mayaa-user メーリングリストの案内