如何在具有大型HTML的页面上提高JavaScript性能/减少页面负载?
我们的页面布局如下所示,jqueryclick处理程序用于大量HTML元素(数千个div) 布局如下:如何在具有大型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上的性能是可怕的!!! 我们还有什么可以改进的吗?或者采用任何替代设计来处理此问题?减少页面上的节点数。仅立即加载用
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执行事件单击。