日期:2014-05-16  浏览次数:20308 次

如果页面上有几千几万个INPUT文本框,要依次取得文本框的值,会很慢很慢,如何来优化
我用AJAX来POST数据
页面上有几千几万个INPUT文本框,
要依次取得文本框的值,形成一个字符串。
客户端电脑配置如果很低,
会很慢很慢的
如何来优化。
还是放弃AJAX,直接用表单POST

------解决方案--------------------
不要用AJAX。换别的方法吧。AJAX本来就不适合用来做表单提交
------解决方案--------------------
弄成文件post上去算了.
------解决方案--------------------
最好还是post提交,否则,情况会比较惨
------解决方案--------------------
matrixy 的

var els = document.form1.elements;
for(var i = 0, l = els.length; i < l; i++)
{
//.....
}
第一次见到:)

for(var i = 0, l = els.length; i < l; i++)

每次循环是不是都会进行一次赋值操作:l = els.length
而影响速度??


------解决方案--------------------
var els = document.form1.elements;
for(var i = 0, l = els.length; i < l; i++)
{
//.....
}
//////////////////////////////////
for循环的过程是这样的,假若语句如下
for(A;B;C)D;
A语句块为循环的初始化过程,然后进行B语句块,如果B语句块条件成立,则执行D,否则跳出,然后执行D里的语句块,然后再跳回B语句块,这个问题,华为的笔试题里就曾经有过.

在这里之所以要这么写,因为在B这个条件判断的地方,如果用常量代替它的话会更好一些,以省得每次作判断时都要去取一次它的值,在java的for(int i = 0; i < list.size(); i++)这样的情况下更明显些,因为我也不知道JS的Array的length属性是怎么去获取的,是否是修改或的一个常量,这只是个习惯性的问题,曾在某某语言参考里也看到过推荐用该方法.
------解决方案--------------------
我的说法只是给个建议而己,但是事实上它确实能提高很大的效率,一个好习惯,而并非规定,shortway(您知道Javascript Tidiy吗?) 的回复我看都木看就回了.....-_-!!

测试结果如下,确实很大的提高了效率,JS里,在取String.length属性时还做了运算的.
var str = "... ";
document.write(str.length);
var time = new Date();
for(var i = 0, l = str.length; i < l; i++); // 1
for(var i = 0; i < str.length; i++); // 2
alert(new Date() - time);
在这里,str的长度为142800,越长越能测出差距,如果只用第一个循环的话,那么耗时大约是62 - 78ms之间,而第二个循环的话,耗时在93-110ms之间,循环越大越明显,至于其它的,大家自己去发现吧...
------解决方案--------------------
var els = document.form1.elements;
还包括页面上其他的控件
换document.getElementsByTagName( "input ")