Vorladen oder nachladen in Node.js?

  • Vorladen oder nachladen in Node.js?

    Hallo

    In PHP versuche ich, bei Scriptstart, so wenig "Last" wie möglich zu erzeugen und dann je nach Bedarf einzelne Komponenten nachzuladen.
    Ich habe aber den Eindruck, dass das genaue Gegenteil in Node der Fall ist. Da ich die App ja nur einmal starte, habe ich die Last ja nur beim ersten Start. Jeder Aufruf wird dann nur noch ausgeührt. Ob ich jetzt 5 oder 50 Komponenten geladen habe, spielt dann keine Rolle mehr (so lange ich diese nicht verwende)?

    Früher nannte man das noch Core. Ich würde gerne wissen ob ich mit meinem Ansatz in die richtige Richtung gehe oder ob ich total auf dem Holzweg bin.

    system ist ein Objekt in dem ich alle wichtigen Funktionen geladen habe.
    system.db, system.config, system.event, system.loader, usw sind Funktionen, die ich immer benötige. Ich lade meine Dateien auch nicht direkt über require() sondern über den system.loader. So kann ich später Pfade ändern und muss diese nicht in jedem Script anpassen sondern nur noch im loader. Der Vorteil ist zudem, dass ich nicht mehr alles extra mit require laden muss, sondern system direkt mit einem require zur Verfügung habe.

    Ich möchte auch auf "freie" Datenbank-Querys verzichten und lediglich Models mit Schema verwenden. Das sollte Tests vereinfachen, Fehler verhindern und Sicherheit erhöhen.

    Hier würde ich Handler-Objekte einbauen, die mir die Objekte verwalten.


    system.model.{categorie}.{model_name}.function wäre z.B.
    system.model.account.user.createUser();
    system.model.account.download.getDownloads();
    In PHP wäre es fatal alles zu laden, da es nach dem Aufruf wieder verloren wäre. In Node sollte es den Speicherbedarf erhöhen, aber dafür stabiler sein, da es beim Nachladen zu keinem Fehler kommen kann.

    Liege ich so weit noch richtig? :|

    Wie verwaltet man seine routen richtig? Habe mich bisher noch nicht so wirklich damit befasst um eine ordentliche Idee formulieren zu können.
  • MaxDau schrieb:

    In PHP versuche ich, bei Scriptstart, so wenig "Last" wie möglich zu erzeugen und dann je nach Bedarf einzelne Komponenten nachzuladen.
    Ich habe aber den Eindruck, dass das genaue Gegenteil in Node der Fall ist. Da ich die App ja nur einmal starte, habe ich die Last ja nur beim ersten Start. Jeder Aufruf wird dann nur noch ausgeührt. Ob ich jetzt 5 oder 50 Komponenten geladen habe, spielt dann keine Rolle mehr (so lange ich diese nicht verwende)?
    Richtig, da die App nur einmal geladen wird, spielt die Anzahl an geladenen Modulen für den einzelnen Aufruf keine (nennenswerte) Rolle, sofern beim Aufruf davon nichts ausgeführt wird.

    Eine große Menge an geladenen Modulen an sich würde ggf. nur die Garbage Collection minimal verlangsamen, dieser Effekt ist Vergleich zum Nachladen/Initialisieren von Modulen bzw. Komponenten während des Aufrufes jedoch nicht von Bedeutung.

    MaxDau schrieb:

    In PHP wäre es fatal alles zu laden, da es nach dem Aufruf wieder verloren wäre. In Node sollte es den Speicherbedarf erhöhen, aber dafür stabiler sein, da es beim Nachladen zu keinem Fehler kommen kann.

    Liege ich so weit noch richtig?
    Ja, je mehr Module du geladen hast, desto mehr Speicherplatz verwendet der Node.js-Prozess natürlich. Dies aber auch nur einmalig (bzw. so oft wie viele Prozess-Instanzen du am laufen hast, z.B. im Falle von Clustering) und nicht für jede Anfrage extra.

    MaxDau schrieb:

    Wie verwaltet man seine routen richtig? Habe mich bisher noch nicht so wirklich damit befasst um eine ordentliche Idee formulieren zu können.
    Welchen Routen meinst du damit genau? Die der einzelnen Module?
    Grüße,
    NodeCode

    NodeCode.de
  • Nein, ich meinte eher die Methode in Kombination mit der URI.
    .post(/home,func())

    Ich habe gesehen, dass ich mehrere Pfade an eine Funktion binden kann. Aber das führt alles nicht ans Ziel. Ich möchte mehrsprachige SEO-URL´s, daher muss ich irgendwas davor "schalten", was mir den Pfad zur Route zeigt. Normal würde ich das über DB machen.
    URI | route | language_id / language
    /account.html | /account | en
    /konto.html | /account | de

    Ich würde aber auch gerne wissen, wie man einfache Seiten mit vielen URI´s ohne DB richtig verwalten kann.
    Kenne z.B. eine Seite mit über 1.200 Pfaden zu HTML-Dateien. Ich möchte nicht wissen, wie viele route.get() man hier schreiben müsste und wer da noch einen Überblick behalten sollte.
  • In express, koa, spirit, ... gibt es die Möglichkeit mit Routenparametern zu arbeiten.

    Mit

    JavaScript-Quellcode

    1. app.get('/:lang/index', (req, res) => {
    2. res.render('index', { lang: req.params.lang })
    3. })
    könnte man sprachabhängig eine index-Seite rendern.


    Etwas umgänglicher wird es, wenn man noch mit middleware und routern arbeitet.

    JavaScript-Quellcode

    1. app.use('/:lang', (req, res, next) => {
    2. res.locals.lang = req.params.lang
    3. next()
    4. }, require('./routes/baseroute'))
    Jetzt ist res.locals.lang in alle routen im Base-Router verfügbar und wird zudem automatisch an res.render mit übergeben.

    Für statische HTML-Seiten gibt es zudem noch express.static.