お世話になっております。
今回はGeolocation APIのwatchPosition()
についてご質問させていただきます。
現在、複数の端末で位置情報を取得、サーバにPOSTして、各端末の位置をマップ上に表示するというアプリを作っております。
ローカルで試したところ、毎秒ものすごい勢いでコールバックが動作していることがわかりました。
MDNを確認し、位置情報を取得するたびに呼ぶということなので、正しい動作ではあるとおもうのですが…
位置情報をPOSTする都合でコールバックにAjaxを仕込んでいるので、
こんな頻度でサーバにアクセスしていてはとても非効率的ですし、サーバの負荷や端末の電力消費も気になります。
運用上では5秒~10秒に一度の更新でも事足りるので、位置情報取得のたびではなく、一定の間隔を空けてPOSTさせたいと思っています。
ちなみに、オプションのmaximumAge
に10~1000の数値を入れていろいろ試しましたが、特に効果はありませんでした。
この場合、どのような対処を行えば頻度を減らすことができるでしょうか?
ご回答のほど、よろしくおねがいいたします!
// 追記
具体的には、jQueryを利用しているのでjQuery throttle / debounceを利用しました。
以下修正したコードです。
JavaScriot
1// プログラムのソース 2id = navigator.geolocation.watchPosition( 3 $.throttle(3000, updateLocation), // 3秒毎にAPIを叩く 4 failedGeolocation, { 5 enableHighAccuracy: true, 6 maximumAge: 1000 7 } 8); 9 10const updateLocation = position => { 11 $.ajax({ 12 url : 'APIのURL', 13 type : 'POST', 14 cache: false, 15 data : { 16 id: '端末のID', 17 latitude: position.coords.latitude, 18 longitude: position.coords.longitude 19 } 20 }).done(response => { 21 // 成功時の処理 22 }).fail(response => { 23 // 失敗時の処理 24 }); 25}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/27 07:50