-2

我的多选组合框遇到了一些性能问题。组合框填充了大约 2000 个条目,激活后,渲染/展开大约需要 2 秒。

示例:https ://fiddle.sencha.com/#fiddle/3bfv&view/editor

有人知道如何提高性能或更好地使用此控件吗?

问候乔纳森

4

2 回答 2

1

不幸的是,显示的列表不能infinite使其快速显示。

如果您有大量条目,我建议将组合框字段与远程加载一起使用。

现在,如果您查看为选取器生成的 DOM 节点,可能会有一些无用的东西。

对于每个项目,您将获得:

<div id="ext-simplelistitem-1" data-componentid="ext-simplelistitem-1" class="x-listitem x-component x-boundlistitem x-layout-auto-item x-first" data-xid="7" data-viewid="ext-boundlist-1" data-recordindex="0" data-recordid="1">
    <div class="x-body-el x-listitem-body-el x-component-body-el" id="ext-element-24">
        <div class="x-tool-dock x-listitem-tool-dock x-component-tool-dock" id="ext-element-28">
            <div class="x-tool-zone x-start" id="ext-element-27">
                <div id="ext-tool-1" data-componentid="ext-tool-1" class="x-tool x-component x-disabled x-passive x-selected-icon x-tool-listitem x-component-listitem x-start" data-xid="8">
                    <div class="x-icon-el x-font-icon x-fa fa-check" id="ext-element-26"></div>
                </div>
            </div>
            <div class="x-inner-el x-listitem-inner-el x-component-inner-el x-tool-anchor" id="ext-element-25">
                <div class="x-innerhtml" id="ext-element-29"><span class="x-list-label">Alabama</span></div>
            </div>
        </div>
    </div>
</div>

您可以使用 Select 字段的floatedPicker(以及edgePicker小型设备)配置(另请参阅picker)。

可以制作更简单的 DOM 节点:

itemTpl: '{name}', // removes 2000 spans
floatedPicker: {
  itemConfig: {
    xtype: 'component' // removes 12.000 divs
  }
}

肯定有更多的优化可以减少显示时间。例如,第一次渲染会持续几秒钟。可能是模型创建、收集/存储操作、触发的事件太多……

于 2021-01-27T17:58:48.450 回答
0

有了这么多的选择,它会让你的代码在前端膨胀。我会尝试将自动选择与组合框挂钩。我为邮政编码选择框做了类似的事情。您无需列出美国的 45K 邮政编码,而是让用户自己减少选择。

          {
                xtype: 'combobox',
                id: 'zipCodeComboId',
                label: 'select zip code',
                queryMode: 'remote',
                displayField: 'zipCode',
                valueField: 'zipCode',
                value: '000',
                height:50,
                forceSelection: true,
                typeAhead: false,
                minChars: 3,
                store: {
                    type: 'zipCodes'
                }
            }

你的商店可能看起来像:

Ext.define('yourapp.store.ZipCodes', {
extend: 'Ext.data.Store',

alias: 'store.zipCodes',

model: 'yourapp.model.ZipCodes',
storeId: 'zipCodesStoreId',
autoLoad: false,
idProperty: 'zipCode',
fields: [
    'zipCode', 'city', 'state', 'updatedDt'
],
proxy: {
    type: 'ajax',
    url: '/searchYourZipCodes',
    reader: {
        type: 'json',
        rootProperty: 'values'
    }
},

});

于 2021-01-29T22:57:00.167 回答