Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rails with Node.js - a Reese's Moment
Search
Jerry Cheung
September 26, 2011
Programming
1
480
Rails with Node.js - a Reese's Moment
Introduction to Node.js and how to use it alongside Rails.
Jerry Cheung
September 26, 2011
Tweet
Share
More Decks by Jerry Cheung
See All by Jerry Cheung
Let's Build Software!
jch
3
150
Evented Ruby vs. Node.js
jch
9
1.9k
Streaming APIs with Ruby
jch
5
630
Evented Ruby vs Node.js
jch
15
4k
Sproutcore Introduction @ LAHN
jch
1
140
Other Decks in Programming
See All in Programming
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1k
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
12
4.1k
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
160
CI改善もDatadogとともに
taumu
0
120
Domain-Driven Transformation
hschwentner
2
1.9k
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
220
技術を根付かせる / How to make technology take root
kubode
1
250
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
210
Open source software: how to live long and go far
gaelvaroquaux
0
640
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
270
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
150
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
The Language of Interfaces
destraynor
156
24k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
A Tale of Four Properties
chriscoyier
158
23k
What's in a price? How to price your products and services
michaelherold
244
12k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
GraphQLとの向き合い方2022年版
quramy
44
13k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Transcript
Rails with Node.js a Reese’s Moment Monday, September 26, 11
Me Monday, September 26, 11
In a Nutshell Monday, September 26, 11
In a Nutshell • Framework for building network apps Monday,
September 26, 11
In a Nutshell • Framework for building network apps •
First class evented I/O Monday, September 26, 11
In a Nutshell • Framework for building network apps •
First class evented I/O • Built on top of V8 Monday, September 26, 11
What it ain’t Monday, September 26, 11
What it ain’t • NOT a browser side Javascript library
Monday, September 26, 11
What it ain’t • NOT a browser side Javascript library
• NOT a full fledged webapp framework Monday, September 26, 11
A Simple Example Monday, September 26, 11
A Simple Example (1..3).each do |i| contents = File.read('presentation.key') puts
"#{i}. Finished reading file" puts "#{i}. doing something important..." end Monday, September 26, 11
A Simple Example 1. Finished reading file 1. doing something
important... 2. Finished reading file 2. doing something important... 3. Finished reading file 3. doing something important... Monday, September 26, 11
A Simple Example var fs = require('fs'); for (var i=1;
i<=3; i++) { fs.readFile('presentation.key', function(err, data) { console.log(i + ". Finished reading file"); }); console.log(i + ". doing something important..."); } Monday, September 26, 11
A Simple Example var fs = require('fs'); for (var i=1;
i<=3; i++) { fs.readFile('presentation.key', function(err, data) { console.log(i + ". Finished reading file"); }); console.log(i + ". doing something important..."); } Monday, September 26, 11
A Simple Example 1. doing something important... 2. doing something
important... 3. doing something important... 4. Finished reading file 4. Finished reading file 4. Finished reading file Monday, September 26, 11
Trust Callbacks Monday, September 26, 11
Trust Callbacks • Async programming is trickier Monday, September 26,
11
Trust Callbacks • Async programming is trickier • ...But it
doesn’t block your other code Monday, September 26, 11
Go to Jail “Node jails you into this evented- style
programming. You can’t do things in a blocking way, you can’t write slow programs.” - Ryan Dahl Monday, September 26, 11
Some Real Examples Monday, September 26, 11
Some Real Examples • Real-time dashboards and analytics Monday, September
26, 11
Some Real Examples • Real-time dashboards and analytics • Push
notifications Monday, September 26, 11
Some Real Examples • Real-time dashboards and analytics • Push
notifications • Fast file uploads Monday, September 26, 11
Dashboards + Analytics https://github.com/etsy/statsd Monday, September 26, 11
Dashboards + Analytics http://hummingbirdstats.com/ Monday, September 26, 11
Push Notifications https://github.com/mape/node-wargames Monday, September 26, 11
File Uploaders Monday, September 26, 11
File Uploaders • Slow to parse the encoded upload body
Monday, September 26, 11
File Uploaders • Slow to parse the encoded upload body
• Post-processing & background jobs Monday, September 26, 11
File Uploaders require 'sinatra' # curl -F "
[email protected]
" http://localhost:4567/upload post
'/upload' do # already written to params[:data][:tempfile] "" end Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11
Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1
Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11
No Silver Bullet Monday, September 26, 11
No Silver Bullet • Not a replacement for Ruby Monday,
September 26, 11
No Silver Bullet • Not a replacement for Ruby •
Use where it makes sense Monday, September 26, 11
No Silver Bullet • Not a replacement for Ruby •
Use where it makes sense • Doesn’t guarantee scalability Monday, September 26, 11
Wrapup Monday, September 26, 11
Wrapup • Server side Javascript rules! Monday, September 26, 11
Wrapup • Server side Javascript rules! • Event driven style
of programming Monday, September 26, 11
Wrapup • Server side Javascript rules! • Event driven style
of programming • Good for specific problems Monday, September 26, 11
Thanks! Questions?
[email protected]
@whatcodecraves http://whatcodecraves.com Monday, September 26, 11