Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Looking for more performance
Message
From
14/04/2016 12:44:57
 
 
To
14/04/2016 07:05:14
General information
Forum:
Javascript
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01634763
Message ID:
01634797
Views:
38
Sweet!

Only criticism is that you are calculating hours,mins etc where they may not be needed.

Maybe language strings could be placed in a 2-dim array to match the language code?

IAC I'm not going to try to improve on it :-}

>Love short code contests!
>
>
>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?
>>
>>Seems to me you are doing some calculations unnecessarily (e.g current date every time, hours, minutes and seconds when only day is of interest). Also I think the calculations themselves could be simplified. This looks shorter:
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.
Previous
Reply
Map
View

Click here to load this message in the networking platform