21 kroków do super szybkiego javascript

Sep 17, 2025
Jak
Speed up JavaScript
(Kredyt obrazu: Pexels.com)

Na pierwszy rzut oka przetwarzanie równoległe brzmi jak zaproszenie do swobodnego lunchu - możliwość korzystania z procesorów wielordzeniowych bardziej efektywnie podać kod ogromny zwiększenie prędkości. Praktyczne doświadczenie pokazuje, że tak nie zawsze jest: niektóre problemy są niemożliwe do równoległego. Oprócz tego, równoległy wykonanie prowadzi do całej rodziny nowych problemów, które nie są widoczne na maszynach jednorzędowych.

Kod równoległy może zasadniczo podział na dwie grupy pracy. Pierwsza grupa jest klasyczna prędkość wzrostu - jeśli Twój program musi przesiać przez 3000 obrazów, dzielenie pracy oznacza, że ​​więcej zdjęć można przetworzyć w dowolnym momencie. Podczas gdy zdecydowanie korzystny, ten rodzaj zadania rzadko napotkany jest w codziennym rozwoju sieci Web. (Jeśli tworzysz ciężką stronę obrazu, upewnij się, że przywrócisz je z przyzwoitym magazyn w chmurze ).

Bardziej powszechna forma pracy równoległości działa wokół zadań długoterminowych, które nie wymagają dużej ilości czasu procesora. Dobrym przykładem na to będzie czekał na pobieranie lub jakiś rodzaj wejścia urządzenia: jeśli odbywa się to w równoległej modzie, reszta GUI nie musi być zablokowana. Biorąc pod uwagę, że użytkownicy mają tendencję do zrozumienia problemów "Dlaczego przycisk nie kliknie", może to prowadzić do zwiększonej satysfakcji użytkownika, nawet jeśli rzeczywista prędkość nie zwiększa się.

Jeśli potrzebujesz nowych zasobów, aby pomóc Ci kodować mądrzej, sprawdź nasz przewodnik po najlepszych Narzędzia do projektowania stron internetowych. z 2019 r. Jeśli chcesz całkowicie uniknąć kodu, zaprojektuj swoją witrynę najlepiej Kreator strony internetowej i upewnij się, że wybrałeś idealny hosting usługa z naszym przewodnikiem.

01. Egzekucja interpretacyjna

 var sleep = wymagać ("sen");

Pracownik funkcyjny () {
    Console.log ("Pracownik Up")
    sleep.msleep (1000)
    Console.log ("Pracownik Down")
}

SetInterval (pracownik, 2000);
While (1 == 1)
{
    sleep.msleep (250)
    Console.log ("Hello z głównego")
} & GT; 

Zacznijmy z małym przykładem na podstawie ulubionego ulubionego: setinterval. funkcjonować. Potrzeba odniesienia do funkcji i wartości numerycznej określono w milisekundach. Następnie funkcja jest okresowo zwolniona, gdy wygasa czas opóźnienia.

02. Utworzenie upadku

 NPM instaluje sen
NPM Example1.js 

Używając sen() Funkcja wymaga od nas załadowania modułu snu do lokalnego projektu NPM. Działa jako interfejs do biblioteki snu systemu operacyjnego - nie zastanawiaj się, czy kompilator stacji roboczej jest zwolniony podczas wdrażania pakietu.

03. Okolice wielozadaniowości

Speed up JavaScript: 03

(Kredyt obrazu: Tam Hanna)

Po uruchomieniu tego programu znajdziesz się skonfrontowany z wyjściem podobnym do tego, który pokazano na rysunku, dołączając do tego kroku. Jest oczywiste, że nasz pracownik nigdy się nie przywołuje - coś musi być nie tak z funkcją SetInterval.

04. Perils wielozadaniowani, część 2

Nowoczesne przeglądarki wyposażają każdą kartę za pomocą jednego wątku javascript. Ostrożnie spojrzenie na naszą pętlę ujawnia, że ​​jest nieograniczona. Oznacza to, że będzie działać na zawsze i nigdy nie udzieli kontroli. Jeśli się uwzględni SetInterval () Działa z wiadomością, jej ładunek nigdy nie zostanie uruchomiony, ponieważ obsługiwacz wiadomości jest zablokowany od uruchomienia.

05. Skup się na wichłonerach

 Const Bar = () = & GT; Console.log ("Bar")

Const Baz = () = & GT; Console.log ("Baz")

const foo = () = & gt; {
  Console.log ("foo")
  Settimeout (bar, 0)
  baz ()
}

bla()

Blog Flavio Cops , zapewnia niezwykle interesujący bit kodu ilustrujący problem. Po uruchomieniu daje wyjście wyświetlane na rysunku z powodu zablokowanego kolejki komunikatów bla() zrezygnuje z kontroli głównego wątku.

06. Wprowadź wątły

Speed up JavaScript: 06

(Kredyt obrazu: Tam Hanna)

Biorąc pod uwagę, że bazowy system operacyjny jest w stanie wykonać prewencyjną wielozadaniowość, pozwól nam wykorzystać swoje możliwości przez tarło nici za pośrednictwem dedykowanych API o nazwie internetowych, które cieszą się szeroko zakrojonym wsparciem. Figura towarzysząca temu krokowi pokazuje aktualna lista dla funkcji.

07. Utwórz dodatkowy plik

Console.log ("Pracownik mówi Hello!");
console.log ("pracownik do góry");
While (1 == 1)
{
   konsola.log ("x");
}

Webworkers nie mogą się rozpocząć z ładunkiem funkcyjnym. Zamiast tego wymagany jest nowy plik, który zawiera kod przeznaczony do uruchomienia w gwincie. W przypadku naszego przykładu, example7thread.js. Czy przedstawiono treści do tego kroku.

08. Uruchom pracownika ...

 Const pracownik = wymagać ("pracownik_threads");

var myworker = new pracownik.worker ("./
example7thread.js ');
var myworker2 = nowy pracownik.worker ("./
example7thread.js '); 

Nasz pracownik jest gotowy na czas podróży. Specjalnościach środowiska wykonawczego Node.js zmuszają nas do włączenia modułu Włókna robotniczego i przejść w ścieżce względnej - problemy nie są skierowane do przeglądarki. Ponadto nie zastanawiaj się nad Brakujący start () Połączenie - pracownik internetowy wyrusza, gdy instancja jest dostępna online.

09. ... i zrozum jego wyniki

Speed up JavaScript: 09

(Kredyt obrazu: Tam Hanna)

Dostawa wiadomości zazwyczaj wymaga pewnego rodzaju interakcji między wykonawcą a resztą systemu operacyjnego. Niestety, nasza niekończąca się pętla blokuje ten proces - co oznacza, że ​​tylko jedna z wiadomości pojawia się przed "wielkim stoiskiem".

10. Dodaj maskę

Speed up JavaScript: 10

(Kredyt obrazu: Tam Hanna)
 Const pracownik = wymagać ("pracownik_threads");

var myworker = new pracownik.worker ("./
example7thread.js ');
var myworker2 = nowy pracownik.worker ("./
example7thread.js ');


While (1 == 1)
{

}

Inny eksperyment obejmuje umieszczenie pustej pętli po dwóch inwokacjach konstruktorów. W tym przypadku wątki nigdy nie zaczną działać - komunikat o wywołaniu nigdy nie przybywa do systemu operacyjnego.

11. Komunikacja międzypokresowa

Podczas gdy pracownicy prowadzący szczelne niekończące się pętle mają problemy wystawiane powyżej, procedury mogą komunikować się ze sobą. Odbywa się to za pośrednictwem interfejsu przekazywania wiadomości - pomyśl o tym jako obiekt, który pozwala przekazać obiekt wiadomości z nadawcy do odbiorcy przez granice wątków.

12. Dlaczego przekazanie wiadomości?

Oprócz korzyści płynących z możliwością koordynowania wątków E FF ługowanie (i zmniejszone ryzyko "kolizji", znane również jako warunki wyścigowe), wiadomość przechodząca do głównego wątku jest jedynym sposobem na interakcję z domem, ze względu na Di FF iplerowanie Bezpieczne stosy gui.

13. Przejdź do przeglądarki

Wdrażanie wiadomości przechodzące w węzeł.js jest nużący. Przenieś kod do sieci - Zacznij od utworzenia wiązki HTML, która ładuje się Examplempi.js. . Bądź świadomy, że ten kod może być uruchomiony tylko z serwera WWW LocalHost z powodu ograniczeń pochodzenia Domu.

14. Skonfiguruj skrzynkę pocztową ...

 var myworker = Nowy pracownik ("./
Examplempithread.js ');
var myworker2 = nowy pracownik ("./
Examplempithread.js ');


myworker.onmessage = funkcja (e)
{
konsola.log (e);
}

myworker2.onmessage = funkcja (e)
{
konsola.log (e);
}

Każdy pracownik naraża właściwość Onmessage, która zajmuje funkcję odniesienia, który musi zostać wywołany, gdy pojawi się komunikat z drugiego końca. Wiadomości przychodzące są po prostu przekazywane do konsoli przeglądarki z głównego wątku.

15. ... i nakarm go od pracownika

 Postmessage ("Pracownik mówi Hello!");
Postmessage ("Pracownik Up");
While (1 == 1)
{
   Postmessage ("x");
}

Wysyłanie wiadomości do skrzynki pocztowej jest realizowane przez wywołanie funkcji pocztowej wiadomości. Należy pamiętać, że pracownik może również wdrożyć Onmessage. Wydarzenie, które mogłyby otrzymywać informacje z kogenitu "posiada obiekt instancji pracownika.

16. Kopnij go ...

W tym momencie, kod jest gotowy do uruchomienia. Konsola deweloperska nie jest zalana wiadomościami ze względu na wysokie poleczność E FF interfejsu MPI, co oznacza, że ​​dane mogą podróżować po systemie E FF icliently.

17. Async i czekaj

Speed up JavaScript: 17

(Kredyt obrazu: Tam Hanna)

Dodatek Microsoft asynchroniczny i czeka słowa kluczowe zmodyfikowane historię C # i VisualBasic.net. Zasadniczo metoda oznaczona async jest współpracuje z resztą programu. Wyniki można następnie zbierać za pomocą funkcji oczekiwania.

18. Wymień nasze śpiące

 Const Sleep = (Milliseconds) = & GT; {
  zwróć nową obietnicę (rozstrzygnąć = & gt;
Settimeout (postanowienie, milisekund))
} 

Biorąc pod uwagę, że przeglądarki są pod ciężkim ograniczeniami, jeśli chodzi o dostęp do natywnych funkcji, nie możemy ponownie wykorzystać funkcji snu wymienionych wcześniej. Ponadto, jest nieoptymalny, ponieważ zatrzymał cały czas wykonania węzła. Fragment towarzyszący temu krokowi zapewnia bardziej skuteczne podejście.

19. Zrozum kodeks ...

Niniejszy kod zwraca obiekt obietnictwa - jest to kolejna klasa wygody dodana do skryptu Java, próbując ułatwić wielowątkowość. Będziesz musiał wywołać metodę rozwiązania za pośrednictwem settimeout. , zapewniając, że kod musi "usiąść" trochę czasu.

20. ... i wdrożyć go gdzieś

Połączenia wezwania są dozwolone tylko wewnątrz funkcji asynchronizacji. Oznacza to, że pracownik potrzebuje przepisywania - zacznij od wywołania funkcji nacera asynchronizacji. Obsługuje resztę interakcji kodu.

 Const Sleep = (Milliseconds) = & GT; {
  zwróć nową obietnicę (rozstrzygnąć = & gt;
Settimeout (postanowienie, milisekund))
}
Postmessage ("Pracownik mówi Hello!");
Postmessage ("Pracownik Up");
pracownik()
Async Pracownik funkcji () {
While (1 == 1)
{
   Postmessage ("x");
   oczekuj snu (1000);
}
} 

21. Wykorzystaj moc rodzimego!

Deweloperzy pracujący na kodzie Node.js nie powinni zapominać, że mogą - zwykle - tworzyć również całkowicie rodzime moduły, jeśli potrzebna jest niezwykle wysoka wydajność. Mogą one skorzystać z różnych API systemu operacyjnego, ale można również zapisać w językach programowania, które kompilacyjne do kodu maszyny.

Ten artykuł został pierwotnie opublikowany w wydaniu 291 programu Creative Web Design Magazine Projektant stron internetowych . Kup problem 291. .

Czytaj więcej:

  • Najlepsze biblioteki JavaScript
  • 25 najlepszych API JavaScript
  • Naprawdę przydatne tutoriale projektowe stron internetowych

Jak - Najpopularniejsze artykuły

Komponowanie w Animacji: Dowiedz się podstaw

Jak Sep 17, 2025

(Kredyt obrazu: projekt Blackmagic) W tym artykule zagłębimy się w sztukę komponowania dla 3D. Eksplorowanie tego..


Marka Typografia: Kompletny przewodnik

Jak Sep 17, 2025

Pentagram stworzył bespoke typefeface dla teatru publicznego (Kredyt obrazu: Pentagram dla publiczności) ..


Jak używać inteligentnych warstw w Photoshopie

Jak Sep 17, 2025

Przy uwzględnieniu powtarzających się wzorów i wzorów w ilustracji, niewiele narzędzi będzie tak przydatne lub jako potę�..


Samouczek PROCREATE: Nowe narzędzia badane

Jak Sep 17, 2025

Kiedy po raz pierwszy odkryłem ProCreee byłem oszołomiony przez pomysł posiadania przenośnego urządzenia, które umożliwi�..


Zaprojektuj odtwarzalny awatar do gry wideo

Jak Sep 17, 2025

Dla tego Photoshop Tutorial. , Będę tworzyć odtwarzanego człowieka, kobiety Postać z gry wideo ..


5 wskazówek na rzeźbienie w podwójnym czasie

Jak Sep 17, 2025

Rzeźbianie naprawdę szczegółowego stworzenia 3D może zająć dni - ale nadal jest niesamowite, jak daleko możesz uzyskać za godzinę. Ten model Nubian Ibex został wyrzeźbiony przez ..


Utwórz tapetę Low Poly w C4D

Jak Sep 17, 2025

Strona 1 z 2: Utwórz tapetę Low Poly w C4D: Kroki 01-06 Utwórz tapetę..


Jak doskonalić włosy w portretach

Jak Sep 17, 2025

Strona 1 z 2: Strona 1 Strona 1 Strona 2..


Kategorie