这篇文章最近登上了 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 无法检测到单元格是否打开,那何必呢?值得打扰吗?