2016-08-12 14 views
0

У меня есть приложение, которое извлекает данные из внешнего источника. Каждые 5-10 минут или около того я хочу обновить, чтобы проверить, нужно ли обновлять состояние приложения.Правильный способ обновления данных с помощью setInterval

ли лучше использовать setInterval() с длинным тайм-аута (например, 300s или что-то) и обновлять то, или лучше опрашивать каждый хотел 1s, а затем проверить, когда последнее обновление было сделано, извлечение новых данных, если это было более 5 минут.

Просто любопытно с точки зрения производительности, если он лучше другого, я никогда не выполнял это раньше.

+0

Существует много чего мы не знаем о приложении. Сколько человек будет использовать его, какой сервер он будет размещен и т. Д. Если не существует жесткого требования видеть данные в режиме реального времени (1 секунду или где-то там), просто придерживайтесь setInterval(). – pmahomme

ответ

1

Первый способ лучше для работы. Второй способ делает 299 ненужных запросов на сервер.

0

case 1: Это полностью зависит от вашего приложения. посмотрите, если вы сделали приложение реального времени, например, fb, whatsapp, тогда плохо обновлять каждые 3/5 минуты, потому что пользователь будет уведомлен с опозданием.

кейс 2: предположим, что вы создали приложение, которое дает вам текущую температуру, тогда его штраф, чтобы называть его каждые 3/5 мин. Это полностью зависит от вашей функции приложения.

вы можете использовать сокет.io.

1

Независимо от ваших потребностей, вы вообще не хотите использовать setInterval для этого, это скользкая дорога к условиям гонки (представьте себе, если - для некоторых сетевых причуд - первый setInterval возвращает после следующий). Вы хотите использовать setTimeout:

function update() { 

    fetch(url).then(function(response) { 
    return response.json(); 
    }).then(function(json) { 
    // ... do something with your json ... 
    setTimeout(update, 1000); // <-- now that this call is done, 
           //  we can program the next one 
    }).catch(function(err) { 
    // Error :(
    setTimeout(update, 1000); // <-- there was a network problem, 
           //  but still, program the next one! 
    }); 


} 

update(); 

В этом примере используется новый Fetch API, но он должен сделать точку в любом случае.

Это говорит о том, что вам нужны новые данные каждые 5 минут, просто используйте длительный тайм-аут. Вместо 1000, как указано выше, вы будете использовать 5 * 60 * 1000.