Browse code

Add a first draft of bundling lines in a single POST request

Natasha Kerensikova authored on09/04/2016 23:51:23
Showing1 changed files
... ...
@@ -16,21 +16,33 @@
16 16
 
17 17
 var cfg_endpoint = null;
18 18
 var cfg_data_field = null;
19
+var cfg_bundle_max = 30;
20
+var cfg_bundle_separator = "\r\n";
19 21
 
20 22
 var to_send = [];
21 23
 var senders = [new XMLHttpRequest(), new XMLHttpRequest()];
22 24
 var i_sender = 1;
25
+var bundle_size = 0;
23 26
 
24
-function sendHead() {
25
-   if (to_send.length < 1) return;
26
-   var line = to_send[0].split(";")[1];
27
+function sendPayload(payload) {
27 28
    var data = new FormData();
28
-   data.append(cfg_data_field, line);
29
+   data.append(cfg_data_field, payload);
29 30
    i_sender = 1 - i_sender;
30 31
    senders[i_sender].open("POST", cfg_endpoint, true);
31 32
    senders[i_sender].send(data);
32 33
 }
33 34
 
35
+function sendHead() {
36
+   if (to_send.length < 1) return;
37
+   bundle_size = 0;
38
+   var payload = [];
39
+   while (bundle_size < cfg_bundle_max && bundle_size < to_send.length) {
40
+      payload.push(to_send[bundle_size].split(";")[1]);
41
+      bundle_size += 1;
42
+   }
43
+   sendPayload(payload.join(cfg_bundle_separator));
44
+}
45
+
34 46
 function enqueue(key, line) {
35 47
    to_send.push(key + ";" + line);
36 48
    localStorage.setItem("toSend", to_send.join("|"));
... ...
@@ -42,6 +54,9 @@ function enqueue(key, line) {
42 54
 }
43 55
 
44 56
 function uploadDone() {
57
+   if (bundle_size > 1) {
58
+      to_send.splice(0, bundle_size - 1);
59
+   }
45 60
    var sent_key = to_send.shift().split(";")[0];
46 61
    localStorage.setItem("toSend", to_send.join("|"));
47 62
    Pebble.sendAppMessage({ "uploadDone": parseInt(sent_key, 10) });