[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 &lt; 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 メーリングリストの案内