From 20f3cb3e2028e455b49a4d1947ac8f02186363af Mon Sep 17 00:00:00 2001 From: liuyang Date: Wed, 26 Aug 2020 14:18:25 +0800 Subject: [PATCH] fix(array unique very slow): fix it --- src/controllers/handler.js | 29 ++++++++++++++++++++++++++--- src/store/index.js | 3 +++ src/utils/util.js | 13 +++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/controllers/handler.js b/src/controllers/handler.js index f3182ed..2f9291d 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -108,7 +108,7 @@ export default function luckysheetHandler() { const _locale = locale(); const locale_drag = _locale.drag; const locale_info = _locale.info; - let prev + let prev, mousewheelArrayUniqueTimeout; $("#luckysheet-grid-window-1").mousewheel(function (event, delta) { let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop(); @@ -123,8 +123,26 @@ export default function luckysheetHandler() { visibledatacolumn_c = luckysheetFreezen.freezenverticaldata[3]; } - visibledatacolumn_c = ArrayUnique(visibledatacolumn_c); - visibledatarow_c = ArrayUnique(visibledatarow_c); + clearTimeout(mousewheelArrayUniqueTimeout); + + if(Store.visibledatacolumn_unique!=null){ + visibledatacolumn_c = Store.visibledatacolumn_unique; + } + else{ + visibledatacolumn_c = ArrayUnique(visibledatacolumn_c); + Store.visibledatacolumn_unique = visibledatacolumn_c; + } + + if(Store.visibledatarow_unique!=null){ + visibledatarow_c = Store.visibledatarow_unique; + } + else{ + visibledatarow_c = ArrayUnique(visibledatarow_c); + Store.visibledatarow_unique = visibledatarow_c; + } + + // visibledatacolumn_c = ArrayUnique(visibledatacolumn_c); + // visibledatarow_c = ArrayUnique(visibledatarow_c); let col_st = luckysheet_searcharray(visibledatacolumn_c, scrollLeft); let row_st = luckysheet_searcharray(visibledatarow_c, scrollTop); @@ -179,6 +197,11 @@ export default function luckysheetHandler() { $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft); } + + mousewheelArrayUniqueTimeout = setTimeout(() => { + Store.visibledatacolumn_unique = null; + Store.visibledatarow_unique = null; + }, 200); }); $("#luckysheet-scrollbar-x").scroll(function(){ diff --git a/src/store/index.js b/src/store/index.js index 06b092c..20ec8fc 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -118,6 +118,9 @@ const Store = { measureTextCacheTimeOut:null, zoomRatio:1, + + visibledatacolumn_unique:null, + visibledatarow_unique:null, } export default Store; \ No newline at end of file diff --git a/src/utils/util.js b/src/utils/util.js index 90f294b..7862bcd 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -278,17 +278,18 @@ function getByteLen(val) { //数组去重 function ArrayUnique(dataArr) { - let arr = []; - + let result = []; + let obj = {}; if (dataArr.length > 0) { for (let i = 0; i < dataArr.length; i++) { - if (arr.indexOf(dataArr[i]) == -1) { - arr.push(dataArr[i]); + let item = dataArr[i]; + if (!obj[item]) { + result.push(item); + obj[item] = 1; } } } - - return arr; + return result } //获取字体配置