the future of server side javascript

26
The future of server side JavaScript @olegpodsechin #froscon 20.08.2011

Upload: oleg-podsechin

Post on 28-Jan-2015

114 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: The future of server side JavaScript

The future of server side JavaScript

@olegpodsechin#froscon 20.08.2011

Page 2: The future of server side JavaScript

Why use JavaScript on the server?

Language of the browser Competition amongst browser vendors means

increased performance Code reuse between the server and client, no need for

context switching Dynamic language

No unnecessary constraints, allows one to mix procedural, object oriented and functional styles

Allows for meta programing Data in JSON, no marshalling reduces amount of code

Page 3: The future of server side JavaScript

Why use JavaScript on the server?

Lingua franca of the web Widely accessible, even to beginning developers Widely available in terms of platforms Decent IDE support

Closures work well with asynchronous, real time web

Diverse, active, growing community – http://communityjs.org

We are stuck with it for the foreseeable future

Page 4: The future of server side JavaScript

It's Trendy

Page 5: The future of server side JavaScript

ServerJS != Node

Engines Environments Platforms Frameworks

Page 6: The future of server side JavaScript

Engines

1996 SpiderMonkey (Mozilla) 1998 Rhino (Mozilla) 2008 Nitro/SquirrelFish (Apple) 2008 V8 (Google) 2011 Chakra (Microsoft) 2012 Nashorn (Oracle)

Page 7: The future of server side JavaScript

Rhino

JavaScript 1.7 Interpreted or compiled to Java bytecode,

allows for continuations Includes new and old features like destructuring

assignment (var {a, b} = x) and E4X Easy access to Java classes Recent patches improve performance, e.g.

InvokeDynamic in Java7

Page 8: The future of server side JavaScript

V8

EcmaScript 5 Compiles to native code – fast! Extended via native libraries Primarily targets the web browser

Page 9: The future of server side JavaScript

CommonJS

Modules - 1.0, 1.1, Async/A Packages - 1.0, 1.1 Console System Unit Testing – 1.0

Binary - A, B, C, D, E, Lite, F IO - A, B, C Filesystem - A, B JSGI - 0.2, 0.3 HttpClient – A, B

Page 10: The future of server side JavaScript

CommonJS modules

// math.jsexports.add = function(a, b) { return a + b; }

// server.jsvar add = require('math').add;console.log(add(2, 2));

// client.js???

Page 11: The future of server side JavaScript

CommonJS packages

// package.json{ "name": "hello", "version": "0.1.0", "description": "Hello world package", "keywords": ["hello", "world"], "author": "John Smith <[email protected]>", "main": "./lib/hello.js", "dependencies": {"whatever" : "1"}, "engines" : ["v8", "node", "rhino"],}

Page 12: The future of server side JavaScript

Future of CommonJS

http://groups.google.com/group/commonjs Node mostly ignored CommonJS AMD split out into separate mailing list UncommonJS

https://github.com/kriskowal/uncommonjs

Page 13: The future of server side JavaScript

Environments

1996 Netscape Livewire 1998 Helma (Rhino) 2007 AppJet (Rhino) 2008 CouchDB / Couch Apps (SpiderMonkey) 2008 RingoJS (Rhino) 2009 Narwhal (Rhino, V8, SpiderMonkey) 2009 Node (V8) 2010 Akshell (V8) 2011 Wakanda (Nitro)

Over 30 in total http://wiki.commonjs.org/wiki/Implementations

Page 14: The future of server side JavaScript

Sync vs. Async

http.get(url1) + http.get(url2)

Page 15: The future of server side JavaScript

Sync vs. Async

function add(callback) { http.get(url1, function(response1) { var part1 = response1.data; http.get(url2, function(response2) { var part2 = response2.data; callback(part1 + part2); } }}

Page 16: The future of server side JavaScript

Interoperability

Pure JavaScript CommonJS modules can run in any environment Templating, parsing, formatting, encoding – what

else? Anything that does I/O must expose either a

synchronous or an asynchronous API Dictates the style of interface exposed by higher

level packages, e.g. database driver, ORM

Page 17: The future of server side JavaScript

API vs. Implementation

Asynchronous, implement Node API Node RhiNodeII - https://github.com/lhofhansl/RhiNodeII SpiderNode - https://github.com/zpao/spidernode Node.NET - https://github.com/dnewcome/Node.net

Synchronous, implement CommonJS API Ringo - https://github.com/ringo/ringojs Narwhal - https://github.com/280north/narwhal Common Node –

https://github.com/olegp/common-node

Page 18: The future of server side JavaScript

Common Node

Implements a number of synchronous CommonJS specifications on top of Node

Uses node-fibers Uses co routines or multiple stacks within the same

process not a fork or a hack

Google's Traceur to support latest language features Bridges the gap between Ringo and Node, sync and

async Fibers, HTTP proxy code examples & benchmarks

Page 19: The future of server side JavaScript
Page 20: The future of server side JavaScript
Page 21: The future of server side JavaScript
Page 22: The future of server side JavaScript

Platforms

Node Joyent, Heroku, Nodejitsu, Nodester, Nodesocket,

CloudFoundry Ringo

Erbix, AppEngine & any other Java platform Akshell

Page 23: The future of server side JavaScript

Frameworks

ServerJS is missing a Rails like framework Asynchronous

DIY using Connect, Express etc. with Node Less of a problem, since Node is often used as glue

Synchronous DIY using JSGI, Stick etc. with RingoJS Lack of a solid framework more of an issue

Page 24: The future of server side JavaScript

Trends

Wider adoption Front end developers First time developers - http://www.codecademy.com

Enterprises moving off legacy systems Java, PHP

New operating systems Windows, mobile devices (but not WebOS)

Page 25: The future of server side JavaScript

Trends

Web IDEs, XaaS Cloud9 – http://www.cloud9ide.com Akshell – http://www.akshell.com

Compile to JavaScript languages CoffeeScript, AltJS http://altjs.org & http://notjs.org

Extensible systems, crowd sourced functionality Think WordPress plugins + platform Locker Project http://lockerproject.org

Page 26: The future of server side JavaScript

Thank you!

Questions?

@olegpodsechin