introduction to phoenix web framework
TRANSCRIPT
Riza Fahmi - ElixirDose.com - @rizafahmi22 - riza@ hacktiv8.com
PRODUCTIVE. RELIABLE. FAST.
INTRODUCTION
YOU’RE MY REGULATOR, MY COMPILER
▸ Scream when things go too fast / slow / are unclear
▸ Scream when cool things happen
▸ Help me when live coding, I’m suck at it. Find errors for me before the compiler do
▸ Similar to Phoenix channel, this is two way communication channel. Don’t let me do all the talking!
INTRODUCTION
WHO AM I
▸ Was at CitizenLab, a Belgium-based early stage startup. As a CTO
▸ Now at Hacktiv8, a startup for dev bootcamp
▸ Run ElixirDose — an Elixir-focused blog since November 2013
INTRODUCTION
WHAT WE’LL SEE
▸ The Awesomeness of Phoenix
▸ Build something with Phoenix
▸ Some live coding
“Framework for building HTML5 apps, API backends and distributed systems to take on the modern web.”
Chris McCord
PRODUCTIVITY
LONG TERM
▸ Maintainability
▸ Tried and true architecture patterns
▸ Let it crash mentality
“IF I HAVE TO BUILD SKYNET, KILLER ARTIFICIAL INTELLIGENT FROM TERMINATOR MOVIES, I WOULD USE ERLANG AND ERLANG VM. MOSTLY BECAUSE IT’S UNKILLABLE AND KEEP COMING BACK!”
Simon St.Laurent from MostlyErlang Podcast
FEATURES
STATIC BUILD TOOLS WITH ES6 AS DEFAULT
Ultra fast HTML5 build tools
Compiles/lints your scripts and styles
Concatenates your scripts and styles
Minifies it
Watches for file changes
FEATURES
CHANNELS
▸ The main reason why Phoenix exists in the first place
▸ It’s websocket with steroid
▸ Cross-platform, cross-languages
▸ For creating modern, real-time apps
▸ Beyond HTML
PERFORMANCE
VIEWS & TEMPLATES
▸Precompiled and pretty fast!
▸Views render templates
▸ It’s beyond HTML
PERFORMANCE
WHAT ABOUT SOME BENCHMARK
Frameworks Throughput (req/s) Latency (ms)Plug (Elixir) 54,948.14 3.83
Gin (Go) 51,483.20 1.94Phoenix (Elixir) 43,063.45 2.82
Express Cluster (Nodejs) 27,669.46 3.73Martini (Go) 14,798.46 6.81
Express (Nodejs) 9,965.56 10.07Sinatra (Ruby) 9,182.86 6.55
Rails (Ruby) 3,274.81 17.25
https://github.com/mroth/phoenix-showdown
PERFORMANCE
ROBUST CONCURRENCY MODEL
▸ “processes” is extremely lightweight units of concurrency
▸ Garbage collection is per process, no global pauses
“ WE DO NOT HAVE ONE WEB-SERVER HANDLING 2 MILLIONS SESSIONS. WE HAVE 2 MILLION WEBSERVERS HANDLING ONE SESSION EACH.”
Joe Armstrong - Erlang Fatherhttp://goo.gl/DprVTC
WHAT WE’LL BUILD
ELIXIR VIDEO PORTAL
▸ CRUD app for collecting Elixir-related video
▸ Similar confreaks.tv or pyvideo.org