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

question-closed Odwleczone ładowanie modułów z użyciem getter

Hosting forpsi easy 1 pln
+1 głos
127 wizyt
pytanie zadane 21 maja 2021 w JavaScript przez Author[] Gaduła (3,130 p.)
zamknięte 21 maja 2021 przez Author[]

Próbuję odroczyć ładowanie modułów w nodejs (wraz z Electron) za pomocą funkcji getter:

Object.defineProperty(global, "path", {
    get: function(){
         if (!this.path.value)
            this.path.value = require("path");
         return this.path.value;
    }
})

Problem polega na tym że przy próbie sprawdzenia wartości this.path.value po raz kolejny wyzwala się getter co w ostateczności prowadzi do błędu przepełnienia stosu wywołań.

Czy można zmienić ten kod tak aby getter wyzwalał się tylko raz? Ewentualnie jak inaczej odroczyć ładowanie modułu.

komentarz zamknięcia: Udało się rozwiązać problem
1
komentarz 21 maja 2021 przez ScriptyChris Mędrzec (190,190 p.)

Czy możesz podać szerszy kontekst? Jak chcesz tego używać? To bardziej wygląda na próbę cache'owania modułu (co Node robi sam domyślnie) niż lazy loading (jeśli to masz na myśli przez "odraczanie").

komentarz 21 maja 2021 przez Author[] Gaduła (3,130 p.)
Chodzi o stworzenie zmiennej globalnej przechowującej moduł. Zmienna ta powinna być dostępna od samego rozpoczęcia programu. Przy pierwszej próbie dostępu do zmiennej jest ona zastępowana prawdziwym modułem.

Chodzi mi o to żeby zmienna była ładowana dopiero przy pierwszym jej użyciu. Z racji iż jest to Electron JS, każde opóźnienie ładowania modułu przyśpiesza czas startu aplikacji.

Niestety nie mogę użyć funkcji import() która jest asynchroniczna bo konstruktory obiektów są synchroniczne.
1
komentarz 21 maja 2021 przez Author[] Gaduła (3,130 p.)

@ScriptyChris, dziękuję za pomoc. Źle rozumiałem cache'owania moduł. Doczytałem że moduł nie jest ładowany ponownie tylko ładowany z require.cache. 

Lazy loading in node.js - Stack Overflow

Wobec tego wystarczy: 

Object.defineProperty(global, "path", {
  get: function(){
    return require("path");
  }
})

 

Podobne pytania

0 głosów
1 odpowiedź 222 wizyt
+2 głosów
1 odpowiedź 264 wizyt
pytanie zadane 31 stycznia w PHP przez Grzegorz Mikina Dyskutant (8,010 p.)
0 głosów
2 odpowiedzi 269 wizyt
pytanie zadane 14 czerwca 2018 w HTML i CSS przez Suska Łukasz Użytkownik (560 p.)

92,105 zapytań

140,763 odpowiedzi

317,744 komentarzy

61,426 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 785p. - Łukasz Eckert
  2. 777p. - Dawid128
  3. 738p. - Eryk Andrzejewski
  4. 712p. - rucin93
  5. 674p. - CC PL
  6. 647p. - nidomika
  7. 637p. - Michal Drewniak
  8. 636p. - Mikbac
  9. 595p. - the Bielsky
  10. 573p. - robwarsz
  11. 571p. - TheLukaszNs
  12. 537p. - 13NOONE37
  13. 536p. - Arkadiusz Waluk
  14. 533p. - Henry Saele
  15. 525p. - sefirek
Szczegóły i pełne wyniki

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...