Flashから毎フレームExternalInterface.callでJSの関数を呼び出したりしている時に、そのJSの関数内でなにかしらのObjectをreturnしてるとその処理に手間がかかるのか、Flashのフレームレートがすごい落ちる。
CoffeeScriptで関数の最後に@を入れてるとこの現象が起こりやすいので、ExternalInterface.callで直接呼び出される関数の最後はreturn falseして回避しておく。
さらにそのJSの関数内でDOMの操作みたいなちょっと重めの処理(width, height変えたり、left, top変えたり)をしてたりしても同様の現象が起こる。この場合はJSの関数内でやっている処理をsetTimeout(Function, 0)でくるんで非同期で処理してあげると回避できた。
なんだろこれ?ExternalInterface.callで呼び出した処理が終わるのをFlashが待っちゃうからかな?
追記1:
こういうことらしい
@bouze ExternalIfはXMLでFlashとデータのやり取りをしてるんだけど、データ量が多いとそのシリアライズなのかなんかが遅いよ。試しにJSONに変換した文字列を送ったりしたら多少改善されないかな?
— Keita Kitamura (@keita) June 15, 2013
追記2:
CoffeeScriptで行末returnしないようにするには「return」だけ書いとけばいいっぽい。
あーCoffeeScriptって関数の最後に return って最後に書けばなんも return しない関数にコンパイルしてくれるのね
— Takeshi Takatsudo (@Takazudo) June 25, 2012