// Get a DOM-ready object.
function parseString ( anyString )
{
// Make into string if not.
anyString = String(anyString);
// The break-after initial counter value.
const theCounter = 100;
// The break-after current counter value.
let myCounter = theCounter;
// The length of the initial string evaluated.
const theLength = anyString.length; // Math.min(2500, anyString.length;);
// The length of the current string evaluated.
let myLength = theLength;
// The container for all character containers.
const newDiv = document.createElement('div');
// The loop through the string.
while ( -- myLength )
{
// The index of the character.
const theIndex = theLength - myLength - 1;
// The container for the character.
const newSpan = document.createElement('span');
{
let character = anyString[theIndex];
// Handle the character.
switch ( character )
{
// Making spaces solid.
case ' ':
{
newSpan.innerHTML = ' ';
break;
}
// Handling new lines.
case "\n":
{
// Break or ignore? Ignoring for the sake of the objective.
// newSpan.appendChild(document.createElement('br'));
break;
}
// Leaving as is.
default:
{
newSpan.textContent = character;
break;
}
}
}
newDiv.appendChild(newSpan);
// Break after every (theCounter)th character.
if ( ! -- myCounter )
{
myCounter = theCounter;
newDiv.appendChild(document.createElement('br'));
}
}
return newDiv;
}
/* TESTING *\
\* BELOW */
const currentScene = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi volutpat turpis velit, et pharetra arcu hendrerit sed. Pellentesque ultricies arcu at nulla rutrum, sit amet egestas lorem tincidunt. Pellentesque eget diam sit amet velit ultrices venenatis laoreet quis mauris. Phasellus orci lacus, condimentum nec diam in, viverra egestas lorem. Nunc ac mollis neque, gravida dignissim lorem. Fusce vel lacus vel elit consectetur varius. Etiam ultrices blandit gravida. Vestibulum quis sollicitudin risus. Maecenas vitae ante tellus. Sed tortor nunc, facilisis vitae odio auctor, dignissim semper dui. Nulla luctus est tellus, in ultricies velit malesuada et. Donec rutrum, erat vel molestie vestibulum, metus turpis volutpat elit, in feugiat purus massa in diam. In sit amet sapien libero. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum venenatis at lorem in consectetur. Proin id ex efficitur, faucibus tellus in, pulvinar urna. Nullam dapibus nibh nec nisi consequat hendrerit ac at ante. Phasellus ornare nunc ac luctus vestibulum. Sed egestas elit at mattis pretium. Aenean semper nec metus et hendrerit. Suspendisse mattis massa at nunc dapibus egestas. Phasellus a suscipit libero. Nullam dapibus dapibus tellus, vel ullamcorper neque iaculis at. Suspendisse sed dignissim ex. Praesent at dolor at enim pellentesque maximus at in massa. Donec et auctor neque. Integer eget ex est. Mauris efficitur, lectus ac pulvinar pulvinar, arcu elit convallis arcu, ut faucibus risus tortor a purus. Vestibulum id metus condimentum, scelerisque purus sed, cursus enim. Sed consequat, elit eu tempor facilisis, quam ligula luctus tortor, vitae suscipit urna lacus ac urna. Curabitur ornare nisl sed augue commodo, vitae porta ligula fringilla. Proin eget augue eu nunc luctus facilisis. Mauris dictum ante non faucibus sollicitudin. Etiam et vestibulum purus, in suscipit nisi. Sed vel consequat nisi, eget molestie arcu. Donec ornare interdum fermentum. Nunc sed lobortis nibh. Aenean at dolor ullamcorper, fringilla leo nec, semper diam. Integer mattis vitae tellus eget dictum. Etiam quis lacinia eros. Sed vitae laoreet ipsum, ac bibendum dolor. Duis at suscipit erat, ac sagittis dolor. In tempus lacus non odio iaculis, eu pellentesque tortor hendrerit. Sed magna ante, eleifend iaculis interdum id, ornare sed ipsum. Aenean ut mauris et ligula finibus finibus sit amet sed eros. Morbi hendrerit enim sit amet vehicula cursus. Curabitur faucibus urna non.";
const start = Date.now();
const element = parseString(currentScene);
{
document.getElementById('testOutput').appendChild(element);
}
const end = Date.now();
console.log
({
'Time elapsed': ( end - start ) + ' ms',
'New element': element,
});
#testOutput div
{
outline: 1px dashed lightblue;
padding: 5px;
display: inline-block;
}
#testOutput span
{
outline: 1px dotted lightgray;
font-family: monospace;
}
<div id="testOutput"></div>
totalCharsDrawnvariable? Isn't it the same aswidthCounter?innerHTML, which involves reading & writing the property a lot. Why don't you prepare the whole ASCII thing in a variable and update theinnerHTMLafterwards? Performance would be much better.