问一个关于js文件加载对效率影响问题

cqhydz 2009-11-01 06:28:26
工具 Firefox3.5 Firebug
这样我需要多次加载一些js代码并用eval让其实例化( 比如下面的代码),但我在Firebug查看js脚本时发现如果每加载一次在js文件列表中就会1个文件项eval:eval(......)
这是否意味着我多次eval化后,内存里存在了多次这个代码,如果是 哪应如何消除呢,还有Foo在eval化后是全局变量吗,是否需要手动null.


eval每次加载类似代码
Foo = function(config){
// call superclass constructor:
Foo.superclass.constructor.call(this, config);

this.addEvents({
// add events
});
};
new Foo();
...全文
199 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
eduyu 2010-01-08
  • 打赏
  • 举报
回复
这个问题基本超出了js的本身,具体的js engine肯定会有具体的实现方式,只能从理论上来回答你。所有js engine都是动态内存分配,内存释放的逻辑是,看看是否有被引用,如果引用计数大于0,定然会在内存里。所以,理论上,不管你多少次eval,只要发生的是同名覆盖,内存使用不会增加。

eval后的作用于问题和js编程是是一样的,有var就表示当前eval生存的作用域,没有var,就是全局。
cqhydz 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kingwolf_javascript 的回复:]
为什么要使用eval呢?eval容易出问题
[/Quote]
有时还是要用的
浴火_凤凰 2009-11-05
  • 打赏
  • 举报
回复
为什么要使用eval呢?eval容易出问题
ZhangYaoxing 2009-11-04
  • 打赏
  • 举报
回复
关于作用域,看看我的这篇博客
http://blog.csdn.net/ZhangYaoxing/archive/2009/08/25/4481360.aspx
关于有多少个副本,个人认为是不会重复占用空间的。因为eval出来的无非是一些变量、函数之类。如果变量是局部的,用完扔掉,不存在重复占用问题。如果变量是全局的,那新定义的与原先定义的因为有一样的名字,必然会覆盖,也不存在重复占用的问题。
Firebug之所有多出现一条,只是检测上的问题,毕竟Firebug只是知道你又eval了一次,并不知道eval的内容和之前是不是一样(而且它也没有必要去检测,太不值得),所以当然是eval一次出来一条了啊
happy664618843 2009-11-04
  • 打赏
  • 举报
回复
友情帮顶 lz早日解决问题
xiaofan_sap 2009-11-04
  • 打赏
  • 举报
回复
期待……
jamm1986 2009-11-04
  • 打赏
  • 举报
回复
关注
cqhydz 2009-11-04
  • 打赏
  • 举报
回复
relateTarget 2009-11-02
  • 打赏
  • 举报
回复
我也遇过这种情况,同问~
cqhydz 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ws_hgo 的回复:]
用jquery可以解决这个问题
[/Quote]
怎么解决
Lewis83 2009-11-02
  • 打赏
  • 举报
回复
关注...不过没太明白是什么意思~可能我没有用过eval:嘿嘿。
ws_hgo 2009-11-02
  • 打赏
  • 举报
回复
用jquery可以解决这个问题
cqhydz 2009-11-02
  • 打赏
  • 举报
回复
cqhydz 2009-11-01
  • 打赏
  • 举报
回复
cqhydz 2009-11-01
  • 打赏
  • 举报
回复
加载一次在js文件列表中就会1个文件项eval:eval(......) >>
加载一次在js文件列表中就会增加1个文件项eval:eval(......)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧