Leaflet: 多くのマーカーでパフォーマンスが低下する

作成日 2018年08月26日  ·  3コメント  ·  ソース: Leaflet/Leaflet

  • [x]助けを求めるのではなく、バグを報告しています。 「LeafletでXを実行するにはどうすればよいですか?」などの質問をサポートします。 閉鎖されます(質問にはStack Overflowまたはgis.stackexchange.comを使用してください)
  • [x]動作が文書化され、期待されていることを確認するために
  • [x]これはリーフレットコードの問題であり、自分のコードや使用しているフレームワーク(Cordova、Ionic、Angular、React…)の問題ではないと確信しています。
  • [x]問題を検索して、まだ報告されていないことを確認しました

再現する方法

  • 私が使用しているリーフレットバージョン:1.3.4
  • 使用しているブラウザ(バージョンあり):Chromium 68
  • 私が使用しているOS /プラットフォーム(バージョンあり):Debian Buster
  • マップに多くのマーカーを配置します(例:1000)
  • 地図を移動またはズームする

私が期待している行動と私が見ている行動

移動の開始が遅れ、CPUコアを100%消費します。 ズームについても同じです。 getBoundingClientRectによって引き起こされる遅延si:

image

問題を再現する最小限の例

  • [x]この例は可能な限り単純です
  • [x]この例はサードパーティのコードに依存していません

https://codepen.io/zdila/pen/YOwoEd

最も参考になるコメント

多くのマーカーを描画する必要がある場合は、Leaflet.PixiOverlayプラグインを試すことができ
(ちなみに私はプラグインの作者です)

全てのコメント3件

こんにちは@zdila

残念ながら、これはリーフレットの既知の制限です。
https://stackoverflow.com/questions/43015854/large-dataset-of-markers-or-dots-in-leaflet/43019740#43019740を参照して

リーフレットは、標準のマーカーに通常のDOM要素を使用します。
この単純さには欠点があります。ブラウザは何千ものブラウザを処理するのに苦労します。

一般的な使用法(いくつかのマーカー)の場合、単純さが有利です。

より複雑なユースケースの場合、回避策はキャンバスに切り替えることです。
サークルマーカーよりも優れたものが必要な場合は、他のキャンバスベースのマーカーを提供するプラグインがいくつかあるはずです。

多くのマーカーを描画する必要がある場合は、Leaflet.PixiOverlayプラグインを試すことができ
(ちなみに私はプラグインの作者です)

@ghybs説明ありがとうgetBoundingClientRect呼び出すことが本当に必要なのか、それがLeafletで何に使用されているのか疑問に思います。

@manubb情報をありがとう。 地図上の画像の位置を表示するために、すでにキャンバスを使用しています: https48.821333 /

このページは役に立ちましたか?
0 / 5 - 0 評価