function SinceWhen(receivedDate, currentDate, language) { const ONE_SECOND = 1000; const ONE_MINUTE = ONE_SECOND * 60; const ONE_HOUR = ONE_MINUTE * 60; const ONE_DAY = ONE_HOUR * 24; const SECOND_EN = "second"; const MINUTE_EN = "minute"; const HOUR_EN = "hour"; const DAY_EN = "day"; const NOW_EN = "Just now"; const YESTERDAY_EN = "Yesterday"; const SECOND_FR = "seconde"; const MINUTE_FR = "minute"; const HOUR_FR = "heure"; const DAY_FR = "jour"; const NOW_FR = "à l'instant"; const YESTERDAY_FR = "hier"; var junk , ms = currentDate - receivedDate; , elapsedDays = parseInt(ms / ONE_DAY,10) , elapsedHours = parseInt(ms / ONE_HOUR,10) , elapsedMinutes = parseInt(ms / ONE_MINUTE, 10) , elapsedSeconds = parseInt(ms / ONE_SECOND, 10) ; return language == 1 ? (elapsedDays > 0 ? (elapsedDays === 1 ? YESTERDAY_EN : getString(DAY_EN, elapsedDays, 1) ) : (elapsedHours > 0 ? getString(HOUR_EN, elapsedHours, 1) : (elapsedMinutes > 0 ? getString(MINUTE_EN, elapsedMinutes, 1) : (elapsedSeconds > 10 ? getString(SECOND_EN, elapsedSeconds, 1) : NOW_EN ) ) ) ) : (elapsedDays > 0 ? (elapsedDays === 1 ? YESTERDAY_FR : getString(DAY_FR, elapsedDays) ) : (elapsedHours > 0 ? getString(HOUR_FR, elapsedHours) : (elapsedMinutes > 0 ? getString(MINUTE_FR, elapsedMinutes) : (elapsedSeconds > 10 ? getString(SECOND_FR, elapsedSeconds) : NOW_FR ) ) ) ) ; } function getString(span, length, language) { return language == 1 ? (length === 1 ? "One " + span + " ago" : length + " " + span + "s ago" ) : "Il y a " + (length === 1 ? "un" + (span === 'DAY_FR' ? '' : 'e') + " " + span : length + " " + span + "s" ) ; }>>Something is very slow here if I have about 200 items on the page. I would have expected that to slow around 40,000. Anyone would have an idea on how to optimize this logic to avoid this javascript latency?
function SinceWhen(receivedDate, currentDate, language) { > const ONE_SECOND = 1000; > const ONE_MINUTE = ONE_SECOND * 60; > const ONE_HOUR = ONE_MINUTE * 60; > const ONE_DAY = ONE_HOUR * 24; > > const SECOND = "second"; > const MINUTE = "minute"; > const HOUR = "hour"; > const DAY = "day"; > const NOW = "Just now"; > const YESTERDAY = "Yesterday"; > > var retstring = ""; > > var elapsedDays = parseInt((currentDate - receivedDate) / ONE_DAY,10); > if (elapsedDays > 0) { > if (elapsedDays === 1){ > retstring = YESTERDAY; > } else { > retString = getString(DAY, elapsedSeconds); > } > } else { > var elapsedHours = parseInt( (currentDate - receivedDate) / ONE_HOUR,10); > if (elapsedHours > 0) { > retString = getString(HOUR, elapsedSeconds); > } else { > var elapsedMinutes = parseInt((currentDate - receivedDate) / ONE_MINUTE, 10); > if (elapsedMinutes > 0) { > retString = getString(MINUTE, elapsedSeconds); > } else { > var elapsedSeconds = parseInt((currentDate - receivedDate) / ONE_SECOND, 10); > if (elapsedSeconds < 10) { > retstring = NOW > } else { > retString = getString(SECOND, elapsedSeconds); > } > } > } > } > return retstring; > } > > function getString(span, length) { > if (length === 1) { > return "One " + span + " ago"; > } else { > return length + " " + span + "s ago"; > } > }Not properly tested :-} Not dealing with the language issue (which could be handled in the getString() method) But I'm not sure it would improve performance - manipulating the DOM is probably taking most of the time.