此問題適用於瞭解MapBox GL JS內部結構的人。MapBox GL JS性能差異的原因
我正在使用MapBox GL JS渲染多達40,000個多邊形的地理地圖,每個多邊形都根據該多邊形的「所有者」進行着色。每個擁有者通常有多個多邊形,並且每個多邊形的「擁有者」可能隨時間而改變。業主人數可以從1人到1000人左右。我遇到性能問題(這取決於我如何處理它),所以我嘗試了幾種不同的策略。
- 將數據驅動樣式用於「填充顏色」,其中有單個源和單個圖層。我已經嘗試了多邊形ID和「所有者」ID作爲數據驅動樣式的類別。
- 使用過濾圖層,其中每個「所有者」具有單個來源和單獨的圖層。再次,我已經嘗試了多邊形ID和「所有者」ID作爲篩選條件。
- 爲每個「所有者」使用單獨的來源和圖層。
選項三具有最佳的繪圖速度。當我縮放和平移時,圖層渲染速度非常快。但是每當我更改圖層的所有者時,我必須調用setData,並且setData會泄漏內存,所以最終會導致頁面崩潰。這個問題2607被關閉爲不可操作,所以我不期待解決這個問題。
選項一和二與初始縮放畫好,但是當我放大時,他們很慢重新繪製瓷磚。我看着鋸齒狀的低細節瓦片,直到20-30秒後呈現出來。請注意,如果我使用「所有者」ID而不是「多邊形」ID,當「所有者」更改會導致內存泄漏時,我仍然需要調用setData。如果我使用多邊形ID,則只需在「所有者」更改時更新圖層過濾器或填充顏色類別。但是,如果我使用「多邊形」ID,我沒有得到明顯的性能差異,所以我認爲沒關係。
所以我的問題是爲什麼選項三要快得多,當我放大渲染?這是否與分配到繪圖的工人數量有關?在選項一和二中,有一個單一來源,所以這意味着圖紙只使用一名工人?而在選項三中,每個「所有者」都有一個單獨的源,所以我有多個工作人員在進行繪圖?
看起來與選項3相關的內存泄漏在v0.29.0中已修復。 – jasonpepper