Wie benutzt man Javascript mit Node.js Dateien?

1 Antwort

(...) ob es irgend ein Vorteil bringt wenn man entweder Javascript nur von Node.js oder groesenteils ueber den Webbrowser ausfuehren laest;

Wenn JavaScript im Webbrowser ausgeführt wird, ist es in seiner Funktionalität beschränkt. Du kannst in keine Dateien schreiben, es gilt CORS und im schlimmsten Fall deaktiviert der Nutzer die Ausführung einfach. Allerdings erlaubt die Ausführung im Browser auch eine direktere Interaktion mit dem Nutzer.

Ein Klick kann sofort z.B. ausgewertet und mit einem entsprechenden Verhalten beantwortet werden. Mit JavaScript ist es möglich, im Hintergrund, während der Nutzer auf der Seite verweilt, Anfragen an den Server zu schicken und Antworten von diesem zu empfangen, ohne dass die Seite zwischenzeitlich neu geladen werden müsste.

Des Weiteren können im Browser einzelne, kleine Berechnungen vorgenommen werden, was den Server ein Stück weit entlastet. Zum Beispiel könnte anhand vorhandener geometrischer Daten interpoliert und ein Diagramm erstellt werden. Oder noch ein einfacheres Beispiel: Ein BMI-Rechner. Die Daten können im Browser ausgelesen und via Formel ausgerechnet werden. Es bedarf keiner komplexer Abläufe, die erst der Server habhaft werden müsste.

Wenn JavaScript auf der Serverseite ausgeführt wird, kann es sicherer mit sensiblen Daten umgehen. Sei es für eine manipulationsbefreitere Validitätsprüfung von Daten (Login / Registrierung) oder für die Handhabung von Verbindungsdaten zu einer Datenbank, die Inhalte für die Webseite liefert. Der Server ist vom Nutzer stärker abgeschottet. Bei einer Ausführung im Browser könnte ein Nutzer hingegen jederzeit problemlos auf den Quellcode zugreifen.

Außerdem können serverseitig allgemeingültige Daten gut berechnet (und bei Bedarf in mehreren Stufen gecached) werden. Die erwartete Rechenleistung lässt sich besser einschätzen, als die für den Seitenbesucher (der die Webseite ja sowohl auf einem Desktop-PC, als auch auf einem mobilen Endgerät aufrufen könnte). Wenn notwendig, lässt sich die Serverarchitektur skalieren / aufstocken und Aufgaben können ebenso an andere Programme/Prozesse verteilt werden.

Auch bestimmte Browserunterschiede sind nicht mehr von so hoher Relevanz. Ein Zielbrowser, der nur eine reine Textdarstellung unterstützt, hindert den Webserver trotzdem nicht an der Ausführung von seinen Aufgaben und Berechnungen.

(...) beziehungsweise ist es ueberhaupt moeglich das man das Javascript welches man in der index.html importiert auch ueber Node.js laufen laest.

Die Daten, die an den Browser geschickt werden (HTML, JavaScript, Bilder, Stylesheets, ...) werden als statische Ressourcen gewertet. Als ihr ausführender Kontext ist der Browser gedacht. Der Webserver soll die Daten nicht rendern/präsentieren, sondern der Webbrowser.

Wenn eine Ver-/Bearbeitung statischer Ressourcen stattfindet, dann eher für eine Validation, Modifikation oder Optimierung (Beispiel: Bilderkomprimierung, Minifying).

Ob das JavaScript, welches eigentlich für die Ausführung im Browser gedacht war, auch im Node-Kontext lauffähig wäre, hängt von seinen Abhängigkeiten im Code ab.

Als Beispiel zwei Funktionen:

function getSum(numberOne, numberTwo) {
  return numberOne + numberTwo;
}

function getSum(numberOne, numberTwo) {
  alert(numberOne + numberTwo);
}

Die erste Funktion ließe sich problemlos im Node-Kontext ausführen, da sie nur Elemente verwendet, die auch in Node bekannt sind. Die zweite Funktion hingegen bedient sich einer Funktion der DOM API (window.alert), die vom Browser gestellt wird. Damit sie in Node interpretiert werden könnte, müsste es also einen DOM API-Ersatz geben. Das Verhalten würde sich auf jeden Fall von dem im Browser unterscheiden, denn in Node gibt es keine visuelle Repräsentation eines UI (keine Fenster/Popups, Bedienungsoberflächen).

alberttomasusw 
Fragesteller
 28.03.2021, 22:34

ich glaube manche sachen kann man aber nur ùit browser javascript code machen, zum beispiel wenn ich mit einem onclick="" event ein html element aender willn dann muss der javascript code dafuer, denke ich mal, auch in der html datei stehen und vom browser ausgefuerht werden, oder geht das auch mit node.js?

0
regex9  28.03.2021, 23:53
@alberttomasusw

click-Events werden von den Oberflächenkomponenten ausgelöst, die vom Browser gerendert / erzeugt wurden (das gilt ebenso für alle andere Events, wie change, input, load, ...). Daher lassen sie sich (direkt) auch nur im Browser handhaben. Andere Programme (wie der weit entfernte Webserver auf der node-Plattform) bekommen davor nur etwas mit, wenn es ihnen der Browser explizit mitteilt.

Wenn du Node.js im Browser ausführen wolltest, müsstest du den Browser um ein Plugin o.ä. erweitern. Um dann (wie normales JS im Browser) auf einzelne Webseitenelemente zugreifen zu können, bräuchte diese Erweiterung ebenso eine Schnittstelle zur DOM API.

1
alberttomasusw 
Fragesteller
 29.03.2021, 00:44
@regex9

ich nehme an das man dann normalerweise immer ueber Javascript/Ajax Abfragen von der HTML Seite aus, die Infos vom Node.js Webserver/Datenbank holt, sehe ich das richtig?

0
regex9  29.03.2021, 01:31
@alberttomasusw

Genau. Statt AJAX gibt es inzwischen auch noch modernere Technologien wie die Fetch API oder WebSockets.

0
alberttomasusw 
Fragesteller
 29.03.2021, 10:12
@regex9

Fetch API kenne ich noch nicht aber Websockets sind auch nicht gerade eine einfache Loesung im Gegensatz zu Ajax da brauch man doch nur paar Zeilen Code bei Ajax. Bei Websockets habe ich schon oft gelesen das man das nur einsetzen soll wenn anders nicht geht, weil da koennen auch oft Probleme aufkommen.

0
regex9  29.03.2021, 15:01
@alberttomasusw

WebSockets bieten sich immer dann an, wenn man eine sehr schnelle, sichere und bidirektionale Netzwerkverbindung über einen längeren Zeitraum herstellen möchte.

Der Tippaufwand in JavaScript ist ungefähr gleich so groß, wie bei einem XMLHttpRequest:

const webSocket = new WebSockets("ws://some-address");
webSocket.onopen = evt => webSocket.send("Hello");
webSocket.onmessage = evt => { /* ... */ };

const request = new XMLHttpRequest();
request.onreadystatechange = () => { /* ... */ };
request.open("POST", "some address ...", true);
request.send("data=hello");

Letzerer stellt natürlich nur einen Request an den Server und die Verbindung wird danach gleich wieder geschlossen.

1
alberttomasusw 
Fragesteller
 29.03.2021, 15:08
@regex9

Aber Websockets habe ich gehoert machen manchmal Probleme, Ajax hingegen funktioniert denke ich jetzt mal immer, oder?

0
regex9  30.03.2021, 19:07
@alberttomasusw

Genauso wie WebSockets Probleme machen können, verhält es sich mit AJAX. Ein häufiger Problemfall sind die Restriktionen, die durch CORS auftreten (wobei das wiederum auch ein gewolltes Verhalten ist). Allgemein bekannt dafür, problembehaftet zu sein, sind beide Technologien aber nicht.

0
alberttomasusw 
Fragesteller
 31.03.2021, 10:35
@regex9

Websockets bauen aber auch eine fortlaufende verbindung auf, wenn man beispielweise nur Push Notification zeigen will ist ein Websocket etwas uebetrieben oder? Ich fand eigentlich Websockets auch ganz gut, aber dann habe ich viele kritische Sachen gelesen, das man es nur benutzen soll wenn was anderes nicht geht. ich will beispielweise eine Webseite bauen wo Leute sich anmelden bilder und texte teilen, likes verteilen usw. dann soll man auch sehen wenn jemand dir ein Like gibt oder dir eine nachricht sendet, also Push Notification und erst wollte ich Websockets dafuer einsetzen und jetzt denke ich das ich besser sowas wie Server Send Events benutzen sollte, weil damit kann der Server auch den Benutzer eine nachricht schicken ohne Websocket.

0
regex9  31.03.2021, 11:20
@alberttomasusw
(...) wenn man beispielweise nur Push Notification zeigen will ist ein Websocket etwas uebetrieben oder?

Kommt auf das Intervall an, mit dem nach Neuerungen geprüft werden soll.

Lösungsoptionen gibt es für dein Problem ausreichend. Seien es WebSockets, SSE (wenn du nur Nachrichten vom Server benötigst) oder Comet-Techniken (z.B. long polling mit AJAX).

0
alberttomasusw 
Fragesteller
 31.03.2021, 11:46
@regex9

Welche Loesung findest du besser SSE oder Long Polling und Ajax? ich nehme aber mal an das die Resourcen weniger verbraucht werden und die Performance besser ist wenn man kein Websocket benutzt wenn man nur ab und zu diese Push Nachrichten zeigen will

0
regex9  02.04.2021, 09:21
@alberttomasusw

Ich habe mir deine Anforderungen noch einmal durchgelesen. Ich denke, mit SSE wärst du für deinen Anwendungsfall gut beraten.

0