Mercurial > browser-couch
changeset 23:ed362e47defe
Added 'big.html', which tests browser-couch's performance on larger data sets.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 13 Apr 2009 14:51:05 -0700 |
parents | 7b418d9d27f8 |
children | 9414e2a40ed3 |
files | big.html big.js |
diffstat | 2 files changed, 113 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/big.html Mon Apr 13 14:51:05 2009 -0700 @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <link rel="stylesheet" type="text/css" media="all" + href="index.css" /> + <title>Browser Big Couch Test</title> +</head> +<body> +<h1>Browser Big Couch Test</h1> +<div id="status"> +</div> +</body> +<script src="browser-couch.js"></script> +<script src="big.js"></script> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/big.js Mon Apr 13 14:51:05 2009 -0700 @@ -0,0 +1,94 @@ +var MAX_WORD_LENGTH = 10; +var LEXICON_SIZE = 200; +var MIN_DOCUMENT_LENGTH = 250; +var MAX_DOCUMENT_LENGTH = 500; +var CORPUS_SIZE = 100; + +// Returns a random integer between min and max +// Using Math.round() will give you a non-uniform distribution! +function getRandomInt(min, max) +{ + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function makeRandomWord() { + var word = ""; + var len = getRandomInt(1, MAX_WORD_LENGTH); + for (var i = 0; i < len; i++) { + var charCode = getRandomInt("a".charCodeAt(0), + "z".charCodeAt(0)); + var letter = String.fromCharCode(charCode); + word += letter; + } + return word; +} + +function makeLexicon() { + var lexicon = []; + + for (var i = 0; i < LEXICON_SIZE; i++) + lexicon.push(makeRandomWord()); + + return lexicon; +} + +function makeDocument(lexicon) { + var len = getRandomInt(MIN_DOCUMENT_LENGTH, + MAX_DOCUMENT_LENGTH); + var doc = []; + + for (var i = 0; i < len; i++) { + var wordIndex = getRandomInt(0, lexicon.length); + doc.push(lexicon[wordIndex]); + } + + return doc.join(" "); +} + +function makeCorpus(db, cb) { + var lexicon = makeLexicon(); + var docs = []; + + for (var i = 0; i < CORPUS_SIZE; i++) + docs.push({id: i, + content: makeDocument(lexicon)}); + + db.put(docs, cb); +} + +BrowserCouch.get( + "big", + function(db) { + var status = document.getElementById("status"); + if (db.getLength() == 0) { + status.textContent = "Building new corpus."; + db.wipe(function() { makeCorpus(db, run); }); + } else + run(); + + function run() { + db.view( + {map: function(doc, emit) { + var words = doc.content.split(" "); + for (var i = 0; i < words.length; i++) + emit(words[i], 1); + }, + reduce: function(keys, values) { + var sum = 0; + for (var i = 0; i < values.length; i++) + sum += values[i]; + return sum; + }, + chunkSize: 5, + progress: function(phase, percent, resume) { + percent = Math.floor(percent * 100); + var msg = phase + " (" + percent + "%)"; + status.textContent = msg; + window.setTimeout(resume, 5); + }, + finished: function(result) { + status.textContent = "Done."; + }} + ); + } + });