Использование интервала, который срабатывает каждые 5 минут, является очевидным (и наиболее совместимым с браузером).
Это не создает отдельный поток, а является традиционной симуляцией этого. Все, что на самом деле происходит, - это асинхронное событие, поставленное в очередь, которое должно выполняться как можно ближе к тому моменту, когда вы должны его запустить. Однако точность не гарантируется, потому что она работает в одном потоке, поэтому для запуска JS требуется «окно возможностей».
Иными словами, двигатель JS сделает все возможное, чтобы выполнить ваш код в нужный момент, но только постольку, поскольку он свободен для этого.
Если вы не против более старой поддержки браузера, вы можете использовать web worker, который действительно запускается в отдельной теме.
веб рабочий сценарий
self.addEventListener('message', function(evt) {
var gateway = new XMLHttpRequest();
var intie = setInterval(function() {
gateway.open("GET",evt.data.load_url,true);
gateway.send();
gateway.onreadystatechange = function() {
if (gateway.readyState==4 && gateway.status==200)
self.postMessage(gateway.responseText);
}
}, 300000); //every 5 minutes
}, false);
(Примечание я использую ваниль JS там, не JQuery, так как я не знаю ни одного способа использования JQuery внутри веб-рабочих. Вы можете импортировать сценарии, но JQuery ссылки window
, какие ошибки в веб-работников, поскольку они не имеют никаких связей с окном или DOM)
Главная JS скрипт
var worker = new Worker('worker.js');
worker.addEventListener('message', function(evt) {
//the loaded JSON data is now held in evt.data
alert(evt.data);
}, false);
worker.postMessage({load_url: 'json.txt'});
Есть ли какая-либо польза при вызове нового работника каждые 5 минут или, как я, используя одного работника и каждые пять минут, я не уверен. Вероятно, это не так много, поскольку в любом случае происходит интервал.
Да. 'setTimeout' (или даже' setInterval') - это способ сделать это. – Matt