Node.js unter Windows

Microsoft will das Node.js auch unter Windows zur Verfügung stellen und arbeitet dazu mit Joyent und Node.js-Erfindert Ryan Lienhart Dahl an der Portierung. Der Cloud-Provider Joyent zählt zu den größten Unterstützern von Node.js und hat Dahl angestellt.
golem.de

Jetzt blogge ich schon über Windows? Ja, aber nicht wegen Windows, sondern wegen Node.js. Wenn ich nämlich nicht gerade versuche die Welt zu Python zu bekehren, dann sollen sie wenigstens Node.js nutzen.

Node.js?

Node.js basiert auf der V8-Engine von Google und kann für Netzwerkprogramme wie Webserver genutzt werden. Da es, wie bei JavaScript üblich, event-driven ist, ist es ziemlich schnell und eignet sich besonders für Anwendungen, die viele Zugriffe verarbeiten müssen. Ich selber schreibe z.B. momentan an einem kleinen Push-Server.

Und warum der Beitrag? Naja ich hoffe, wenn Microsoft hier seine Finger im Spiel hat nützt das der Entwicklung für die komplette Community. Node.js ist ja noch relativ jung und je stärker die Entwickler unterstützt werden, desto besser.

Node.js selber findet man übrigens auf nodejs.org

Know Your Engines – How to Make Your JavaScript Fast

Wer richtig schnellen JavaScript Code schreiben möchte, sollte wissen, wie die JavaScript Engines der Browser funktionieren. Daher kann ich Euch das .pdf hier, welches einen Vortrag von David Mandelin enthält, nur empfehlen.

WebSockets

Ein Schlumpf

Die Kommunikation zwischen Browser und Server erinnert mich momentan irgendwie an die Schlümpfe. Es läuft immer nach dem Motto “Papa Schlumpf, wie weit ist es denn noch?” Worauf der der Server Papa Schlumpf antwortet “Nicht mehr weit.”. Das ganze wiederholt sich andauernd und hat einen entscheidenden Nachteil: Es verursacht Last auf dem Server, wo wir sie nicht wirklich benötigen.

Mit HTML5 bietet sich uns hier eine neue Möglichkeit die Kommunikation zwischen Client und Server zu realisieren: WebSockets.

Technisch betrachtet startet das WebSocket-Protokoll wie ein ‘normaler’ http-Request/Response-Zyklus, nur, dass nach der Übertragung der HTTP-Request- und Response-Header die zugrundeliegende TCP-Connection bestehen und dadurch für binäre bzw. Zeichenketten-Übertragung in beide Richtungen frei wird. Dadurch kann auch der Server zu jedem Zeitpunkt Daten zum Client schicken. Zudem wird der weitere Protokoll-Overhead im vergleich zu HTTP stark reduziert (im Idealfall nur 2 Bytes zusätzlich pro Text-Nachricht und Richtung).Wikipedia

Was für einen kleinen Blog eher uninteressant ist macht für größere Applikationen schon mehr Sinn. Noch kann man WebSockets nur mit Safari und Chrome nutzen aber wer sich ein wenig mit JavaScript auskennt kann hier eine schicke Fallback-Lösung entwickeln.

Neugierig? Ein Blick auf nettuts.com lohnt sich: Start using HTML5 WebSockets today

Foto Trevor Coulthart@flickr

Writing testable JavaScript

So wirklich toll findest es niemand und trotzdem kommt man bei kommerziellen Projekten nicht an umfangreichen Tests vorbei. Dies gilt bei WebApplikationen nicht nur fürs backend sondern besonders auch fürs frontend. Neben den zahlreichen Tests in unterschiedlichen Browsern (speziell HTML und CSS) erfordert JavaScript nochmal besondere Aufmerksamkeit. Auf der einen Seite interpretieren Browser die Skriptsprache gerne anders als ihre Kollegen und gleichzeitig müssen wir JavaScript die gleiche Aufmerksamkeit schenken wie jeder Programmier-/ Skriptsprache.

Ben Cherry ist Frontenddeveloper bei Twitter und hat wohl schon einige Erfahrungen mit dem Testen von JavaScript gemacht die er dankenswerterweise auf seinem Blog mit uns teilt. Sicherlich einen Blick wert und ein guter Ansatz um den eigenen JavaScript Code zu optimieren.

Foto: Staci@flickr

“Like”-Button mit Facebooks JavaScript-SDK einbinden.

Ein eigener “Gefällt mir”-Button auf der Seite ist schon praktisch. Facebook macht sich dran das Web zu erobern und erlaubt Webseitenbetreibern in wenigen Schritten den besagten Button in die eigene Webseite einzubauen.

Variante 1: mit iframe

  1. <iframe src="http://www.facebook.com/plugins/like.php?href=http://domain.com&amp;layout=standard&amp;show-faces=true&amp;width=500&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:500px; height:60px"></iframe>

Variante 2: Facebooks JavaScript-SDK

Etwas komplizierter aber viel schöner ist es die JavaScript-SDK von facebook zu nutzen. Für diese muss man sich zwar bei facebook anmelden aber das Formular ist noch gerade so erträglich.

Eigene Seite bei facebook als Applikation registrieren

Eigene Seite bei facebook registrieren

Das Forumlar unter http://developers.facebook.com/setup/ möchte von Euch nur den Namen der Seite, die URL zur Seite und Eure Sprache wissen. Mehr nicht und schon bekommt ihr nicht nur Eure App ID sondern auch gleich den Code, den ihr braucht, um das facebook JavaScript-SDK einzubinden.

facebook JavaScript-SDK einbinden

  1. <div id="fb-root"></div>
  2. <script>
  3. window.fbAsyncInit = function() {
  4. FB.init({appId: 'APP ID', status: true, cookie: true, xfbml: true});
  5. };
  6. (function() {
  7. var e = document.createElement('script');
  8. e.type = 'text/javascript';
  9. e.src = document.location.protocol + '//connect.facebook.net/de_DE/all.js';
  10. e.async = true;
  11. document.getElementById('fb-root').appendChild(e);
  12. }());
  13. </script>

Jetzt haben wir Zugriff auf einige Methoden, die facebook uns zur Verfügung stellt. Um einen “Like”-Button in die Seite zu integrieren brauchen wir zunächst ein XFBML-Element, welches ihr an der gewünschten Stelle in Eure HTML-Datei einfügt. Eure Domain müsst Ihr entweder manuell eintragen oder mit dem CMS Eurer Wahl dynamisch einfügen:

  1. <fb:like href="http://domain.com/" layout="standard" show_faces="true" width="450" action="like" colorscheme="light" />

Für WordPress sieht das dann so aus:

  1. <fb:like href="<?php echo urlencode(get_permalink($post->ID)); ?>" layout="standard" show_faces="true" width="450" action="like" colorscheme="light" />

Meiner Meinung nach viel schöner als ein iframe und, wenn man sich das facebook JavaScript-SDK mal ansieht, auch viel mächtiger.