From d052bfc186c2979c7cf01c11d962fb13e61b0c25 Mon Sep 17 00:00:00 2001 From: Mayhem Date: Mon, 17 Feb 2014 00:54:47 +0100 Subject: [PATCH] Optimize the index by dealing with HRs as little as possible. --- src/General/Build.coffee | 10 ++++++---- src/General/Index.coffee | 40 +++++++++++++++++++-------------------- src/General/Post.coffee | 2 +- src/General/Thread.coffee | 2 +- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/General/Build.coffee b/src/General/Build.coffee index 5cb9d1dca..a8d3e9ce0 100644 --- a/src/General/Build.coffee +++ b/src/General/Build.coffee @@ -243,21 +243,23 @@ Build = Build.spoilerRange[board] = data.custom_spoiler if (OP = board.posts[data.no]) and root = OP.nodes.root.parentNode - $.rmAll root + for node in $$ '.thread > :not(.stub):not(.opContainer)', root + $.rm node + if OP.thread.stub and stub = OP.thread.stub.firstElementChild.lastChild + stub.textContent = stub.textContent.replace /\d+ rep\w+/, "#{data.replies} repl#{if data.replies is 1 then 'y' else 'ies'}" else root = $.el 'div', className: 'thread' id: "t#{data.no}" + $.add root, Build.postFromObject data, board.ID - nodes = [if OP then OP.nodes.root else Build.postFromObject data, board.ID] if data.omitted_posts or !Conf['Show Replies'] and data.replies [posts, files] = if Conf['Show Replies'] [data.omitted_posts, data.omitted_images] else [data.replies, data.images] - nodes.push Build.summary board.ID, data.no, posts, files + $.add root, Build.summary board.ID, data.no, posts, files - $.add root, nodes root catalogThread: (thread) -> {staticPath, gifIcon} = Build diff --git a/src/General/Index.coffee b/src/General/Index.coffee index a376eaaf0..01f8ef291 100644 --- a/src/General/Index.coffee +++ b/src/General/Index.coffee @@ -521,7 +521,7 @@ Index = posts = [] for threadData, i in Index.liveThreadData threadRoot = Build.thread g.BOARD, threadData - Index.nodes.push threadRoot, $.el 'hr' + Index.nodes.push threadRoot if thread = g.BOARD.threads[threadData.no] thread.setPage i // Index.threadsNumPerPage thread.setCount 'post', threadData.replies + 1, threadData.bumplimit @@ -542,15 +542,18 @@ Index = error: err Main.handleErrors errors if errors - # Add the threads and
s in a container to make sure all features work. - $.nodes Index.nodes Main.callbackNodes Thread, threads Main.callbackNodes Post, posts Index.updateHideLabel() $.event 'IndexRefresh' + buildHRs: (threadRoots) -> + for i in [0...threadRoots.length] by 1 + threadRoots.splice (i * 2) + 1, 0, $.el 'hr' + return buildReplies: (threadRoots) -> + return unless Conf['Show Replies'] posts = [] - for threadRoot in threadRoots by 2 + for threadRoot in threadRoots thread = Get.threadFromRoot threadRoot i = Index.liveThreadIDs.indexOf thread.ID continue unless lastReplies = Index.liveThreadData[i].last_replies @@ -574,7 +577,6 @@ Index = Main.callbackNodes Post, posts buildCatalogViews: -> threads = Index.sortedNodes - .filter (n, i) -> !(i % 2) .map (threadRoot) -> Get.threadFromRoot threadRoot .filter (thread) -> !thread.isHidden isnt Index.showHiddenThreads catalogThreads = [] @@ -609,10 +611,8 @@ Index = sortedThreadIDs = [Index.liveThreadData...].sort((a, b) -> b.replies - a.replies).map (data) -> data.no when 'filecount' sortedThreadIDs = [Index.liveThreadData...].sort((a, b) -> b.images - a.images).map (data) -> data.no - Index.sortedNodes = [] - for threadID in sortedThreadIDs - i = Index.liveThreadIDs.indexOf(threadID) * 2 - Index.sortedNodes.push Index.nodes[i], Index.nodes[i + 1] + Index.sortedNodes = sortedThreadIDs.map (threadID) -> + Index.nodes[Index.liveThreadIDs.indexOf threadID] if Index.isSearching Index.sortedNodes = Index.querySearch(Index.searchInput.value) or Index.sortedNodes # Sticky threads @@ -623,22 +623,25 @@ Index = Index.sortOnTop((thread) -> !thread.isHidden) if Conf['Anchor Hidden Threads'] sortOnTop: (match) -> offset = 0 - for threadRoot, i in Index.sortedNodes by 2 when match Get.threadFromRoot threadRoot - Index.sortedNodes.splice offset++ * 2, 0, Index.sortedNodes.splice(i, 2)... + for threadRoot, i in Index.sortedNodes when match Get.threadFromRoot threadRoot + Index.sortedNodes.splice offset++, 0, Index.sortedNodes.splice(i, 1)[0] return buildIndex: -> switch Conf['Index Mode'] when 'paged' pageNum = Index.getCurrentPage() - nodesPerPage = Index.getThreadsNumPerPage() * 2 - nodes = Index.sortedNodes[nodesPerPage * pageNum ... nodesPerPage * (pageNum + 1)] + threadsPerPage = Index.getThreadsNumPerPage() + nodes = Index.sortedNodes[threadsPerPage * pageNum ... threadsPerPage * (pageNum + 1)] + Index.buildReplies nodes + Index.buildHRs nodes when 'catalog' nodes = Index.buildCatalogViews() Index.sizeCatalogViews nodes else - nodes = Index.sortedNodes + nodes = [Index.sortedNodes...] + Index.buildReplies nodes + Index.buildHRs nodes $.rmAll Index.root - Index.buildReplies nodes if Conf['Show Replies'] and Conf['Index Mode'] isnt 'catalog' $.add Index.root, nodes $.event 'IndexBuild', nodes @@ -678,11 +681,8 @@ Index = return unless keywords = query.toLowerCase().match /\S+/g Index.search keywords search: (keywords) -> - found = [] - for threadRoot, i in Index.sortedNodes by 2 - if Index.searchMatch Get.threadFromRoot(threadRoot), keywords - found.push Index.sortedNodes[i], Index.sortedNodes[i + 1] - found + Index.sortedNodes.filter (threadRoot) -> + Index.searchMatch Get.threadFromRoot(threadRoot), keywords searchMatch: (thread, keywords) -> {info, file} = thread.OP text = [] diff --git a/src/General/Post.coffee b/src/General/Post.coffee index 55636e605..abf6e9212 100644 --- a/src/General/Post.coffee +++ b/src/General/Post.coffee @@ -173,7 +173,7 @@ class Post postInfo = if Conf['Anonymize'] 'Anonymous' else - $('.nameBlock', @nodes.info).textContent + $('.nameBlock', @nodes.info).textContent.trim() $.add a, $.tn " #{postInfo}" @nodes.stub = $.el 'div', className: 'stub' diff --git a/src/General/Thread.coffee b/src/General/Thread.coffee index 37b39340e..8f82d7397 100644 --- a/src/General/Thread.coffee +++ b/src/General/Thread.coffee @@ -77,7 +77,7 @@ class Thread opInfo = if Conf['Anonymize'] 'Anonymous' else - $('.nameBlock', @OP.nodes.info).textContent + $('.nameBlock', @OP.nodes.info).textContent.trim() a = PostHiding.makeButton false $.add a, $.tn " #{opInfo} (#{numReplies} repl#{if numReplies is 1 then 'y' else 'ies'})"