长页面的Javascript性能问题

长页面的Javascript性能问题,javascript,jquery,javascript-events,dot.js,Javascript,Jquery,Javascript Events,Dot.js,我正在处理一个包含3400多个项目的非常长的页面。每个项目都有一个带有3个按钮的表单,每个表单都附带一个jQuery$.on()单击事件。我认为这就是导致我在IE8和IE7文档模式下出现问题的原因(悬停响应慢,页面渲染时间长)。当我选择$('button')时,我得到了超过10K个元素 该页面是使用fast DoT.js模板库从一个JSON对象呈现的,该JSON对象可以达到大约6层的深度 从我的经验来看,IE7和IE8的速度非常慢。IE9更好,IE10可以接受 如果您确实需要执行此操作,则必须考

我正在处理一个包含3400多个项目的非常长的页面。每个项目都有一个带有3个按钮的表单,每个表单都附带一个jQuery$.on()单击事件。我认为这就是导致我在IE8和IE7文档模式下出现问题的原因(悬停响应慢,页面渲染时间长)。当我选择$('button')时,我得到了超过10K个元素

该页面是使用fast DoT.js模板库从一个JSON对象呈现的,该JSON对象可以达到大约6层的深度


从我的经验来看,IE7和IE8的速度非常慢。IE9更好,IE10可以接受

如果您确实需要执行此操作,则必须考虑更具侵入性的性能调整,例如不渲染所有3400个元素


从您描述的内容来看,性能受到的影响可能不在您的JavaScript代码中。如果悬停事件需要很长时间,这意味着浏览器速度很慢。

根据我的经验,IE7和IE8非常慢。IE9更好,IE10可以接受

如果您确实需要执行此操作,则必须考虑更具侵入性的性能调整,例如不渲染所有3400个元素


从您描述的内容来看,性能受到的影响可能不在您的JavaScript代码中。如果悬停事件需要很长时间,这意味着浏览器速度很慢。

您是否尝试删除javascript以查看页面的性能?如果无法删除它,请在浏览器中禁用它,然后查看其影响。如果你的页面运行得更快,那么你就知道你发现了问题的一部分

3400多个事件监听器太多了,您可以尝试重新编写javascript以允许DOM中更高级别的委托事件监听器。您有3个按钮,因此可以委托三个侦听器,并将单击的表单元素传递给处理函数。除此之外,如果不知道代码的其余部分做了什么,就很难知道是否还有其他javascript性能问题


FrIT也是正确的,IE7/8是慢的,如果性能是优先考虑的,那么考虑一次渲染更少的元素是有益的。

< P>你试过移除JavaScript来查看页面是如何执行的吗?如果无法删除它,请在浏览器中禁用它,然后查看其影响。如果你的页面运行得更快,那么你就知道你发现了问题的一部分

3400多个事件监听器太多了,您可以尝试重新编写javascript以允许DOM中更高级别的委托事件监听器。您有3个按钮,因此可以委托三个侦听器,并将单击的表单元素传递给处理函数。除此之外,如果不知道代码的其余部分做了什么,就很难知道是否还有其他javascript性能问题


FIETS也是正确的,IE7/8是慢的,如果性能是优先考虑的,那么考虑一次渲染更少的元素是有益的。

< P>如果问题是大量的事件处理程序,用事件委托来修复它是微不足道的。 您没有提到DOM元素的结构,但为了举例说明,假设您当前正在附加事件处理程序:

$('.myform').on( 'click', function() { /*...*/ } );
其中,
myform
是每个表单上的类名

现在假设这些表单嵌套在id为=“formparent”的父元素中。您只需将代码更改为:

$('#formparent').on( 'click', '.myform', function() { /*...*/ } );
就这么简单


如果您发布了一些代码,可能会有人给出更具体的建议。

如果问题在于事件处理程序太多,那么通过事件委派来解决这一问题就很简单了

您没有提到DOM元素的结构,但为了举例说明,假设您当前正在附加事件处理程序:

$('.myform').on( 'click', function() { /*...*/ } );
其中,
myform
是每个表单上的类名

现在假设这些表单嵌套在id为=“formparent”的父元素中。您只需将代码更改为:

$('#formparent').on( 'click', '.myform', function() { /*...*/ } );
就这么简单


如果您发布了一些代码,可能会有人给出更具体的建议。

一次只能向DOM显示几百个元素。使用虚拟化滚动来删除/添加正在滚动的元素到DOM中。IE7/8当然不能处理那么多的元素,所以你会注意到滚动时间/悬停/所有东西的延迟。“你知道我的问题是什么吗?”答案不在问题中吗?@mcpDESIGNS你知道有一个js库或jq插件可以删除看不见的元素,并在用户向上滚动时将其恢复?我会说谷歌搜索,找到一个适合你需要的,但有一些是免费提供的!例如:。我个人在我的项目中有kendoUI,我们使用他们的datagrid,它有一个可以打开的虚拟滚动选项。很好@SultanShakir@mcpDESIGNS不幸的是,这两种解决方案都与IE7文档模式下的IE8相悖。我刚刚找到一个解决方案(Slickgrid-),几年前我一直在寻找一个更基本的datagrid,但它也可以处理1000行,执行您建议的删除/添加操作。一次只能向DOM显示几百个元素。使用虚拟化滚动来删除/添加正在滚动的元素到DOM中。IE7/8当然不能处理那么多的元素,所以你会注意到滚动时间/悬停/所有东西的延迟。“你知道我的问题是什么吗?”答案不在问题中吗?@mcpDESIGNS你知道有一个js库或jq插件可以删除看不见的元素,并在用户向上滚动时将其恢复?我会说谷歌搜索,找到一个适合你需要的,但有一些是免费提供的!例如:。我个人在我的项目中有kendoUI,我们使用他们的datagrid,它有一个可以打开的虚拟滚动选项。很好@SultanShakir@mcpDESIGNS不幸的是,这两种解决方案都与IE7文档模式下的IE8相悖。我刚刚找到了一个解决方案(Slickgrid-),几年前我一直在寻找一个更基本的datagrid,但它也