Эта статья недавно попала в верхнюю часть HackerNews: http://highscalability.com/blog/2013/9/18/if-youre-programming-a-cell-phone-like-a-server-youre-doing.html#
В котором говорится:
Ячейка радио является одним из самых больших разрядов батареи на телефоне. Каждый раз, когда вы отправляете данные, независимо от того, насколько они малы, радиоприемник работает на 20-30 секунд. Каждое принятое вами решение должно основываться на минимизации количества раз, когда радио включается. Время автономной работы можно значительно улучшить, изменив способ передачи данных приложениям. Теперь пользователи хотят получить свои данные, трюк - это балансировка пользовательского интерфейса при передаче данных и минимизация использования энергии. Баланс достигается за счет того, что приложения тщательно связывают все повторяющиеся и прерывистые передачи вместе, а затем агрессивно предваряют прерывистые передачи.
Я хотел бы изменить $.ajax
, чтобы добавить такой параметр, как "не нужно делать прямо сейчас, просто выполните этот запрос при запуске другого запроса". Что было бы хорошим способом сделать это?
Я начал с этого:
(function($) {
var batches = [];
var oldAjax = $.fn.ajax;
var lastAjax = 0;
var interval = 5*60*1000; // Should be between 2-5 minutes
$.fn.extend({batchedAjax: function() {
batches.push(arguments);
}});
var runBatches = function() {
var now = new Date().getTime();
var batched;
if (lastAjax + interval < now) {
while (batched = batches.pop()) {
oldAjax.apply(null, batched);
}
}
}
setInterval(runBatches, interval);
$.fn.ajax = function() {
runBatches();
oldAjax.apply(null, arguments);
lastAjax = now;
};
})(jQuery);
Я не могу сказать по формулировке статьи, я думаю, что хороший пакетный интервал составляет 2-5 минут, поэтому я просто использовал 5.
Является ли это хорошей реализацией?
-
Как я могу сделать это истинным изменением только метода
ajax
, добавив параметр{batchable:true}
к методу? Я не совсем понял это. -
Поддерживает ли телефон
setInterval
все время? Это плохо? Есть ли лучший способ не делать этого? -
Есть ли здесь другие вещи, которые могли бы привести к тому, что батарея разрядится быстрее?
-
Является ли такой подход даже стоящим? В современном смартфоне сразу происходит так много вещей, что если мое приложение не использует камеру, наверняка какое-то другое приложение. Javascript не может определить, включена ли ячейка или нет, так зачем беспокоиться? Стоит ли беспокоиться?