My programs for Opera

Fast base64 encoding in js. And test results.

function encodeBase64(str){
	var chr1, chr2, chr3, rez = '', arr = [], i = 0, j = 0, code = 0;
	var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split('');

	while(code = str.charCodeAt(j++)){
		if(code < 128){
			arr[arr.length] = code;
		}
		else if(code < 2048){
			arr[arr.length] = 192 | (code >> 6);
			arr[arr.length] = 128 | (code & 63);
		}
		else if(code < 65536){
			arr[arr.length] = 224 | (code >> 12);
			arr[arr.length] = 128 | ((code >> 6) & 63);
			arr[arr.length] = 128 | (code & 63);
		}
		else{
			arr[arr.length] = 240 | (code >> 18);
			arr[arr.length] = 128 | ((code >> 12) & 63);
			arr[arr.length] = 128 | ((code >> 6) & 63);
			arr[arr.length] = 128 | (code & 63);
		}
	};

	while(i < arr.length){
		chr1 = arr[i++];
		chr2 = arr[i++];
		chr3 = arr[i++];

		rez += chars[chr1 >> 2];
		rez += chars[((chr1 & 3) << 4) | (chr2 >> 4)];
		rez += chars[chr2 === undefined ? 64 : ((chr2 & 15) << 2) | (chr3 >> 6)];
		rez += chars[chr3 === undefined ? 64 : chr3 & 63];
	};
	return rez;
};


convertStringToBase64 - http://dev.opera.com/libraries/base64encoder/
Base64.encode - http://www.webtoolkit.info/javascript-base64.html


http://ruzanow.ru/test/test_base64.html on Core 2 Duo 2.66 GHz:
Chrome 9
convertStringToBase64: 19 ms
encodeBase64: 38 ms
Base64.encode: 75 ms
encodeBtoa: 13 ms

Firefox 4.0 beta 7
convertStringToBase64: 36 ms
encodeBase64: 18 ms
Base64.encode: 30 ms
encodeBtoa: 15 ms

Opera 11
convertStringToBase64: 71 ms
encodeBase64: 31 ms
Base64.encode: 61 ms
encodeBtoa: 31 ms

Firefox 3.6
convertStringToBase64: 190 ms
encodeBase64: 36 ms
Base64.encode: 60 ms
encodeBtoa: 27 ms

Chrome 2
convertStringToBase64: 366 ms
encodeBase64: 88 ms
Base64.encode: 161 ms
encodeBtoa: 80 ms

Opera 9.6
convertStringToBase64: 422 ms
encodeBase64: 188 ms
Base64.encode: 531 ms

IE8
convertStringToBase64: 468 ms
encodeBase64: 313 ms
Base64.encode: 875 ms

Opera 9.2
convertStringToBase64: 656 ms
encodeBase64: 516 ms
Base64.encode: 1109 ms

Opera 8.5
convertStringToBase64: 14219 ms
encodeBase64: 4250 ms
Base64.encode: 11672 ms

IE6 (first 30000 symbols only)
convertStringToBase64: 11781 ms
encodeBase64: 6235 ms
encodeBase64 with rez.join(''): 125 ms
Base64.encode: 922 ms


Resume.
encodeBase64 is fastest method in Opera.
window.btoa in Opera not fast and slightly bugged: javascript:alert(atob(btoa('ф'))) == 'D', instead of error.

Patch for double gzipped pages

Comments

Unregistered user Saturday, June 18, 2011 7:38:01 PM

Анонимно writes: test (Opera 11.11): encodeBase64 vs encodeBase64full (htmlZclip src http://9b.asoiu.com/?p=2061 )

Unregistered user Saturday, June 18, 2011 7:41:54 PM

Анонимно writes: ... (oops)

Unregistered user Saturday, June 18, 2011 7:45:22 PM

Анонимно writes: ... (oops again) (encodeBase64full|encodeBase64|chars number) (5 ms|7 ms|22437) (12 ms|16 ms|60416) (18 ms|22 ms|92904) (44 ms|30 ms|112185)

Unregistered user Friday, August 19, 2011 7:22:52 PM

Chris writes: Doesn't seem to be insuring UTF_8 encoding.. seems incomplete

Write a comment

New comments have been disabled for this post.