内联有什么优势?
What are the advantages of inline?
我已经阅读了一些有关在使用 ASC 2.0 编译器时如何使用内联元数据的内容。
但是我找不到任何信息来源来解释为什么我应该使用它们。
有人知道吗?
函数在任何编程语言中都会引起开销。根据 ActionScript,当函数开始执行时,会创建许多对象和属性。
首先,创建一个激活对象,用于存储在函数体中声明的参数和局部变量。这是一种内部机制,不能直接访问。
其次,创建一个 作用域链,其中包含 Flash 平台检查标识符声明的有序对象列表。每个执行的函数都有一个存储在内部 属性.
中的作用域链
函数闭包维护函数及其词法环境的快照。
内联移动代码减少了这些对象的创建,以及引用在堆栈上的维护方式。每个闪存,您可能会看到 4 倍的性能提升。
当然,这是有取舍的——没有 inline
关键字会导致代码复杂;同样,内联代码增加了字节码的数量。除了较大的应用程序外,虚拟机还会花费额外的时间进行验证和 JIT 编译。
为简化起见,内联是某种 copy/paste 代码。由于方法调用是昂贵的并且会花费执行时间,因此每次方法调用出现在代码中时,使用 inline 关键字都会 copy/paste 方法的主体,因此方法调用将被方法的主体替换。由于这是在编译时完成的,理论上它会增加生成的应用程序的大小(如果内联方法被调用 10 次,其主体将被复制和粘贴 10 次)但由于所有调用都将被替换,您将获得更快的执行速度。这当然只与要求严格的代码执行相关,例如在每一帧循环 运行。
我已经阅读了一些有关在使用 ASC 2.0 编译器时如何使用内联元数据的内容。
但是我找不到任何信息来源来解释为什么我应该使用它们。
有人知道吗?
函数在任何编程语言中都会引起开销。根据 ActionScript,当函数开始执行时,会创建许多对象和属性。
首先,创建一个激活对象,用于存储在函数体中声明的参数和局部变量。这是一种内部机制,不能直接访问。
其次,创建一个 作用域链,其中包含 Flash 平台检查标识符声明的有序对象列表。每个执行的函数都有一个存储在内部 属性.
中的作用域链函数闭包维护函数及其词法环境的快照。
内联移动代码减少了这些对象的创建,以及引用在堆栈上的维护方式。每个闪存,您可能会看到 4 倍的性能提升。
当然,这是有取舍的——没有 inline
关键字会导致代码复杂;同样,内联代码增加了字节码的数量。除了较大的应用程序外,虚拟机还会花费额外的时间进行验证和 JIT 编译。
为简化起见,内联是某种 copy/paste 代码。由于方法调用是昂贵的并且会花费执行时间,因此每次方法调用出现在代码中时,使用 inline 关键字都会 copy/paste 方法的主体,因此方法调用将被方法的主体替换。由于这是在编译时完成的,理论上它会增加生成的应用程序的大小(如果内联方法被调用 10 次,其主体将被复制和粘贴 10 次)但由于所有调用都将被替换,您将获得更快的执行速度。这当然只与要求严格的代码执行相关,例如在每一帧循环 运行。