您是否找到了这样的工具并成功使用了它?
我也在寻找AS的分析器,但我想要一个与FlashDevelop和Flex SDK一起使用的免费软件/开源解决方案.我找不到.所以我写了一个简单的python脚本和一个更简单的AS类.该脚本基本上采用任何AS文件,并flash.utils.getTimer()
为每个函数定义添加性能分析代码(即调用该函数的总运行时间,精度为1 ms - 调用的分辨率).脚本有时会出错,但这些通常很容易手工修复.然后,您需要手动添加一行:在某个时刻将分析统计信息转储到某处.这种方法显然远非准确,但它仍然可以让您很好地了解代码中的瓶颈.我成功地将它用于100k文件.
这是AS类:
package { public class Profiler { private static var instance:Profiler; public static function get profiler():Profiler { if (!Profiler.instance) Profiler.instance = new Profiler; return Profiler.instance; } private var data:Object = {}; public function profile(fn:String, dur:int):void { if (!data.hasOwnProperty(fn)) data[fn] = new Number(0); data[fn] += dur / 1000.0; } public function clear():void { data = { }; } public function get stats():String { var st:String = ""; for (var fn:String in data) { st += fn + ":\t" + data[fn] + "\n"; } return st; } } }
这是诀窍的python脚本:
import sre, sys rePOI = sre.compile(r'''\bclass\b|\bfunction\b|\breturn\b|["'/{}]''') reFun = sre.compile(r'\bfunction\b\s*((?:[gs]et\s+)?\w*)\s*\(') reCls = sre.compile(r'class\s+(\w+)[\s{]') reStr = sre.compile(r'''(["'/]).*?(? 0 and stack[-1]['depth'] == depth: lastf = stack.pop() line = "Profiler.profiler.profile('" + lastf['name'] + \ "', flash.utils.getTimer() - __start__);\n" body = body[:pos] + line + body[pos:] endpos += len(line) pos = endpos match = rePOI.search(body, pos) return body def main(): if len(sys.argv) >= 2: inf = open(sys.argv[1], 'rU') else: inf = sys.stdin if len(sys.argv) >= 3: outf = open(sys.argv[2], 'wU') else: outf = sys.stdout outf.write(addProfilingCalls(inf.read())) inf.close() outf.close() if __name__ == "__main__": main()
随意使用,分发和修改两者.
Adobe最近发布了一个名为Adobe Scout的新的Flash分析工具:
http://gaming.adobe.com/technologies/scout/
这是旧的Flash Builder分析器的一个重大改进 - 它为您提供了详细的CPU时间细分,包括ActionScript执行和内部播放器功能,如渲染和网络.
试用期间免费 - 您只需注册免费的Creative Cloud帐户即可.之后,将继续提供免费的基本版本,并将完整版本作为付费Creative Cloud帐户的一部分提供.