首页 新闻 会员 周边 捐助

JavaScript方法封装后,执行速度变慢

0
悬赏园豆:5 [已关闭问题]

学完一本讲javascript的书,做了个google suggest效果的例子,效果是出来了,请求的速度也快,但是写方法时是把控件的id写到方法里了,几个方法之间有相互调用,所以一个页面上只能有一个文本框有这种效果,后来把几个方法写到一个function中,定义成一个类,然后在页面上实例个对象,用对象方法来执行,但是速度非常慢,得等好长时间,不知道为什么?如果不是这样封装的话,又怎么实现呢?希望高手指点迷津!!

问题补充: 没封装前的JS方件: var arrOptions=new Array(); var strLastValue=""; var theTextBox; var currentValueSelected=-1; var req; //添加ID为spanOutput的span,用来显示提示的项; window.onload=function(){ var elemSpan=document.createElement("span"); elemSpan.id="spanOutput"; elemSpan.className="spanTextDropdown"; document.body.appendChild(elemSpan); document.getElementById("form1").txtUserInput.onkeyup=GiveOptions; } //根据文本框的内容和用户按下的键来执行相应的改变; function GiveOptions(){ ....根所文本框的情况和有用户按键来做想应操作或请示服务器;其中直接用的是控件的ID; } //向服务器发送请求; function TypeAhead(xStrText) { .....向服务器请求数据; } .......还有几个方法。 封装后的JS文件: window.onload=function(){ var elemSpan=document.createElement("span"); elemSpan.id="spanOutput"; elemSpan.className="spanTextDropdown"; document.body.appendChild(elemSpan); } function Suggest(id,pUrl) { this.tbId=id; this.pageUrl=pUrl; var arrOptions=new Array(); var strLastValue=""; var theTextBox; var currentValueSelected=-1; var req; //根据文本框的内容和用户按下的键来执行相应的改变; this.GiveOptions=function(){ ....;内容同上; 其中用了传进来的参数来引用文本框; } ......其他方法 } ; 定义了一个Suggest类;是为了让每文本框应用这种效果; 页面中的调用: <script type="text/javascript"> var tbin=new Suggest("txtUserInput","SelectData.aspx");</script> <input type="text" name="txtUserInput" id="txtUserInput" onkeyup="tbin.GiveOptions()"/> 这样后速度就慢了。 1.做测试的数据量不是很大,不到十项. 2.不是第每次都请求数据,比如请示到与"a"匹配的数据后,"aa"的就不请求了。只是首次请求时慢。
universe@三月软件的主页 universe@三月软件 | 初学一级 | 园豆:184
提问于:2008-11-14 17:40
< >
分享
其他回答(4)
0

封装不会引起任何问题--前提是你没有封装错

所以建议你把关键代码贴出来,大家好看问题在哪里

丁学 | 园豆:18730 (专家六级) | 2008-11-14 17:46
0

情况很怪,贴代码看看

玉开 | 园豆:8822 (大侠五级) | 2008-11-14 17:47
0

封装造成慢的可能:

1、调用栈变长,系统开销增大;

2、JavaScript解释引擎访问Prototype链的速度制约,速度变慢。

但是这二者绝对绝对不会成为系统性能瓶颈,对整个程序性能的影响相当小,so..还是写程序的问题比较关键。

JimLiu | 园豆:300 (菜鸟二级) | 2008-11-14 20:26
0

问题应该不是处在封装不封装。

导致慢可能是

1、查询结果的数据量、

2、服务请求的频率,并是是每次keyup都要请求的,要考虑到按键时间间隔。

等。

5yplan | 园豆:1330 (小虾三级) | 2008-11-15 01:35
0

var _old=new Date();

。。。。。。。。。。。。。自己写的代码

var _new=new Date();

alert(_new - _old);

自己分析一下那段慢

直心眼 | 园豆:205 (菜鸟二级) | 2008-11-26 22:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册