管理javascript数据

时间:2012-04-09 19:06:05

标签: javascript jquery ajax performance

我有一个网站可以获取有关登录的用户数据。 这个数据由mysql保存为字符串,在用ajax调用此字符串后,我用js函数分割数据:str.split()。 这将返回一个数组,其中包含我要检查的btns的所有id,并且通过“.each”调用我检查所有匹配的btns。 最大的问题是这个过程在本地服务器上大约需要10秒钟。 获取用户数据有更好更快的方法吗? p.s:我们谈论用户登录时的数百个btns。

这是代码:

function get_saved_list(){
    $.ajax({
        type: "post",
        url: "ajax/get_saved_list.php",
        success: function(data){
            list=data.split(";");
            for(j=0; j<list.length-1; j++){
                $(".content #"+list[j]).siblings('a').trigger('click');
            }
            setTimeout("$('#save').hide()", 1);
        }
    });     
}

某些html包含触发的'a':

<ul class="content"><li>
<a class="third_cat_chb cat_chb_off"></a><span>page</span>
                                        <button id="page_<?php echo $row['page']."Z"; ?>chapter_<?php echo $row['s_id'];?>" style="width: 20px; margin-right: 5px;" class="page_chooser"></button></li></ul>

sory表示格式不好:)

2 个答案:

答案 0 :(得分:2)

不要在ID选择器前加上类。这禁止jQuery使用本机getElementById(),而是使用较慢的getElementsByClassName()。

请尝试使用此选择器:$("#"+list[j])

我能够循环播放1000个项目并在大约1秒钟内触发点击,而不是通过先完成一个课程来触发4-5秒。

如果你可以在想要点击的实际<a>上放置一个ID,这样你就可以避免调用兄弟姐妹(),这会增加额外的开销。

答案 1 :(得分:0)

如果您可以控制服务器,那么可以节省大量时间来使用checked="true" html属性,在php中有条件地设置它而不是触发点击事件。

如果您坚持使用Javascript:我不确定,但设置checked属性可能比单击它更快,因为您不会触发“点击”事件

$("#"+list[j]).siblings('a').attr('checked');

应该可行,但我还没有测试过。

但是,如果可以的话,在服务器上设置它是可行的方法。