制表符垂直滚动缓慢而生涩



我正在使用带有大量行和列的制表符。垂直滚动在任何浏览器中都很慢,并且:在Chrome中,它非常生涩 - 即停下来移动,停下来移动。在Firefox中,它会闪烁 - 即全表视图闪烁白色 - 灰色,然后填充内容。我无法在屏幕截图中观看这种行为,但这是表承包商:

    var table = new Tabulator("#report-table", {
        ajaxURL:"getReportsFromDB.jsp",   // ajax URL
        ajaxParams:{'<%= DEVICE_ID_PARAM %>' : '<%= device_id %>',
                    '<%= DEVICE_ID_ARRAY_PARAM %>' : '<%= idArrayJSON %>',
                    '<%= DEVICE_NAME_PARAM %>' : '<%= device_name %>',
                    '<%= NUM_RECORDS_PARAM %>' : '<%= num_records %>',
                    '<%= WINDOW_NAME_PARAM %>' : '<%= window_name %>',
                    '<%= FROM_SELECT_REPORT_PARAM %>' : '<%= from_select_report %>',
                    '<%= START_DATE_PARAM %>' : '<%= start_date %>',
                    '<%= START_TIME_PARAM %>' : '<%= start_time %>',
                    '<%= STOP_DATE_PARAM %>' : '<%= stop_date %>',
                    '<%= STOP_TIME_PARAM %>' : '<%= stop_time %>',
                    '<%= NUM_WEEKS_PARAM %>' : '<%= num_weeks %>',
                    '<%= NUM_DAYS_PARAM %>' : '<%= num_days %>',
                    '<%= NUM_HOURS_PARAM %>' : '<%= num_hours %>',
                    '<%= EVENT_ARRAY_PARAM %>' : '<%= eventArrayJSON %>',
                    '<%= REPORTS_FROM_FILE_PARAM %>' : '<%= reports_from_file %>',
                    '<%= INSTALLER_PARAM %>' : '<%= installer %>',
                    'hiddenSelectDevice' : '<%= hiddenSelectDevice %>',
                    '<%= MODEL_PARAM %>' : '<%= device_model %>',
                    '<%= PREDEFINED_REPORT_INDEX_PARAM %>' : <%= predefined_report_index %>,
                    'first_report' : '<%= first_report %>',
                    '<%= ORDER_ID_PARAM %>' : '<%= order_id %>'}, //ajax parameters
        ajaxResponse:function(url, params, response){
            if (response.ERROR != null) {
                var messageDiv = document.getElementById("messageModalBody");
                messageDiv.innerHTML = "<p><mark class="red">" + response.ERROR + "</mark></p>";
                message_modal.style.display = "block";
                console.log("response = " + response.ERROR);
            }
            return response; //return the tableData property of a response json object
        },
        ajaxError:function(xhr, textStatus, errorThrown){
            var messageDiv = document.getElementById("messageModalBody");
            messageDiv.innerHTML = "<p><mark class="red">" + errorThrown + "</mark></p>";
            message_modal.style.display = "block";
        },
        // height:"100%",
        height:"800px",
        layout:"fitDataFill", //"fitColumns",
        selectable:true, //make rows selectable
        selectableRangeMode:"click",  // for multiple rows selection via shift button
        //selectableRollingSelection:true, // enable rolling selection for rows (default)
        selectablePersistence:true, // enable persistence of selection when view changes (Scroll) (default)
        persistentLayout: true,  // Enable layout persistence
        persistentSort: true,   // Enable sort persistence
        persistentFilter:true, //Enable filter persistence
        persistenceID:"examplePersistence",
        persistenceMode:"cookie", //store persistence information in a cookie
        tooltips:true,
        progressiveRender: true,
        progressiveRenderSize: 5,
        progressiveRenderMargin: 100,
        rowSelectionChanged:function(data, rows){
            selectedRows = rows;
            if ((rows !== undefined) && (rows !== null) && (rows.length > 0)) {
                console.log("rowSelectionChanged: Selected " + rows.length + " rows");
            }
        },
        columns:[
            {title:"<%= COUNTER %>", field:"id", sortable:false, /*cellClick:counterClick,*/ tooltip:"Click for selecting row for map"},
            {title:"<%= ID %>", field:"deviceID", sorter:"alphanum", width:"100", headerFilter:"input", cellClick:deviceIDClick, tooltip:"Click for further Device Options"},
            {title:"<%= EVENT %>", field:"eventType", sorter:"alphanum", headerFilter:"input", tooltip:false},
            {title:"<%= RECEIVE_TIME %>", field:"dateReceived", formatter:"datetime",
                formatterParams:{inputFormat:"MM/DD/YYYY hh:mm:ss", outputFormat:"YYYY/MM/DD hh:mm:ss", invalidPlaceholder:"Invalid Date", tooltip:false}, /*headerFilter:dateFilterEditor, headerFilterFunc:dateFilterFunction*/},
            {title:"<%= SEQ %>", field:"sequenceNumStr", sorter:"number", headerFilter:"input", formatter:sqlNumberFormatter, tooltip:false},
            {title:"<%= RTC_TIME %>", field:"dateRT", formatter:"datetime", formatterParams:{inputFormat:"MM/DD/YYYY hh:mm:ss", outputFormat:"YYYY/MM/DD hh:mm:ss", invalidPlaceholder:"Invalid Date"}, tooltip:false},
            {title:"<%= GPS_TIME %>", field:"dateGPS", formatter:gpsDateFormatter, tooltip:false},
            {title:"<%= GPS_STATUS %>", field:"gpsStatus", sorter:"string", headerFilter:"input", formatter:gspInfoFormatter, tooltip:false},
            {title:"<%= LAT %>", field:"latitudeStr", sorter:"number", headerFilter:"input", formatter:latitudeFormatter, cellClick:latLonClick, tooltip:"Click for highlighting the corresponding marker on the Map"},
            {title:"<%= LON %>", field:"longitudeStr", sorter:"number", headerFilter:"input", formatter:longitudeFormatter, cellClick:latLonClick, tooltip:"Click for highlighting the corresponding marker on the Map"},
            {title:"<%= MAIN_V %>", field:"mainPowerVStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= AUX_V %>", field:"auxPowerVStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= BACKUP_V %>", field:"backupPowerVStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= CHARGING_V %>", field:"chargingPowerVStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= DEVICE_STATUS %>", field:"deviceStatusStr", sortable:false, tooltip:false},
            {title:"<%= ALT %>", field:"altitudeStr", sorter:"number", headerFilter:"input", formatter:altitudeFormatter, tooltip:false},
            {title:"<%= SPEED %>", field:"speedMPHStr", sorter:"number", headerFilter:"input", formatter:gspInfoFormatter, tooltip:false},
            {title:"<%= HEADING %>", field:"headingStr", sorter:"number", headerFilter:"input", formatter:headingFormatter, tooltip:false},
            {title:"<%= NUM_SATS %>", field:"numSatsStr", sorter:"number", headerFilter:"input", formatter:gspInfoFormatter, tooltip:false},
            {title:"<%= HDOP %>", field:"hdopStr", sorter:"number", headerFilter:"input", formatter:gspInfoFormatter, tooltip:false},
            {title:"<%= ODOMETER %>", field:"odometerMilesStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ENG_HOURS %>", field:"engineHoursStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= FUEL_LEVEL %>", field:"fuelLevelPercentStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ODT_SINCE_MIL %>", field:"odtSinceMILMilesStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ODT_SINCE_DTC_CLEAR %>", field:"odtSinceDTCClearMilesStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_INFO %>", field:"accelerometerInfo", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_X %>", field:"accelerometerXmm_s2Str", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_Y %>", field:"accelerometerYmm_s2Str", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_Z %>", field:"accelerometerZmm_s2Str", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_CALIB_X %>", field:"accelerometerXCalibStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_CALIB_Y %>", field:"accelerometerYCalibStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ACC_CALIB_Z %>", field:"accelerometerZCalibStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ORIENT_INFO %>", field:"orientInfo", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ORIENT_X %>", field:"orientXStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ORIENT_Y %>", field:"orientYStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= ORIENT_Z %>", field:"orientZStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= INTERN_TEMP %>", field:"internalTemperatureStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= AMBIENT_TEMP %>", field:"ambientTemperatureStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= RSSI %>", field:"RSSIStr", sorter:"number", headerFilter:"input", formatter:RSSIFormatter, tooltip:false},
            {title:"<%= SERVICE_TYPE %>", field:"serviceType", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ROAMING %>", field:"roaming", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= COUNTRY %>", field:"country", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= NETWORK %>", field:"network", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= TOWER_ID %>", field:"towerID", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= CENTROID_LAT %>", field:"centroidLatStr", sorter:"number", headerFilter:"input", formatter:centroidLatFormatter, tooltip:false},
            {title:"<%= CENTROID_LON %>", field:"centroidLonStr", sorter:"number", headerFilter:"input", formatter:centroidLonFormatter, tooltip:false},
            {title:"<%= CELLULAT_BAND %>", field:"band", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= RXTXEC %>", field:"RxTxEc", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= VIN %>", field:"vinStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ENG_LIGHT %>", field:"engLightStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ENG_CODES %>", field:"engCodesStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= APP_VER %>", field:"appVersionStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= OS_VER %>", field:"osVersionStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= HW_VER %>", field:"hwVersionStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= HW_REV %>", field:"hwRevisionStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= IO_VER %>", field:"ioVersionStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= EXTENDER_VER %>", field:"extenderVersionStr", sorter:"string", headerFilter:"input"},
            {title:"<%= CONFIG_CHANGED %>", field:"deviceConfigChangedStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= CONFIG %>", field:"deviceConfigStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= CONFIG_DESC %>", field:"configurationDescStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= CARGO_TIME %>", field:"cargoTimeStr", formatter:"datetime", formatterParams:{inputFormat:"MM/DD/YYYY hh:mm:ss", outputFormat:"YYYY/MM/DD hh:mm:ss", invalidPlaceholder:"Invalid Date"}, tooltip:false},
            {title:"<%= CARGO_INFO %>", field:"cargoSensorInfoStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_PORT_TYPE %>", field:"peripheralPortTypeStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_PORT_NUM %>", field:"peripheralPortNumStr", sorter:"number", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_DRIVER %>", field:"peripheralDriverStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_DESC %>", field:"peripheralDescStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_MODEL %>", field:"peripheralModelStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= PERIPH_REV %>", field:"peripheralRevStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= GPIO %>", field:"GPIOInfoStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= TFTP_STATUS %>", field:"TFTPStatusStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= LIGHT_SENTRY %>", field:"lightSentry", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ABS_INFO %>", field:"ABS", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= ABS_ODOMETER %>", field:"ABSOdometerStr", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= BRAKE_STROKE %>", field:"brakeStroke", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= DOOR %>", field:"door", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= CHASSIS_MATING %>", field:"chassisMating", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= TIRES %>", field:"tires", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= TIRES_INFLATOR %>", field:"tiresInflator", sorter:"string", headerFilter:"input", tooltip:false},
            {title:"<%= TAG %>", field:"ACKRetriesNum", sorter:"number", headerFilter:"input", formatter:ACKFormatter, tooltip:"Number of device message send retries"},
            {title:"<%= IP %>", field:"deviceIP", sorter:"string", headerFilter:"input", tooltip:deviceIPTooltip},
            {title:"<%= RAW %>", field:"rawReport", sortable:false}
        ],
    });

我能做什么?

作为制表符4.8 (今天发布)您现在可以启用一个水平虚拟DOM来处理具有大量列的表:

var table = new Tabulator("#example-table", {
    virtualDomHoz:true, //enable horizontal virtual DOM
});

有关如何使用该功能的完整详细信息,以及在水平虚拟DOM文档中找到500列的示例

我在37列x 7000行的数据表中遇到了相同的问题,只有字符串。我还没有(尚未)自定义格式化器,但使用多(3) - 级分组。

我使用的是最新的制表仪版本4.2和Chrome 72.0(64bit)。

我使用了Chrome Profiler:为了管理滚动条的大跳跃,需要超过2秒的时间才能完成大部分时间的渲染时间,以深入递归召集。

我尝试在数字字段上设置分组,但没有任何区别。

最新更新