Jump to content

User:Alexis Jazz/lz-string/bench.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Compare compression ratio and speed of lz-string and pako. Pako is faster and has a higher compression ratio. It's a considerably larger library though, and mediaWiki currently only provides the compression side of pako. (https://phabricator.wikimedia.org/T312720)
//This script is irrevocably released as WTFPL Version 2[www.wtfpl.net/about/] by its author, Alexis Jazz.
/*globals $:false,mw:false,LZString:false*/
window.testcompress = {};
var testcompress = window.testcompress;
mw.loader.getScript('https://wiki.riteme.site/w/index.php?title=User:Alexis_Jazz/lz-string.js&action=raw&ctype=text/javascript&oldid=1097494057').then(
function(){

mw.loader.using('mediawiki.deflate',function(){

testcompress.showresult = function(method,time,output){
console.log(method+'\t'+time+' ms\t'+output.length+'\t'+Math.round(output.length/1000)+'\t'+(output.length/(testcompress.data.length/100)).toFixed(2)+'\t'+new Blob([output]).size+'\t'+Math.round(new Blob([output]).size/1000)+'\t'+(new Blob([output]).size/(new Blob([testcompress.data]).size/100)).toFixed(2));
};

testcompress.mwinflate = function ( data, dataArr, int ) {
	data = atob(data.slice(11));
	dataArr = [];
	for(int=0;int<data.length;int++) {
		dataArr.push(data.charCodeAt(int));
	}
	dataArr = Uint8Array.from(dataArr);
	return new TextDecoder().decode(pako.inflateRaw(dataArr));
};

testcompress.run = function(num,data){

console.log('\n\nMethod\t\t\tTime\tLength\tK\t%\tBytes\tK\t%');

testcompress.datestart = new Date().getTime();
testcompress.data = '';
if ( data ) {
	testcompress.data = data;
} else {
	for (testcompress.int=0;testcompress.int<num;testcompress.int++){
		testcompress.data = testcompress.data+$('body')[0].outerHTML.replace(/a/g,testcompress.int); //sort of real-life example. the .replace makes it less repetitive
	}
}

testcompress.dateend = new Date().getTime();
testcompress.generatetook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('Uncompressed\t',testcompress.generatetook,testcompress.data);

testcompress.datestart = new Date().getTime();
testcompress.compressedlzstring16 = LZString.compressToUTF16(testcompress.data);
testcompress.dateend = new Date().getTime();
testcompress.lzstring16benchtook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('lz-string (UTF16)',testcompress.lzstring16benchtook,testcompress.compressedlzstring16);

testcompress.datestart = new Date().getTime();
testcompress.decompressedlzstring16 = LZString.decompressFromUTF16(testcompress.compressedlzstring16);
testcompress.dateend = new Date().getTime();
testcompress.lzstring16benchtook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('lz-s (UTF16) inflate',testcompress.lzstring16benchtook,testcompress.decompressedlzstring16);

testcompress.datestart = new Date().getTime();
testcompress.compressedlzstringB64 = LZString.compressToBase64(testcompress.data);
testcompress.dateend = new Date().getTime();
testcompress.lzstringbenchtook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('lz-string (base64)',testcompress.lzstringbenchtook,testcompress.compressedlzstringB64);

testcompress.datestart = new Date().getTime();
testcompress.decompressedlzstringB64 = LZString.decompressFromBase64(testcompress.compressedlzstringB64);
testcompress.dateend = new Date().getTime();
testcompress.lzstringbenchtook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('lz-s (base64) inflate',testcompress.lzstringbenchtook,testcompress.decompressedlzstringB64);

testcompress.datestart = new Date().getTime();
testcompress.compressedpako = mw.deflate(testcompress.data);
testcompress.dateend = new Date().getTime();
testcompress.pakobenchtook=testcompress.dateend - testcompress.datestart;
testcompress.showresult('mw.deflate/pako\t',testcompress.pakobenchtook,testcompress.compressedpako);

if ( ( ( typeof Bawl != 'undefined' && Bawl.pako ) || ( typeof pako != 'undefined' && pako.inflateRaw ) ) && typeof TextDecoder == 'function' ) {
	if ( typeof pako == 'undefined' ) {
		pako = Bawl.pako;
	}
	testcompress.datestart = new Date().getTime();
	testcompress.decompressedpako = testcompress.mwinflate(testcompress.compressedpako);
	testcompress.dateend = new Date().getTime();
	testcompress.pakobenchtook=testcompress.dateend - testcompress.datestart;
	testcompress.showresult('inflate/pako\t',testcompress.pakobenchtook,testcompress.decompressedpako);
}

if ( typeof Bawl != 'undefined' && Bawl.pako ) {
	testcompress.datestart = new Date().getTime();
	testcompress.compressedzlib = Bawl.deflate(testcompress.data,'zlib_plain');
	testcompress.dateend = new Date().getTime();
	testcompress.zlibbenchtook=testcompress.dateend - testcompress.datestart;
	testcompress.showresult('deflate/zlib\t',testcompress.zlibbenchtook,testcompress.compressedzlib);


	testcompress.datestart = new Date().getTime();
	testcompress.decompressedzlib = Bawl.inflate(testcompress.compressedzlib);
	testcompress.dateend = new Date().getTime();
	testcompress.zlibuncbenchtook=testcompress.dateend - testcompress.datestart;
	testcompress.showresult('inflate/zlib\t',testcompress.zlibuncbenchtook,testcompress.decompressedzlib);

}


};

testcompress.run(1);
testcompress.run(5);
testcompress.run(10);

});
});