Full-Stack JavaScript with Node.js

2,051 views

Published on

Published in: Software, Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,051
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
46
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • - Ich habe mich im Zusammenhang mit Rocket.Net mit dem Thema Node.js beschäftigt.
    - ich werde nicht sehr tief in das Thema einsteigen, aber ich möchte euch eine Idee geben, was Node.js ist und was man damit machen kann.
    - Das Ziehl is schlussendlich, eine Full-Stack JavaScript Web Anwendung zu schreiben.
  • Fangen wir an, warum überhaupt JavaScript?
    Wir mögen JavaScript eigentlich nicht und versuchen es zu vermeiden.
    Wem geht es so wie dieser Katze? Was mögt in an Java Script nicht?
    JavaScript is:
    - Unstructured
    - Not intuitive
    - Unlogical
    - Prototype inheritance… WTF!
    - Dynamically typed
    - Hard to debug
    - Global Vairables
    - IDE Integration (Intellisense)
  • Beispiel: JavaScript operatoren.
  • Beispiel JavaScript Klassen und Prototypes
  • - THE language of the WEB
    - Cross-platform
    - Huge REACH
    - JavaScript is everywhere (client, server, libs, frameworks)
    - Single Page Applications
    - Server applications
    - End-to-End JavaScript applications
  • Schauen wir Node.js mal etwas unter die Haube.
  • Ich habe festgestellt, dass viele schon von Node.js gehört haben, aber nicht genau wissen, was Node.js ist.
    Oft wird Node.js als JavaScript HTTP Server bezeichnet, was nicht ganz korrekt ist.
    Schauen wir uns mal die Definition von Node.Js an.
    Node.js basiert auf der Google V8 Engine und ist eine Platform für event-driven, data-intensive real-time applikationen.
    -> Man merke , kein Wort von HTTP oder Server. Obwohl man Node.js sher oft als HTTP Server einsetzt.
    -> Man kann auch Konsolen Anwendungen schreiben (Viele Node.js Tools, wie zum Beispiel Grunt oder Bower, die wir auch in Rocket.Net verwenden, sind ein gutes Beispiel dazu)
    -> Es gibt sogar eine ganze JavaScript IDE (Atom.io), die auf Node.Js läuft.
  • Ähnlich wie im Browser läuft JavaScript bei Node.js in einem Event-Loop.
    Traditional
    - Typically one thread per connection is used
    - In many cases, a thread is contained inside a process and maintains its own working memory.
    - Threading can tax operating system resources since threads require CPU to perform context switches, as well as additional RAM.
    Node.JS
    - Instead of using the multithreaded approach with blocking I/O, it uses an event loop with asynchronous I/O (Like the Browser).
    - Because of these design choices, Node.js is often able to handle more requests and connected clients, making it a more responsive solution.
    - In Node, I/O is almost always performed outside of the main event loop, allowing the server to stay efficient and responsive.
  • Dieser Event-Loop hat jedoch einen grossen Einfluss darauf, wie wir unsere Applikationen schreiben.
    In einer MVC Anwendung macht es nichts aus, wenn wir blockierende I/O Befehle haben. Der aktuelle Request muss zwar warten bis der Befehl fertig ist,
    Die Anwendung kann jedoch weitere Requests entgegen nehmen.
    Bei Node.js is dies jedoch anderst. Durch den Event-Loop läuft node.js in einem einzigen Thread. Blockierende Befehle, blockieren die gesammte Node.js Anwendung.
    Deshalb setzt Node.js auf ein Non-Blocking & Event-Driven Ansatz.
  • Der Event-Loop und der Event-Driven Ansatz erhöht die Anzahl möglicher parallel verarbeiteter Requests /s und die Antwortzeit drastisch.
    Hier in der Graphik sieht man zum Beispiel: Bei 3500 Client-Connections kann Node.js 3 mal mehr Requests als ein herkömmlicher Webserver erarbeiten.
  • Node.js liefert nur die basis “low-level” module wie einfache FileSystem I/O, TCP und HTTP Server. Node.js hat aber eine sehr starke Community, welche die high-level module
    Wie connect und express zur verfügung stellt.
    Node Core
    Node’s core APIs are always lightweight and low-level. This leaves opinions, syntactic sugar, and specific details up to the community modules.
    Community modules
    Community modules are where Node thrives. Community members take the low-level core APIs and create fun and easy-to-use modules that allow you to get tasks done easily.
    Application logic
    The application logic layer is where your app is implemented. The size of this layer depends on the number of community modules used and the complexity of the application.
  • Dieses Beispiel ist ein simpler HTTP Server, welcher nur das basis HTTP module verwendet.
    Wie man sieht, ist das wirklich sehr low level, jedigliche Funktionalität muss man selber schreiben, oder auf die Community Module zugreifen.
  • Diese Communit Module werden über den node package manager in die Applikation eingebunden.
    Jede Node.js Awendung hat ein sogenanntes “Package.json” file wo dir dependencies definiert warden.
    Demo (Local Project)
    1. Create a folder
    2. npm init
    3. npm install grunt –save
    Demo (Global)
    1. npm install –g grunt
  • Ich möchte an dieser Stelle klarstellen: Node.js ist keine Silver-Bullet. Node.js füllt eine Lücke für speziefische Bedürfnisse.
  • Jetzt haben wir also Node.js mit dem wir JavaScript auf der Server-Seite und auch für das Tooling verwenden können.
    => Das hat viele Vorteile.
    1. Wir können die Leute unabhängig Fachrichtung (e.g. .Net & Java) in ein project stecken.
    2. Wir haben keinen Sprachlichen Kontext-Switch zwischen Client & Server.
    3. Wir können theoretisch Code für Client & Server Sharen. (nicht geschenkt, aber es gibt Ansätze wie man das machen kann)
  • Full-Stack JavaScript with Node.js

    1. 1. Full-Stack JavaScriptFull-Stack JavaScript An introduction to Node.jsAn introduction to Node.js
    2. 2. When we speak aboutWhen we speak about JavaScript …JavaScript …
    3. 3. JavaScript isJavaScript is StrangeStrange console.log(1 == true); // true console.log(1 === true); // false console.log("0" == false); // true console.log("abc" == "a" + "b" + "c"); // true console.log(null == undefined); // true console.log(30 - "7"); // 23 console.log("30" + 7); // 307
    4. 4. JavaScript is even moreJavaScript is even more StrangeStrange function rectangle(x,y) { this.x = x; this.y = y; } rectangle.prototype.area = function() { return this.x * this.y; } var twoByThree = new rectangle(2,3); console.log(twoByThree.area());
    5. 5. But… JavaScript is relevant!But… JavaScript is relevant!
    6. 6. What is Node.jsWhat is Node.js
    7. 7. ““Node.js is a platform built on Chrome's JavaScriptNode.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable networkruntime for easily building fast, scalable network applications. Node.js uses an event-driven, non-applications. Node.js uses an event-driven, non- blocking I/O model that makes it lightweight andblocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-timeefficient, perfect for data-intensive real-time applications that run across distributed devices.”applications that run across distributed devices.” - from nodejs.org
    8. 8. Node.js event loopNode.js event loop
    9. 9. Non-blocking I/ONon-blocking I/O I/O block execution until finished I/O doesn’t block execution var data = $.post('/resource.json'); console.log(data); $.post('/resource.json', function (data) { console.log(data); }); // script execution continues
    10. 10. Now we have an incrediblyNow we have an incredibly fast platformfast platform
    11. 11. Overview of the layers thatOverview of the layers that make up a Node applicationmake up a Node application V8 thread pool (libeio) event loop (libev) crypto (OpenSSL) DNS (c-ares) Node core querystring, http, socket, file system, low-level HTTP parser, low-level TCP server Community modules node-formidable, node-cgi, mongoose, socket.io, express, connect, database drivers, middleware, routing, etc… Application logic http.createServer(), app.use(), route handlers, directory structures, business algorithms
    12. 12. A simple file serverA simple file server var http = require("http"); var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn') }); server.listen(3000); console.log('Server running at http://localhost:3000/');
    13. 13. Node Package ManagerNode Package Manager (NPM)(NPM) • www.npmjs.org • 60.000+ modules • package.json file (npm init) • npm install <module.name> --save
    14. 14. Popular Node.js modulesPopular Node.js modules  Express - Express.js, a simple web  development framework for Node.js, and the  de-facto standard for the majority of Node.js  applications out there today.  connect - Connect is an extensible HTTP server  framework for Node.js, providing a collection of  high performance middleware components.  socket.io - Server-side component of the two  most common websockets components out  there today.
    15. 15. Local modulesLocal modules exports.world = function () { console.log("Hello World"); }; var hello = require("./hello"); hello.world();
    16. 16. Node.js is Node.js is notnot a silver-bullet new platform that will a silver-bullet new platform that will  dominate the web development world. Instead, it’s adominate the web development world. Instead, it’s a platform that fills a particular need.platform that fills a particular need.
    17. 17. When to NOT use Node.jsWhen to NOT use Node.js • When you are doing heavy and CPU intensive calculations on server side, because event-loops are CPU hungry. • Node.js with a relational DB behind. Relational DB tools for Node.js are still in their early stages.
    18. 18. When to use Node.jsWhen to use Node.js • Node.js is good for creating streaming based real- time services, web chat applications, static file servers etc. • If you need high level concurrency and not worried about CPU-cycles. • Node.js with Express.js can also be used to create classic web applications on the server-side.
    19. 19. Suddenly, every startup on Earth could reuseSuddenly, every startup on Earth could reuse developers (i.e., resources) on both the client- anddevelopers (i.e., resources) on both the client- and server-side, solving the "Python Guru Needed" job postserver-side, solving the "Python Guru Needed" job post problem.problem.
    20. 20. Full-Stack JavaScriptFull-Stack JavaScript Angular.js Node.js Grunt Mocha Jasmine.js
    21. 21. DemoDemo
    22. 22. ResourcesResources • Source Code https://github.com/lehmamic/fullstack-javascript • Node.js in Action

    ×