2009年9月3日木曜日

SWF4でevalする時のTips

Flash CS4で作成したSWF4のバイトコードを読んでみた。
SWF4はFlash Lite 1.1で作成したプロジェクトの出力フォーマット。

ActionScriptで
eval(varInstName).varname = "value";
このコードは、次のようなバイトコードになる。
1: ActionPush "varInstName"
2: ActionGetVariable
3: ActionPush ":"
4: ActionStringAdd
5: ActionPush "varname"
6: ActionStringAdd
7: ActionPush "value"
8: ActionSetVariable
一方、
eval(varInstName add ":varname") = "value";
同じ効果を持つこのコードは、
1: ActionPush "varInstName"
2: ActionGetVariable
3: ActionPush ":varname"
4: ActionStringAdd
5: ActionPush "value"
6: ActionSetVariable
にコンパイルされるので、":"と"varname"をActionStringAddするコードを1つにできて、swfのバイトコードを6バイト減量できる。
命令数も減るので運がよければ速くなるかも。

ちなみに、
eval("/InstName:varname") = "value";
_root.InstName.varname = "value";
は、同じバイトコードを出力し、
1: ActionPush "/InstName:varname"
2: ActionPush "value"
3: ActionSetVariable
だった。

0 件のコメント:

コメントを投稿