From: Andrew Dolgov Date: Sun, 22 Jan 2017 16:38:07 +0000 (+0300) Subject: parse_counters: cache previous reply and skip processing of unchanged rows (better... X-Git-Tag: 17.4~86 X-Git-Url: https://git.wh0rd.org/?p=tt-rss.git;a=commitdiff_plain;h=d5f74019ac49e4812b11dfc8e5be18668b634e95 parse_counters: cache previous reply and skip processing of unchanged rows (better implementation) --- diff --git a/js/feedlist.js b/js/feedlist.js index 232cf0be..3a0b7cb1 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);