2016-04-16 26 views
0

Ist es möglich, mehrere Dateien in einer Anfrage zu bedienen?Node.js dienen mehrere Dateien in einer Anfrage

Hier ist eine vereinfachte Version meines Codes, um die Homepage unserer Website bei einer Anfrage an unseren node.js-Server zu bedienen, die keine Parameter enthält (es gibt Caching-Code, der die Dateidaten zwischenspeichert, um den Server effizienter zu machen, Fehler zu behandeln) usw.):

var http = require("http"); 

http.createServer(function(req, res){ 
    res.setHeader("Access-Control-Allow-Origin", "*"); 

    if (req.url == "/"){ 
     res.writeHead(200, {"Content-Type": "text/html"}); 

     fs.readFile("./pages/index/index.html", function(err, data){ 
      res.end(data); 
     }); 
    } else if (req.url == "/index.css"){ 
     res.writeHead(200, {"Content-Type": "text/css"}); 

     fs.readFile("./pages/index/index.css", function(err, data){ 
      res.end(data); 
     }); 
    } else if (req.url == "/index.js"){ 
     res.writeHead(200, {"Content-Type": "application/javascript"}); 

     fs.readFile("./pages/index/index.js", function(err, data){ 
      res.end(data); 
     }); 
    } else if (req.url == "/indexBackground.jpg"){ 
     res.writeHead(200, {"Content-Type": "image/jpeg"}); 

     fs.readFile("./pages/index/images/background.jpg", function(err, data){ 
      res.end(data); 
     }); 
    } 

}).listen(port); 

die hTML-Datei selbst importiert externen Bibliotheken mit CDN und die Verweise auf das Stylesheet, Schrift und Bild sieht wie folgt aus:

<link rel="stylesheet" href="https://our-website-url/index.css"> 
<script type="text/javascript" src="https://our-website-url/index.js"></script> 
<img src="https://our-website-url/indexBackground.jpg"> 

die Seite korrekt bedient wird aber 3 separate Anfragen müssen gemacht werden, um Serviere die Seite. Ich könnte mir vorstellen, dass dies die Website langsamer lädt und den Server unnötig belastet.

Ist es möglich, alle 3 Dateien in einer Anfrage zu liefern, obwohl sie unterschiedliche Inhaltstypen haben? Wenn ja, wie würden wir diese Dateien in einer Anfrage in der HTML-Datei referenzieren, und wenn nicht, gibt es eine effizientere Methode, um die Seite zu bedienen, die wir gerade verwenden?

Antwort

2

Wenn es eine einzelne Seite ist, können Sie sie einfach in Skript- und Stil-Tags einfügen, die Bilder können in Daten-URLs eingefügt werden und Sie sind glücklich. Wenn mehrere Seiten diese Dateien verwenden, ist es besser, sie vom Browser abrufen und zwischenspeichern zu lassen.

Ich glaube, es gab ein Protokoll (http2?), Wo der Server zusätzliche Dateien senden kann, die der Browser als nächstes anfragt. Aber ich habe keine Ahnung, wie die Technologie heißt.

Viel Glück, interessante Frage!

2

Laden Sie die Dateien herunter oder rendern Sie sie im Browser. Wenn Sie sie im Browser rendern, ist es sinnvoller, dass der Browser mehrere gleichzeitige Anforderungen für Ressourcen zur Optimierung der Bandbreite stellen kann, anstatt einzelne Blockierungsanforderungen zu stellen. 3 separate Anfragen an das CDN wären parallel und dies wäre schneller.

+0

Ich habe die Frage einschließlich Beispielcode stark aktualisiert, um besser zu veranschaulichen, was ich meine – Adam0410