From 9a4f04fbd3233fe2711b2cf5d11c4baa46e78b89 Mon Sep 17 00:00:00 2001 From: Florrie Date: Sat, 15 Dec 2018 00:56:51 -0400 Subject: Dramatically optimize perf of large playlists Now you can browse modland.json at your leisure, without the fear of waiting 10 seconds every time you so much as move your cursor! --- index.js | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'index.js') diff --git a/index.js b/index.js index 15392bd..f1073e0 100755 --- a/index.js +++ b/index.js @@ -82,23 +82,47 @@ async function main() { root.fixAllLayout() }) + const loadPlaylists = async () => { + for (let i = 2; i < process.argv.length; i++) { + await appElement.handlePlaylistSource(process.argv[i], true) + } + } + + const loadPlaylistPromise = loadPlaylists() + if (process.argv.includes('--stress-test')) { + await loadPlaylistPromise + const w = 80 const h = 40 flushable.resizeScreen({lines: w, cols: h}) root.w = w root.h = h root.fixAllLayout() - const start = Date.now() - let n = 0 - while (Date.now() < start + 1000) { + + const stress = func => { + const start = Date.now() + let n = 0 + while (Date.now() < start + 1000) { + func() + n++ + } + return n + } + + const nRenderAndFlush = stress(() => { root.renderTo(flushable) flushable.flush() - n++ - } + }) + + const nFixAllLayout = stress(() => { + root.fixAllLayout() + }) + + process.stdout.write(ansi.cleanCursor() + ansi.clearScreen() + '\n') + console.log('# of times we can render & flush:', nRenderAndFlush) + console.log('# of times we can fix all layout:', nFixAllLayout) - console.log(ansi.clearScreen() + ansi.cleanCursor()) - console.log('# of times ran:', n) process.exit(0) return @@ -108,10 +132,6 @@ async function main() { root.renderTo(flushable) flushable.flush() }, 50) - - for (let i = 2; i < process.argv.length; i++) { - await appElement.handlePlaylistSource(process.argv[i], true) - } } main().catch(err => { -- cgit 1.3.0-6-gf8a5