首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

EasyUI Combobox 2000+ 資料卡頓:異步載入與虛擬滾動優化方案

     編輯:程式設計疑難解答

現象:綁定 2000+ 選項,搜尋/下拉極度卡頓

EasyUI Combobox 預設一次性渲染所有 <option>,DOM 節點過多導致瀏覽器重排/重繪效能崩潰。

優化策略對比

方案原理適用場景實作難度
異步分頁載入輸入關鍵字時 AJAX 請求,後端分頁回傳資料量大、需搜尋低
虛擬滾動只渲染可視區域選項,滾動動態替換資料量極大、不需搜尋高 (需改寫或插件)
本地過濾 + 延遲渲染一次載入 JSON,輸入時過濾,分批 append DOM資料量中等、離線可用中

推薦:異步遠端搜尋(最省力、效果佳)


$('#cc').combobox({
    url: '/api/search-items',     // 後端介面
    valueField: 'id',
    textField: 'name',
    mode: 'remote',               // 關鍵:啟用遠端模式
    method: 'get',
    loadFilter: function(data) {
        return data.rows;         // 適配後端 {total: 100, rows: [...]}
    }
});

後端只需實作:


// GET /api/search-items?q=關鍵字&page=1&rows=50
// 回傳 { total: 1234, rows: [{id:1, name:'xxx'}, ...] }

進階:本地資料分批渲染(無後端配合時)


var allData = [...]; // 2000+ 筆 JSON
var batchSize = 200;
var rendered = 0;

$('#cc').combobox({
    data: [], // 先空
    onShowPanel: function() {
        if (rendered < allData.length) {
            var batch = allData.slice(rendered, rendered + batchSize);
            $(this).combobox('loadData', $(this).combobox('getData').concat(batch));
            rendered += batchSize;
        }
    },
    filter: function(q, row) {
        return row.name.indexOf(q) >= 0; // 本地過濾
    }
});

核心原則

  • 不要一次性塞入 DOM 2000+ 節點。
  • mode: 'remote' 讓 EasyUI 自動處理請求、顯示載入中、分頁。
  • 若必須本地,採用虛擬滾動插件(如 combobox-virtual-scroll)或分批追加。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved