赞 | 0 |
VIP | 0 |
好人卡 | 1 |
积分 | 1 |
经验 | 167035 |
最后登录 | 2013-9-15 |
在线时间 | 57 小时 |
Lv1.梦旅人 风之塞尔达
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 57 小时
- 注册时间
- 2005-10-22
- 帖子
- 2492
|
本帖最后由 link006007 于 2009-10-19 02:44 编辑
载入脚本和运行时都有性能损失
ruby对脚本的组织是以node来管理的,在ruby解释器读入脚本时,遇到alias,则会查找目标类的原函数,
然后判断alias有效性,无效则抛出异常(如没有原始方法,这回调用print_undef方法),如果有效,则跟新node连接信息,插入符号表,最后调用一次method_added或者singleton_method_added<--这两个是ruby脚本可调用的方法
在运行时.
单纯的C函数调用, 如果一次就可以完成而被迫分成n次,其他不算,至少多了函数的栈操作时间.(当然,对于ruby本身的速度,这个可以忽略不计)
在加上如果被alias旧名函数里有原本不需要的个别步骤,那么消耗性能是必然的了(这个消耗最大)
最后,从ruby脚本的执行来看
ruby解释器通过ruby_exec_internal调用eval_node来运行脚本(其实就是调用ruby的eval函数)
也就是,ruby脚本在执行时,是一个对上述node中保存信息的执行过程,alias增加了整体node(是树)的复杂度,多少也会损失性能吧
以上只是个人理解...欢迎拍砖 有兴趣可以看看eval.c,里面包含ruby的语法结构和大部分主要运行过程 |
|