Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高Jquery\Javascript的效率_Javascript_Jquery - Fatal编程技术网

提高Jquery\Javascript的效率

提高Jquery\Javascript的效率,javascript,jquery,Javascript,Jquery,我有下面一段代码来动态生成一个选择列表。当检索到的记录介于0-300条记录之间时,代码正常工作。然而,当我尝试处理超过这个数字的记录时,确切地说是671条记录,浏览器、FF、Chrome、Opera挂起,javascript似乎占用了大量资源,在等待5分钟后最终生成select选项后,浏览器变得缓慢。。。。 我正在寻找一种方法,使这更有效,并防止这样的挂断,因为我将与记录高达5000 $("#idea_selectrel").on("change",function(){ var

我有下面一段代码来动态生成一个选择列表。当检索到的记录介于0-300条记录之间时,代码正常工作。然而,当我尝试处理超过这个数字的记录时,确切地说是671条记录,浏览器、FF、Chrome、Opera挂起,javascript似乎占用了大量资源,在等待5分钟后最终生成select选项后,浏览器变得缓慢。。。。 我正在寻找一种方法,使这更有效,并防止这样的挂断,因为我将与记录高达5000

$("#idea_selectrel").on("change",function(){
       var attributeid = $("option:selected",this).val();
       $.post("/OCSRM/PopulateHTMLTablesServlet.do",{"attributeid":attributeid,"table":'idearelations'},function(data){
           if(!$.isEmptyObject(data))
           {
               $("#idea_selectrelvalue option:not(:first)").remove();
               var html='';
               var len = data.length;               
               for(var i=0,len = data.length; i<len; i++ )
               {
                   var relvalue = [data[i].relvalue];
                   var description = [data[i].description];
                   html +='<option value="'+relvalue+'">'+relvalue+' - '+description+'</option>';
                   $("#idea_selectrelvalue").append(html).show();
               }
           }
           else
           {
               alert('No data found.');

           }


       },'json');
       //alert(attributeid);

    });

您的代码正在构建一个包含选项的长HTML字符串。它还将字符串一次又一次地追加到元素中

将.append移动到循环之后:

           for(var i=0,len = data.length; i<len; i++ )
           {
               var relvalue = [data[i].relvalue];
               var description = [data[i].description];
               html +='<option value="'+relvalue+'">'+relvalue+' - '+description+'</option>';
           }
           $("#idea_selectrelvalue").append(html).show();

您的代码正在构建一个包含选项的长HTML字符串。它还将字符串一次又一次地追加到元素中

将.append移动到循环之后:

           for(var i=0,len = data.length; i<len; i++ )
           {
               var relvalue = [data[i].relvalue];
               var description = [data[i].description];
               html +='<option value="'+relvalue+'">'+relvalue+' - '+description+'</option>';
           }
           $("#idea_selectrelvalue").append(html).show();

这是很多DOM元素,即使在没有JS的情况下创建,加载速度也会很慢。假设您没有办法在服务器上预生成select并将其发送下去,您可以尝试不在循环中追加该值。您可以构建一个选项值字符串,然后在创建该字符串后,将select的html设置为生成的字符串。循环中的DOM操作可能是该级别的罪魁祸首。但是,重要的是要注意,大型或深度嵌套的DOM元素可能是性能问题。

这是许多DOM元素,即使在没有JS的情况下创建,其加载速度也会很慢。假设您没有办法在服务器上预生成select并将其发送下去,您可以尝试不在循环中追加该值。您可以构建一个选项值字符串,然后在创建该字符串后,将select的html设置为生成的字符串。循环中的DOM操作可能是该级别的罪魁祸首。但是,重要的是要注意,大型或深度嵌套的DOM元素可能是性能问题。

无法测试代码,但从我可以看出,您没有清除循环中的html变量,目前,每次迭代都会递归添加html,每次迭代都会更新DOM,它会变得很大,很快

我不确定这是否是出于设计,但如果不是,请尝试将附加移动到循环之外

           var html='';
           var len = data.length;               
           for(var i=0,len = data.length; i<len; i++ )
           {
               var relvalue = [data[i].relvalue];
               var description = [data[i].description];
               html +='<option value="'+relvalue+'">'+relvalue+' - '+description+'</option>';
           }

           $("#idea_selectrelvalue").append(html).show();

无法测试代码,但我可以告诉您,您没有清除循环中的html变量,目前,每次迭代都会递归地添加html,每次迭代都会更新DOM,这将变得非常大、快速

我不确定这是否是出于设计,但如果不是,请尝试将附加移动到循环之外

           var html='';
           var len = data.length;               
           for(var i=0,len = data.length; i<len; i++ )
           {
               var relvalue = [data[i].relvalue];
               var description = [data[i].description];
               html +='<option value="'+relvalue+'">'+relvalue+' - '+description+'</option>';
           }

           $("#idea_selectrelvalue").append(html).show();

5000个dom元素迫切需要重新思考界面的设计。理想情况下,您应该在服务器上对此进行分页。在构建完所有html之后,将其添加到DOM中,而不是逐段添加。您希望用户如何处理包含5000个选项的下拉列表?@BenjaminPaul肯定会对此进行研究。5000个DOM元素正在尖叫,要求重新思考您的界面设计。理想情况下,您应该在服务器上对此进行分页。在构建完所有内容后,将html添加到DOM中,而不是逐段添加。您希望用户如何处理包含5000个选项的下拉列表?@BenjaminPaul肯定会对此进行调查。最好在发布前4分钟检查是否已经发布了完全相同的答案:最好在发布前4分钟检查是否未发布完全相同的答案: