По сути, на мой взгляд, для вашего случая лучше всего использовать событие window.onload. Из этого означало, что вы загружаете геолокацию после всего, что в документе загружено. Это потому, что вы можете позволить посетителю просматривать страницу во время инициализации GPS.
Для создания истинного потока вы можете использовать Worker, но Worker не имеет доступа к объекту "геолокации" объекта "навигатор". Но это может измениться в будущем.
асинхронные функции могут работать в вашем случае, так как они не блокируют основной поток. Тем не менее, я все еще думаю, что лучше всего запускать getCurrentPosition () после загрузки страницы.
setTimeOut (), вероятно, не лучший для вас. Хотя setTimeOut () может задержать выполнение кода и не блокирует основной поток при его первом вызове, он все равно будет блокировать основной поток позже в любом случае, когда наступит его очередь.
Несколько ссылок для вас:
Веб-работники - как они работают? - В настоящее время это не сработает для вашего случая, но кто знает о будущем.
Как сформулироватьразница между асинхронным и параллельным программированием? - асинхронные функции не являются истинным параллелизмом, но могут работать в вашем случае, поскольку не блокируют основной поток.
Как работают setInterval и setTimeout? - setTimeOut (), вероятно, не подходит для вашего случая использования, но стоит упомянуть.
https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition - Использование watchPosition. Если вы пользуетесь GPS, это может понадобиться вам в будущем.
Пример кода window.onload:
<!DOCTYPE html>
<html>
<body>
<script>
function getpos_callback( a ) {
top.location.href = 'location.php?lat=' + a.coords.latitude + '&lon=' + a.coords.longitude;
}
function error_callback( er ) {
top.location.href = 'location.php?err=1';
}
function getGPS(){
if ( 'geolocation' in navigator ) {
navigator.geolocation.getCurrentPosition( getpos_callback, error_callback, {
enableHighAccuracy: true,
maximumAge: 300000, // 300 seconds = 5 min = max age of cached value to use
timeout: 8000, // 8 seconds
});
}
}
/*
* Attach getGPS to the window.onload event.
*
*/
if ( window.addEventListener ) {
window.addEventListener('load', getGPS);
} else {
window.attachEvent('onload', getGPS);
}
</script>
</body>
</html>