最近、この記事が HackerNews のトップを飾った: http://highscalability.com/blog/2013/9/18/if-youre-programming-a-cell-phone-like-a-server-youre-doing.html#
その中で次のように述べています。
セル無線は、電話で最大のバッテリー消耗の 1 つです。データを送信するたびに、どんなに小さなデータでも、無線の電源が 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 はセルがオンかどうかを検出できないのに、どうしてわざわざ? 気にする価値はありますか?