use batch-based catching up in cdmExpandArticle() to reduce server load

This commit is contained in:
Andrew Dolgov 2015-08-11 12:25:11 +03:00
parent eaec06f950
commit 176a489e54
1 changed files with 22 additions and 13 deletions

View File

@ -568,7 +568,7 @@ function moveToPost(mode, noscroll, noexpand) {
console.log("cur: " + getActiveArticleId() + " next: " + next_id);
if (mode == "next") {
if (next_id /*|| getActiveArticleId()*/) {
if (next_id || getActiveArticleId()) {
if (isCdmMode()) {
var article = $("RROW-" + getActiveArticleId());
@ -1305,6 +1305,8 @@ function headlines_scroll_handler(e) {
updateFloatingTitle();
}
catchupCurrentBatchIfNeeded();
if (getInitParam("cdm_auto_catchup") == 1) {
// let's get DOM some time to settle down
@ -1326,16 +1328,6 @@ function headlines_scroll_handler(e) {
});
if (catchup_id_batch.length > 0) {
window.clearTimeout(catchup_timeout_id);
catchup_timeout_id = window.setTimeout('catchupBatchedArticles()', 500);
if (catchup_id_batch.length >= 10) {
catchupBatchedArticles();
}
}
if (_infscroll_disable) {
var child = $$("#headlines-frame div[id*=RROW]").last();
@ -1370,6 +1362,8 @@ function catchupBatchedArticles() {
try {
if (catchup_id_batch.length > 0 && !_infscroll_request_sent && !_catchup_request_sent) {
console.log("catchupBatchedArticles: working");
// make a copy of the array
var batch = catchup_id_batch.slice();
var query = "?op=rpc&method=catchupSelected" +
@ -1573,8 +1567,12 @@ function cdmExpandArticle(id, noexpand) {
if (old_offset > new_offset)
$("headlines-frame").scrollTop -= (old_offset-new_offset);
if (!noexpand)
toggleUnread(id, 0, true);
if (!noexpand) {
if (catchup_id_batch.indexOf(id) == -1)
catchup_id_batch.push(id);
catchupCurrentBatchIfNeeded();
}
toggleSelected(id);
$("RROW-" + id).addClassName("active");
@ -2430,6 +2428,17 @@ function updateFloatingTitle(unread_only) {
}
}
function catchupCurrentBatchIfNeeded() {
if (catchup_id_batch.length > 0) {
window.clearTimeout(catchup_timeout_id);
catchup_timeout_id = window.setTimeout('catchupBatchedArticles()', 1000);
if (catchup_id_batch.length >= 10) {
catchupBatchedArticles();
}
}
}
function cdmFooterClick(event) {
event.stopPropagation();
}