cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
wichtigWir suchen PHP-Entwickler/innen (Freelancer oder Vollzeit)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 69184
Mitglieder online: 0
Gäste online: 2
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: Node.js & express - Statische Inhalte ausliefern

Thread: Node.js & express - Statische Inhalte ausliefern

Tags: Express , node

09.02.2012 00:06 Uhr

 

Status: offline
Hallo großartige Community  :wink:  .

Ich bin seit nicht all zu langer Zeit auf den Node.js-Trip gekommen und habe heute mal überlegt ein größeres Projekt von (vereinfacht) Apache+PHP auf Node.js+Express+Jade umzuschreiben.

Eines meiner zentralen anliegen war es das die Geschwindigkeit dabei mindestens gleich bleibt.

Jetzt habe ich versucht statische Dateien durch verschiedene Wege (hier nur zwei) auszuliefern:
+ JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
app.get(/^(\/files\/.*|\/static\/.*|\/img\/.*)$/, function(req, res, next){
      var filepath = '.' + req.params[0];
      var filestream = fs.ReadStream(filepath);
      
      res.writeHead(200, {
            'content-type': core.getMIME(path.extname(filepath))//,
            //'content-length': stats.size
      });
      
      filestream.on('error', function(exception){
            console.log(exception);
      });
      
      filestream.pipe(res);
      
      filestream.on('end', function() {
            res.end();
      });
});
JavaScript:
1
app.use(express.static(__dirname));
Wie gesagt nutze ich Express im obigen Code, habe es aber auch mal ohne getestet.

Das Problem ist jetzt dass die statischen Inhalte über Node.js teilweise deutlich langsamer ausgeliefert werden als über den Apache.
Jetzt hab ich vor dem Absenden jeweils zwei identische Dateien verglichen und es ist nicht mehr nachvollziehbar. Eher hat der Apache selten mal Aussetzer.

Ich teste das ganze derzeit lokal unter Windows 7. Für Apache nutze ich eine fast unveränderte Xampp-Standartinstallation.

Ich bleib tortzdem bei der Frage:
Gibt es eventuell totzdem ein besseres Verfahren zur Auslieferung von statischen Dateien als das mit Express?

Danke schonmal!
Alex.
09.02.2012 09:44 Uhr

 

Status: offline
welche version von node verwendest du?

du hast grundsätzlich 2 möglichkeiten.
1. die app.get() variante
2. middleware (app.use)

ich würde in dem fall warscheinlich middleware bevorzugen um z.b. nicht die cookies mit zu parsen etc. (sind ja static files)

middleware ist so ziemlich das niedrigste level auf dem du mit express arbeiten kannst. ich würde auch nicht dazu raten express aus dem fenster zu werfen. im gegenteil. grade jade, stylus usw. sind unter verwendung von express recht einfach zu handhaben und man kann express prima erweitern.

du kannst middleware auch prima in app.get einbauen:
+ JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function loadUser(req, res, next) {
  // You would fetch your user from the db
  var user = users[req.params.id];
  if (user) {
    req.user = user;
    next();
  } else {
    next(new Error('Failed to load user ' + req.params.id));
  }
}
 
app.get('/user/:id', loadUser, function(req, res){
  res.send('Viewing user ' + req.user.name);
});
express docs: route middleware

alle middleware funktionen die in app.use oder express.createServer angegeben sind werden -vor- app.get und app.post ausgeführt. du kannst res und req wie im beispiel erweitern und direkt in der nächsten middleware oder im app.get oder app.post verwenden.

unter das app.use(express.static(__dirname)); würde ich dann sowas schreiben wie:
app.use(srv.static); wobei srv.static dann einfach eine funktion ist, die überprüft ob der pfad zu den statischen dateien führt. falls nicht -> next();
falls doch -> auslieferung der datei -> ende
1 mal bearbeitet
___________________________
Circle Ninja™: GottZ has left Life(Banned from server for Hacking)
10.02.2012 00:09 Uhr

 

Status: offline
Danke für die schnelle Antwort!
Bei Cybton ist halt doch noch alles beim alten: Schnelle Antworten und super Wissen  :lol:  .


Das mit Cookies etc. ist natürlich ein guter Hinweis. Die sind da tatsächlich nicht nötig.

Dass du das mit der Middleware nochmal so erwäht hast ist gut. Ich hab das eigentlich schonmal im Manual gelesen, aber erst gerade richtig "realisiert". Da fallen mir gleich einige sinnvolle Einsatzzwecke ein.

So richtig mit Node arbeite ich jetzt erst seit wenigen Tagen - zuvor habe ich mir nur alles zusammengestückelt, dass Socket.IO läuft. Jetzt möchte ich mich aber mal ordentlich damit auseinandersetzen.


Wie ist´s eigentlich bei euch mit der Verwendung von Node? Verwendet ihr mehr den Apache, Node oder auch mal aufgesplittet? Zieht ihr für bestimmte Projekte etwas vor?
Oder findet ihr es vielleicht noch zu früh Node zu nutzen?
2 mal bearbeitet
10.02.2012 08:14 Uhr

 

Status: offline
ich bastel seit ewigkeiten an nem cms mit forum, server manager (sowohl shell als auch gameserver management) und chat. der chat wird simplerweise jabber benutzen und über die weboberfläche unter verwendung von socket.io mit den browsern reden :D

aufgrund der tatsache dass es mittlerweile echt viele ausgereifte module gibt, würde ich grundsätzlich eher zur verwendung von node als von php tendieren. es ist auch krass wie schnell bugs behoben werden wenn welche gemeldet werden. da kann ein phpler nur von träumen.

einziges manko ist halt dass kaum einer javascript wirklich beherrscht.

du solltest dir evtl mal async.js angucken bzw mit process.nextTick(); arbeiten sofern du mal was berechnest oder irgendwas cpu intensives machst (damit dein projekt nicht in die synkrone bahn gerät)

module die ich verwende:
stylus, jade, express, socket.io, node-mysql, canvas (bisher noch nicht windows kompatibel), hexy und noch ein paar andere.
diese gehören aber auf jeden fall in meinen stack :D

bin auch am überlegen mal mit coffee script zu arbeiten aber irgendwie bevorzuge ich old school javascript wie douglas crockford es lehrte.
___________________________
Circle Ninja™: GottZ has left Life(Banned from server for Hacking)
Ähnliche Threads Forum Ähnlichkeitsgrad
 Dell Direct Media Express Software & Betriebssysteme 1
nach obennach oben

Copyright © 2012 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - s.Oliver Onlineshop für Schuhe
ANEXIA - PHP Entwicklung - Dockers- Think Schuhe - der eigene Weg - Paul Green Damenschuhe - Bequeme Geox Schuhe - Web-Entwicklung - Fritz!Box Anrufmonitor für Mac OS - Rolladen, Markisen und Jalousien in Stuttgart - Rolladen in Stuttgart - SMSjobs