IE8渲染性能对敲除模板的绑定

时间:2013-10-29 10:32:22

标签: jquery knockout.js internet-explorer-8

我有一个包含100多个项目列表的表格,每个项目有3个下拉列表,其中包含100多个项目的列表。

当用户点击从MVC应用程序获取json数据的搜索按钮时,我正在使用以下方法动态激活绑定。

问题是IE8比Chrome渲染要多20倍

我在我的代码中遵循了以下ko提示:

  • 在底层数组上使用valueHasMutated来减少可观察的命中数
  • 使用显示所需的单个项目加载下拉列表,仅在用户时加载 鼠标悬停在下载中,加载了所需的所有项目 select
  • 正确处理了jquery on事件

我必须以IE8为目标,因为它是一个内部应用程序,并继续使用KO为我的应用程序提出问题,因为IE8& KO PERFORMANCE。

cshtml代码:

...在html表格中我有下面的td用于显示下拉列表。

           <td>
                <span data-bind="attr: { id: 'type-ddpl-holder-' + RowUniqueNo() }">
                <select data-ddpl-loaded="false" class="type-ddpl">                    
                    <option data-bind="html: TypeName() ? TypeName() : '--Please select--''" selected></option>
                </select>                    
                </span>                                        
            </td>

... 我需要使用RowUniqueNo()替换ko template绑定的唯一dom元素ID。

意图是不使用ko选项绑定,使用json中的项目加载下拉列表,即只下载一个项目。

以下ko代码位于ajax成功处理程序中,该处理程序呈现上述模板。

     ko.applyBindingsToNode(document.getElementById('place-holder'),
                 { template: { name: 'def-edit-tmpl', data: vm} });
                    onDdpl();
                    var element = document.getElementById('place-holder');
                    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {                       
                        offDdpl();
                    });
  • onDdpl函数将挂钩到'hover'事件的jquery on事件,该事件将使用ko模板绑定替换初始绑定select控件并使用options绑定。< / LI>
  • offDdpl函数将用于处理on事件。
下面的

on事件

上使用的模板
<script type="text/html" id="type-ddpl-tmpl">
    <select class="fl tb120w" data-ddpl-loaded="true" data-bind="options: $parent.typeList, optionsText: 'Value', optionsValue:'Key', value:$data.TypeId">                
    </select>    

对于使用此方法渲染100个项目,IE8需要10秒以上而Chrome需要不到一秒钟。在10多秒内,IE8没有响应。我们非常感谢任何提高性能的帮助/提示。

0 个答案:

没有答案