Javascript 如何优化此HTML以更快地在浏览器中呈现?

Javascript 如何优化此HTML以更快地在浏览器中呈现?,javascript,html,optimization,Javascript,Html,Optimization,我继承了一个为大量项目生成html的应用程序。大约有2500个项目被分类,因此创建了一个巨大的2500多行表。以下是为单行呈现的代码: <tr id='ev_2075_321' class='datagridRow1'> <td align='left'> <div style='margin-left: 20px;'> <table cellspacing='0' cellpadding='0' st

我继承了一个为大量项目生成html的应用程序。大约有2500个项目被分类,因此创建了一个巨大的2500多行表。以下是为单行呈现的代码:

  <tr id='ev_2075_321' class='datagridRow1'>
      <td align='left'>
        <div style='margin-left: 20px;'>
          <table cellspacing='0' cellpadding='0' style=
          'cursor: pointer; width: 100%;'>
            <tr>
              <td style='width: 10px;'>
                <img src='images/RewardsGreen.gif'>
              </td>
              <td valign='middle' align='left' style='cursor: default;'
              ondblclick='doNothing;' onclick=
              'listOnClick(5,"WHI.E_2075");'
              onmouseover=
              'highlightListItem("ev_2075_321", true); showInfoBubble(5,"WHI.E_2075","ev_2075_321","ev_cond_eventsContainer");'
              onmouseout=
              'highlightListItem("ev_2075_321", false, 1); hideInfoBubble();'>
              <span style='margin-left: 3px;'>Card Registration</span>
              </td>
            </tr>
          </table>
        </div>
      </td>
    </tr>

你认为如果我将其减少为一个带有背景图像的列表项,渲染时间会缩短吗?目前它只是在Firefox和IE中崩溃了。我注释掉了事件处理程序,只看到了大约30%的速度提高,我正在考虑让它们基于类,并通过jQuery选择器绑定处理程序。我还有别的方法可以加快速度吗?或者您认为我需要一些分页功能。

您最好的选择是引入分页功能。假设每页有100个项目,您的页面加载时间将减少1/20的总数据量。内容的可读性也将大大提高。

最好的办法是引入分页。假设每页有100个项目,您的页面加载时间将减少1/20的总数据量。内容的可读性也将大大提高

分页将获得最佳性能。 将内联CSS移动到外部-为什么要为每一行下载该部分? 将事件处理程序移动到外部-再次保存一些字节。 分页将获得最佳性能。 将内联CSS移动到外部-为什么要为每一行下载该部分? 将事件处理程序移动到外部-再次保存一些字节。
2500行太多了。您可能需要考虑一个分页选项来简化这一点,并仅限制页面上DOM的数量。有些人考虑寻呼原油,但相对容易实施。 另一个选项是编写一个自定义表js代码,该代码只呈现当前查看的内容,并在两侧添加一个缓冲区。但这非常复杂

第三种选择是使用第三方网格。那就是我要做的


请记住,浏览器非常擅长innerHTML替换。因此,如果您要单独追加2500行,则通过批处理内部html操作可能会加快速度。

2500行太多了。您可能需要考虑一个分页选项来简化这一点,并仅限制页面上DOM的数量。有些人考虑寻呼原油,但相对容易实施。 另一个选项是编写一个自定义表js代码,该代码只呈现当前查看的内容,并在两侧添加一个缓冲区。但这非常复杂

第三种选择是使用第三方网格。那就是我要做的


请记住,浏览器非常擅长innerHTML替换。因此,如果您单独追加2500行,您可能可以通过批处理内部html操作来提高速度。

虽然2500项确实很多,但我认为这还不足以保证浏览器崩溃,特别是在Firefox中

尝试下面的优化,正如我上面的其他人所指出的:

减少HTML标记的数量 根据我的经验,内联事件处理程序通常比jQuery绑定更快。在任何情况下,将它们取出并创建一个计时器来为您绑定事件,而不是在单独的线程上运行计时器到UI。如果您想变得更加棘手,甚至可以创建分页,并且只在用户在页面之间滚动时绑定单击处理程序。 放弃那个内联图像。这些总是会导致页面加载变慢。CSS类速度更快。 但最终,对您来说,最好的解决方案是:

引入分页或分页; 引入永无止境的滚动类型功能,如谷歌阅读器
虽然2500个条目确实很多,但我认为这还不足以保证浏览器崩溃,尤其是在Firefox中

尝试下面的优化,正如我上面的其他人所指出的:

减少HTML标记的数量 根据我的经验,内联事件处理程序通常比jQuery绑定更快。在任何情况下,将它们取出并创建一个计时器来为您绑定事件,而不是在单独的线程上运行计时器到UI。如果您想变得更加棘手,甚至可以创建分页,并且只在用户在页面之间滚动时绑定单击处理程序。 放弃那个内联图像。这些总是会导致页面加载变慢。CSS类速度更快。 但最终,对您来说,最好的解决方案是:

引入分页或分页; 引入永无止境的滚动类型功能,如谷歌阅读器
分页的替代方法是延迟加载或按需加载。开始时只需加载表的一小部分,当用户滚动到页面底部时,加载另一小部分,依此类推


另外,去掉valign/align/style等内联属性,并将所有这些内容卸载到外部CSS中。

分页的替代方法是延迟加载或按需加载。开始时只需加载表的一小部分,当用户滚动到页面底部时,加载另一小部分,依此类推

另外,去掉像valign/align/style这样的内联属性,并卸载所有这些属性 t插入外部CSS。

使用–它是专门为处理大型数据集而设计的。我用它来记录数十万条。SlickGrid通过仅为实际查看的行呈现DOM元素来实现这一级别的性能。向下滚动时,旧的行会随着新行的创建而被销毁,因此在给定的时间内,DOM中的元素实际数量永远不会超过最小数量

警告:如果要将事件处理程序绑定到网格中的元素,请小心。Slick绕过jQuery并自行设置innerHTML,这将泄漏通过jQuery绑定的任何处理程序

从用户体验的角度来看,我真的更喜欢SlickGrid的虚拟滚动方法。我讨厌处理分页数据。

使用–它是专门为处理大型数据集而设计的。我用它来记录数十万条。SlickGrid通过仅为实际查看的行呈现DOM元素来实现这一级别的性能。向下滚动时,旧的行会随着新行的创建而被销毁,因此在给定的时间内,DOM中的元素实际数量永远不会超过最小数量

警告:如果要将事件处理程序绑定到网格中的元素,请小心。Slick绕过jQuery并自行设置innerHTML,这将泄漏通过jQuery绑定的任何处理程序


从用户体验的角度来看,我真的更喜欢SlickGrid的虚拟滚动方法。我讨厌处理分页数据。

如果分页不是一个选项,您应该尝试:

活动代表团http://davidwalsh.name/event-delegate. 这将允许您为每个事件类型注册一个侦听器。 “表格布局:固定”在表格样式上http://www.w3schools.com/css/pr_tab_table-layout.asp. 这可以大大缩短大型表的渲染时间。
如果分页不是一个选项,您应该尝试:

活动代表团http://davidwalsh.name/event-delegate. 这将允许您为每个事件类型注册一个侦听器。 “表格布局:固定”在表格样式上http://www.w3schools.com/css/pr_tab_table-layout.asp. 这可以大大缩短大型表的渲染时间。
分页或某种形式的动态获取列表的其余部分以便初始加载速度更快是一种选择吗?还可以考虑使用jQuery客户端模板来生成所有的HTML客户端,但我无法想象使用JS生成这么多HTML会比直接渲染它快得多。是分页还是列表的其余部分的动态获取,所以初始负载看起来更快一个选项?还可以考虑使用jQuery客户端模板来生成所有的HTML客户端,但我无法想象使用JS生成这样多的HTML将比直接渲染它快得多。分页或一些华丽的渐进加载:分页或一些花式累进加载: