Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Base64 vs. base64
(version: 0)
Comparing performance of:
Base64 1 vs base64 2
Created:
one year ago
by:
Guest
Jump to the latest result
Script Preparation code:
const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; const paddingChar = '='; function encode(input) { const paddings = 3 - (input.length % 3 || 3); let encoded = ''; let binaries = ''; for (let i = 0; i < input.length + paddings; i++) { const char = input[i]; const binary = char ? char.charCodeAt(0).toString(2).padStart(8, '0') : '00000000'; // the binaries length could only be 0, 2 or 4 because the bits will be consumed once become 6 switch (binaries.length) { case 0: encoded += charset[parseInt(binary.slice(0, 6), 2)]; binaries = binary.slice(6); break; case 2: encoded += charset[parseInt(`${binaries}${binary.slice(0, 4)}`, 2)]; binaries = binary.slice(4); break; case 4: // the paddings count could only be 0, 1 or 2 switch (paddings) { case 0: encoded += charset[parseInt(`${binaries}${binary.slice(0, 2)}`, 2)]; encoded += charset[parseInt(binary.slice(2), 2)]; break; case 1: // when there's only one padding and current char is undedefined (exceeded input string ranged) // which means the last char is a padding char if (!char) { encoded += charset[parseInt(`${binaries}${binary.slice(0, 2)}`, 2)]; encoded += paddingChar; } else { encoded += charset[parseInt(`${binaries}${binary.slice(0, 2)}`, 2)]; encoded += charset[parseInt(binary.slice(2), 2)]; } break; case 2: // when there are 2 paddings and previous char is undedefined (exceeded input string ranged) // which means the last 2 chars are padding chars if (!input[i - 1]) { encoded += paddingChar; encoded += paddingChar; } else { encoded += charset[parseInt(`${binaries}${binary.slice(0, 2)}`, 2)]; encoded += charset[parseInt(binary.slice(2), 2)]; } break; } binaries = ''; break; } } return encoded; } function decode(input) { let decoded = ''; let binaries = ''; for (let i = 0; i < input.length; i++) { const char = input[i]; // once reached the padding char, don't need to continue the loop if (char === paddingChar) { break; } const code = charset.indexOf(char); const binary = code.toString(2).padStart(6, '0'); // binaries length could only be 0, 2, 4 or 6 because the bits will be consumed once become 8 switch (binaries.length) { case 0: binaries += binary; break; case 2: decoded += String.fromCharCode(parseInt(`${binaries}${binary}`, 2)); binaries = ''; break; case 4: decoded += String.fromCharCode(parseInt(`${binaries}${binary.slice(0, 4)}`, 2)); binaries = binary.slice(4); break; case 6: decoded += String.fromCharCode(parseInt(`${binaries}${binary.slice(0, 2)}`, 2)); binaries = binary.slice(2); break; } } return decoded; } var base64 = { encode, decode, }; /** * * Base64 encode / decode * http://www.webtoolkit.info/ * **/ var Base64 = { // private property _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", // public method for encoding encode : function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = Base64._utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); } return output; }, // public method for decoding decode : function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = this._keyStr.indexOf(input.charAt(i++)); enc2 = this._keyStr.indexOf(input.charAt(i++)); enc3 = this._keyStr.indexOf(input.charAt(i++)); enc4 = this._keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } output = Base64._utf8_decode(output); return output; }, // private method for UTF-8 encoding _utf8_encode : function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }, // private method for UTF-8 decoding _utf8_decode : function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } var str = 'PYtFLbTaRSeG9qH781zL0d6irQoPYJDFT6ubjfXIAKfQEOXC';
Tests:
Base64 1
Base64.decode(Base64.encode(str))
base64 2
base64.decode(base64.encode(str))
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (2)
Previous results
Fork
Test case name
Result
Base64 1
base64 2
Fastest:
N/A
Slowest:
N/A
Latest run results:
Run details:
(Test run date:
9 months ago
)
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Browser/OS:
Chrome 133 on Mac OS X 10.15.7
View result in a separate tab
Embed
Embed Benchmark Result
Test name
Executions per second
Base64 1
446337.2 Ops/sec
base64 2
118084.8 Ops/sec
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
It seems like we have a long and detailed benchmarking report! To provide a concise answer, I'll focus on the key takeaways: **Benchmark Results:** 1. **Base64.decode(Base64.encode(str))**: 55458.73046875 executions per second 2. **base64.decode(base64.encode(str))**: 39038.234375 executions per second These results show that the first benchmark definition is approximately 40% faster than the second one. **Additional Insights:** * The benchmarks were run on a Chrome browser with version 128. * The device platform was Desktop, and the operating system was Windows. * The report provides raw UA strings for both browsers, which can be useful for further analysis or debugging. If you'd like to know more about Base64 encoding or decoding, I'm here to help!
Related benchmarks:
String.fromCharCode & btoa vs base64ArrayBuffer function
String.fromCharCode & btoa vs base64ArrayBuffer function FIXED
String.fromCharCode & btoa vs base64ArrayBuffer function FIXED ON LARGE ARRAY
Base64 encode native func vs readAsDataURL()
Comments
Confirm delete:
Do you really want to delete benchmark?