近期做1功能,Gis地圖 基於百度地圖api , 會遇到的問題的,
如后台接口給的數據很多,大幾千上萬的,如果拿了數據直接渲染dom ,這滋味爽爽的。
再遇上 客戶端瀏覽器悲催的,這卡頓就來了...
前端大量數據渲染的一個弊端。
想到的處理方式:
1. 數據的去重合並
基於當前可是屏幕范圍,拿到baidu對應的 經維度區域,baidu api 里有 getBounds 和 getZoom 方法
var viewArea = map.getBounds(); // 可視區域 var mapScale = map.getZoom(); // 地圖放大縮小比例
對應后台接口返回數據,要拿基於這個可是區域的維度范圍進行返回,
如果回來有萬以上,在頁面上展示這么多也沒實際意義,
前端需要自己進行數據過濾,基於放大縮小比例, 屏幕上返回數據偏差不大的要進行去重 (這個算法就先不細說了)
最先想到的是 2組數據循環對比去重,怎么看都不太對啊,這要數據多了??? 不用想,絕對要掛的節奏....
-------------------------------
和架構師聊了,給了個建議,效率上好很多, 看下圖:

給的思路:
1. 基於區域畫格子,算出格子對應的經緯度,構造1個二維數組的數據;
2. 拿到后台返回的數據,循環時,算出在二位數組中對應的位置,如狀態為無就認為該條數據有效,更改對應二位數組數據的狀態, 如已經有狀態了數量丟棄,對應的狀態數量+1;
處理出有效的數據......扯的有點遠了
2. 數據的分片渲染展示
如果有效數據還是很多,假如有大幾千幾萬的,一次展示全也是苦哈哈的;
處理方式其實也不復雜, 把數據照一定數量進行分塊,定時異步展示出;
如有6000條數據, 可照1000條拆成6組, 先拿1組展示,循環定時展示出其他....
思路基本上是這樣
更多細節也可參考看到的一文章, 里面有個保持數據插入的次序不錯,可作參考
JavaScript一次性展示幾萬條數據實例代碼: http://www.php.cn/js-tutorial-360591.html
