Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
如何在具有大型HTML的页面上提高JavaScript性能/减少页面负载?_Javascript_Jquery_Performance_Huge Pages - Fatal编程技术网

如何在具有大型HTML的页面上提高JavaScript性能/减少页面负载?

如何在具有大型HTML的页面上提高JavaScript性能/减少页面负载?,javascript,jquery,performance,huge-pages,Javascript,Jquery,Performance,Huge Pages,我们的页面布局如下所示,jqueryclick处理程序用于大量HTML元素(数千个div) 布局如下: Navbar至少包含2000多个div和UL,LI(用于内容导航),我们将jQuery事件处理程序绑定到每个元素: $('.navbar-item').click(function(){ /* click handler */ }); 它花了很多时间来加载,在IE上的性能是可怕的!!! 我们还有什么可以改进的吗?或者采用任何替代设计来处理此问题?减少页面上的节点数。仅立即加载用

我们的页面布局如下所示,jqueryclick处理程序用于大量HTML元素(数千个div)

布局如下:


Navbar至少包含2000多个div和UL,LI(用于内容导航),我们将jQuery事件处理程序绑定到每个元素:

$('.navbar-item').click(function(){ 

  /* click handler */

});
它花了很多时间来加载,在IE上的性能是可怕的!!!
我们还有什么可以改进的吗?或者采用任何替代设计来处理此问题?

减少页面上的节点数。仅立即加载用户需要的内容,当用户向下滚动或打开导航级别(如果有可折叠的树)时延迟加载。

减少页面上的节点数。仅立即加载用户需要的内容,当用户向下滚动或打开导航级别(如果有可折叠的树)时延迟加载。

您也可以使用on函数()

例如:

$('div.navbar').on('click', '.navbar-item', function(){ 

  /* click handler */

});

也可以在函数()上使用

例如:

$('div.navbar').on('click', '.navbar-item', function(){ 

  /* click handler */

});

你有很多可能提高表现

1.
只要用户滚动并使用Ajax,就可以加载div

2.
使用而不是
。单击
动态添加侦听器

例如,您可以加载一些
div
并检查滚动,从中使用此功能,它适用于所有浏览器

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}


$(window).scroll(function() {
       // when the scroll is in bottom
       if($(window).scrollTop() + $(window).height() == getDocHeight()) {
           // use ajax to get more div
           $.ajax({
               url: "otherDivs.php", // page where you load div
               data { firstDiv : '10', secondDiv : '20'}, // parameters : To load div 10 to 20
               type: "POST"
           })
           .done(function( html ) {
               $( "body" ).append( html ); // html contain div 10 to 20
           });
       }
   });

这只是一些帮助您的方法

您有很多提高性能的可能性

1.
只要用户滚动并使用Ajax,就可以加载div

2.
使用而不是
。单击
动态添加侦听器

例如,您可以加载一些
div
并检查滚动,从中使用此功能,它适用于所有浏览器

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}


$(window).scroll(function() {
       // when the scroll is in bottom
       if($(window).scrollTop() + $(window).height() == getDocHeight()) {
           // use ajax to get more div
           $.ajax({
               url: "otherDivs.php", // page where you load div
               data { firstDiv : '10', secondDiv : '20'}, // parameters : To load div 10 to 20
               type: "POST"
           })
           .done(function( html ) {
               $( "body" ).append( html ); // html contain div 10 to 20
           });
       }
   });

如果更多项目的单击处理程序相同,而不是使用以下方法,那么这只是一些帮助您的方法:

$('.navbar-item').click(function(){ 

    /* click handler */

});
您可以这样做:

var functionNav = function(){
    /* click handler */
}

$('.navbar-item').on("click", functionNav)

如果函数相似,您还可以参数化一个函数以执行更多任务。

如果单击处理程序对更多项目相同,而不是使用:

$('.navbar-item').click(function(){ 

    /* click handler */

});
您可以这样做:

var functionNav = function(){
    /* click handler */
}

$('.navbar-item').on("click", functionNav)

如果函数相似,您还可以参数化一个函数以执行更多任务。

简单,单击“修改dom树”,然后单击“动态执行”。但在上,不要对html对象执行事件单击,而仅对div.navbar.Simple,单击“修改dom树”,在上动态执行。但在上,不要对html对象执行事件单击,而只对div.navbar执行事件单击。