From d5f74019ac49e4812b11dfc8e5be18668b634e95 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 22 Jan 2017 19:38:07 +0300 Subject: [PATCH] parse_counters: cache previous reply and skip processing of unchanged rows (better implementation) --- js/feedlist.js | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/js/feedlist.js b/js/feedlist.js index 232cf0be1..3a0b7cb12 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -254,15 +254,41 @@ function request_counters(force) { } } +// NOTE: this implementation is incomplete +// for general objects but good enough for counters +// http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html +function counter_is_equal(a, b) { + // Create arrays of property names + var aProps = Object.getOwnPropertyNames(a); + var bProps = Object.getOwnPropertyNames(b); + + // If number of properties is different, + // objects are not equivalent + if (aProps.length != bProps.length) { + return false; + } + + for (var i = 0; i < aProps.length; i++) { + var propName = aProps[i]; + + // If values of same property are not equal, + // objects are not equivalent + if (a[propName] !== b[propName]) { + return false; + } + } + + // If we made it this far, objects + // are considered equivalent + return true; +} + + function parse_counters(elems) { try { for (var l = 0; l < elems.length; l++) { - if (_counters_prev[l] && - _counters_prev[l].id == elems[l].id && - _counters_prev[l].updated == elems[l].updated && - _counters_prev[l].counter == elems[l].counter) { - + if (_counters_prev[l] && counter_is_equal(elems[l], _counters_prev[l])) { continue; } @@ -285,9 +311,9 @@ function parse_counters(elems) { continue; } - if (getFeedUnread(id, (kind == "cat")) != ctr || + /*if (getFeedUnread(id, (kind == "cat")) != ctr || (kind == "cat")) { - } + }*/ setFeedUnread(id, (kind == "cat"), ctr); setFeedValue(id, (kind == "cat"), 'auxcounter', auxctr);