From d53603e2115ed12fc653022b2c8e156038226a15 Mon Sep 17 00:00:00 2001 From: James Date: Sat, 4 Aug 2018 17:12:00 +1000 Subject: [PATCH] Buffer incoming streamed data in the frontend --- src/logging.rs | 2 ++ static/js/helpers.js | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/logging.rs b/src/logging.rs index 2216442..f77a8ec 100644 --- a/src/logging.rs +++ b/src/logging.rs @@ -32,11 +32,13 @@ where Self: Sized, { /// Unwraps this object. See `unwrap()`. + #[inline] fn log_unwrap(self) -> T { self.log_expect("Failed to unwrap") } /// Unwraps this object, with a specified error message on failure. See `expect()`. + #[inline] fn log_expect(self, msg: &str) -> T; } diff --git a/static/js/helpers.js b/static/js/helpers.js index d9fdc43..338d822 100644 --- a/static/js/helpers.js +++ b/static/js/helpers.js @@ -73,13 +73,19 @@ function stream_ajax(path, callback, successCallback, failCallback, data) { } }); + var buffer = ""; + req.onreadystatechange = function() { if(req.readyState > 2) { var newData = req.responseText.substr(req.seenBytes); - var lines = newData.split("\n"); - for (var i = 0; i < lines.length; i++) { - var line = lines[i].trim(); + buffer += newData; + + var pointer; + while ((pointer = newData.indexOf("\n")) >= 0) { + var line = newData.substring(0, pointer).trim(); + newData = newData.substring(pointer + 1); + if (line.length === 0) { continue; }