• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Review kodu javascript i optymalizacja

VPS Starter Arubacloud
0 głosów
179 wizyt
pytanie zadane 12 lutego w Nasze projekty przez Piotrek2713 Mądrala (5,500 p.)

Witam. Mam już skończony swój timer w javascript i chciałbym prosić o przegląd kodu, opinię, informację na temat ewentualnych poprawek bądź optymalizacji kodu

Kod javascript zamieszczam na forum w bloczku

const timer = document.querySelector('.timer');
const hours = document.querySelector('#timer-hours');
const minutes = document.querySelector('#timer-minutes');
const seconds = document.querySelector('#timer-seconds');
const alarm = new Audio ('timer.mp3');
let countDownIsOn = false;

function formatNumbers(e)
{
    e.preventDefault();
    const span = e.target;
    if (e.code == 'Delete')
    {
        span.textContent == '00';
        return;
    }

    if (/^\d$/.test(e.key))
    {
        const currentValue = span.textContent, inputValue = e.key;

        let newValue = parseInt(currentValue + inputValue);
        if (newValue > 99) newValue = newValue.toString().slice(-2);
        if (newValue > 59) newValue = inputValue;
        span.textContent = ('00' + newValue).slice(-2);
    }
}

function countDown()
{
    if (hours.textContent == 0 && minutes.textContent == 0 && seconds.textContent == 0)
    {
        alarm.play();
    }
    else
    {
        setTimeout('countDown()', 1000);
        hours.setAttribute('contenteditable', 'false');
        minutes.setAttribute('contenteditable', 'false');
        seconds.setAttribute('contenteditable', 'false');
        if (seconds.textContent>0)
        {
            seconds.textContent--;
            if (seconds.textContent < 10)
            {
                seconds.textContent = '0' + seconds.textContent;
            }
        }
        else
        {
            seconds.textContent = 59;
            if (minutes.textContent>0)
            {
                minutes.textContent--;
                if (minutes.textContent < 10)
                {
                    minutes.textContent = '0' + minutes.textContent;
                }
            }
            else
            {
                minutes.textContent = 59;
                if (hours.textContent>0)
                {
                    hours.textContent--;
                    if (hours.textContent < 10)
                    {
                        hours.textContent = '0' + hours.textContent;
                    }
                }
            }
        }
    }
}
timer.addEventListener('keydown', formatNumbers);
window.addEventListener('keydown', (event) => {
    event.preventDefault();
    if (event.key === 'Enter' && countDownIsOn == false)
    {
        countDownIsOn = true;
        countDown();
    }
    else if (event.key === 'Enter' && countDownIsOn == true)
    {
        alarm.pause();
    }
})

A całość na code pen

1 odpowiedź

+1 głos
odpowiedź 12 lutego przez Ehlert Ekspert (213,900 p.)
wybrane 13 lutego przez Piotrek2713
 
Najlepsza
  • Wszystko jest w globalnym scope'ie, do owrapowania.
  • Jest słaba nomenklatura: formatNumbers brzmi jakby przyjmował tablicę floatów/intów i zwracał tablice stringów w odpowiednim formacie. Tymczasem robi bardzo dużo rzeczy. countDown brzmi jak jakaś prosta funkcja, hook, a robi literalnie wszystko. minutes jak widzę w kodzie to zakładam że to number z liczbą minut. Tymczasem u Ciebie to element.
  • Ja kiedy mam umieścić ifa w ifie, to zastanawiam się jak to napisać czytelniej, aby tego uniknąć. U Ciebie są 4 zagnieżdżone ify, kod jest strasznie nieczytelny.
  • Masz niespójne formatowanie kodu, proponuję zainstalować eslinta. W jsie brackety otwierające są raczej w tej linijce, której dotyczą.
  • Jest dość spory problem z architekturą tego. Proponuję oddzielić logikę od widoku. Niech logika w odpowiednich interwałach aktualizuje swój stan. Widok mając dostęp do tego stanu, niech się odświeża po logice. To chyba najbardziej trywialny podział, który umożliwi czytanie tego ze zrozumieniem.
  • Proponuję żebyś wgl porzucił jsa, zdecydowana większość nowych projektów powstaje teraz w Typescriptcie.
komentarz 13 lutego przez Piotrek2713 Mądrala (5,500 p.)
Dzięki za wyczerpującą odpowiedź. Postaram się na to wszystko zwrócić uwagę

Podobne pytania

0 głosów
3 odpowiedzi 418 wizyt
pytanie zadane 18 kwietnia 2018 w JavaScript przez SzukającyPrzygód Bywalec (2,310 p.)
0 głosów
0 odpowiedzi 271 wizyt
pytanie zadane 1 sierpnia 2016 w JavaScript przez MichałGNU Gaduła (4,330 p.)
0 głosów
2 odpowiedzi 216 wizyt

92,979 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,308 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...