JSFiddle - React, Tailwind, and code Playground
HTML
<pre id="log"></pre>
JavaScript
if (typeof navigator !== 'undefined') {
log(navigator.userAgent);
}
// latin
detectMaxStringLength('m');
setTimeout(function() {
// russian
detectMaxStringLength('я');
setTimeout(function() {
// emoji
detectMaxStringLength('😀');
}, 100);
}, 100);
function log(message) {
if (typeof document !== 'undefined') {
document.getElementById('log').innerText += message + '\n';
} else {
console.log(message);
}
}
function detectMaxStringLength(char) {
var s = char;
console.log('Fast search...');
while (true) {
try {
s = s + s;
} catch (e) {
console.log(e.name, e.message);
console.log('Fast search:', s.length);
break;
}
}
console.log('Slow search...');
var length = s.length;
while (true) {
try {
length = Math.max(length >> 1, 1);
s = s + (s.substr(0, length));
console.log('Slow search:', s.length);
} catch (e) {
console.log(e.name, e.message);
console.log('Slow search:', s.length);
if (length === 1) {
break;
}
}
}
log('Max string length for "' + char + '": ' + s.length);
}