From 1a8114c00f22252b6e2b0c4a741f0bea1de5dd1d Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 26 Oct 2010 14:04:54 -0500 Subject: Make package differences JS a bit more efficient Use an id-based selector so we can get the necessary table rows to filter a lot more quickly than a lengthy CSS selector. Also use traversal rather than selectors when grabbing the package versions. This looked like a 3x-4x increase in speed while testing locally. Signed-off-by: Dan McGee --- media/archweb.js | 34 ++++++++++++++++++++-------------- templates/packages/differences.html | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/media/archweb.js b/media/archweb.js index 5e315f3..c5025de 100644 --- a/media/archweb.js +++ b/media/archweb.js @@ -57,9 +57,10 @@ function enablePreview() { $.post('/news/preview/', { data: $('#id_content').val() }, function(data) { - $('#previewdata').html(data); - $('.news-article').show(); - }); + $('#previewdata').html(data); + $('.news-article').show(); + } + ); $('#previewtitle').html($('#id_title').val()); }); } @@ -77,7 +78,8 @@ function ajaxifyFiles() { /* packages/differences.html */ filter_packages = function() { // start with all rows, and then remove ones we shouldn't show - var rows = $(".results tbody tr"); + var rows = $("#tbody_differences").children(); + var all_rows = rows; if(!$('#id_multilib').is(':checked')) { rows = rows.not(".multilib").not(".multilib-testing"); } @@ -87,32 +89,36 @@ filter_packages = function() { } if(!$('#id_minor').is(':checked')) { // this check is done last because it is the most expensive + var pat = /(.*)-(.+)/; rows = rows.filter(function(index) { + var cells = $(this).children('td'); + // all this just to get the split version out of the table cell - var pat = /(.*)-(.+)/; - var ver_a = $('td:eq(2) span', this).text().match(pat); - var ver_b = $('td:eq(3) span', this).text().match(pat); - // did we match at all? - if(!ver_a || !ver_b) return true; + var ver_a = cells.eq(2).find('span').text().match(pat); + if(!ver_a) return true; + + var ver_b = cells.eq(3).find('span').text().match(pat); + if(!ver_b) return true; + // first check pkgver if(ver_a[1] !== ver_b[1]) return true; // pkgver matched, so see if rounded pkgrel matches - if(Math.floor(parseFloat(ver_a[2])) == - Math.floor(parseFloat(ver_b[2]))) return false; + if(Math.floor(parseFloat(ver_a[2])) == + Math.floor(parseFloat(ver_b[2]))) return false; // pkgrel didn't match, so keep the row return true; }); } // hide all rows, then show the set we care about - $('.results tbody tr').hide(); + all_rows.hide(); rows.show(); // make sure we update the odd/even styling from sorting $('.results').trigger("applyWidgets"); }; filter_reset = function() { - $('#id_archonly').val("all"); + $('#id_archonly').val("both"); $('#id_multilib').removeAttr("checked"); - $('#id_minor').attr("checked", "checked"); + $('#id_minor').removeAttr("checked"); filter_packages(); }; diff --git a/templates/packages/differences.html b/templates/packages/differences.html index a5db39a..b2a1be0 100644 --- a/templates/packages/differences.html +++ b/templates/packages/differences.html @@ -37,7 +37,7 @@ {{ arch_b.name }} Version - + {% for diff in differences %} {{ diff.pkgname }} -- cgit v1.2.3-24-g4f1b