Învățați cum să folosiți Phoenix Framework tohave fun building real-time web/mobile apps
that that are fast for „end-users”, reliable,scalable, maintainable and (easily) extensible!
- De ce?
- Ce?
- Bucuria dezvoltatorului
- (Ar trebui să-mi pese de) Benchmarks?
- Performanța evidențiază
- Cine?
- Cine ar trebui să învețe Phoenix?
- Cine NU ar trebui să învețe Phoenix?
- Cum?
- Presupuneri / Cerințe prealabile?
- Elixir
- Node.js
- Instalare
- Următorul?
- Exemple practice?
- Book?
- Introducere video de José Valim (creatorul Elixir)
- Resurse
- Top 10 motive pentru care Phoenix
- Întrebări?
- Trebuie să învăț Elixir înainte de a încerca/utiliza Phoenix?
- Trebuie să știu Erlang pentru a utiliza Elixir & Phoenix…?
- Dar Phoenix nu este „Mainstream” … Ar trebui să îl/îl folosim…?
- De ce nu mai folosim Hapi.js…?
- Ce este „greșit” în a folosi Rails sau Django?
- Dar GitHub încă folosește Rails … Cu siguranță GitHub este „scalabil”?
- De ce să NU folosiți Go?
- De ce NU folosiți în schimb Scala + Play Framework…?
- De ce nu folosiți Haskell?
- Vă rugăm să puneți mai multe întrebări: https://github.com/dwyl/learn-phoenix-framework/issues
De ce?
În calitate de dezvoltatori de aplicații web/mobile avem nevoie să valorificăm munca pe care alți oameni (foarte inteligenți) au făcut-o
în loc să construim mereu lucruri „de la zero”;de aceea folosim framework-uri pentru a ne construi aplicațiile!
Vezi: „Top 10 motive pentru care Phoenix” (mai jos pe această pagină!)
Există multe framework-uri din care puteți alege(câteva dintre cele mai „populare” sunt menționate mai josîn secțiunea „Întrebări”).
Dar dacă ne luăm după ceea ce este „popular”, am fi în continuare călare pe cai (și căruțe) peste totși nu s-ar face niciun progres.
Nota: toate motivele „De ce „pentru Elixir sunt valabile și pentru Phoenix!
verificați-le: https://github.com/dwyl/learn-elixir#why
Ce?
Un framework de aplicații web fără compromisuri!
Bucuria dezvoltatorului
Cea mai mare „constrângere” în orice proiect tehnologic este reprezentată de oameni. un „Antreprenor”/”Fondator” sau „Product Owner” poate avea toate ideile bune din lume, dacă nu este capabil să transforme ideea în realitate,nu are sens.
(Ar trebui să-mi pese de) Benchmarks?
Evident, ar trebui să rulați propriile benchmarks pe propriul hardware/cloud și să luați decizii în cunoștință de cauză pe baza cerințelor aplicației/produsului dumneavoastră,dar …. când am citit statisticile referitoare la numărul de utilizatori simultani pe care o aplicație Phoenix App îi poate gestiona (cu conexiuni WebSocket în direct)am rămas cu gura căscată!Înseamnă că ne putem construi aplicația (sau aplicațiile) în timp real cu 90% mai puține resurse.
Performanța evidențiază
- latență și timp de răspuns la cerere considerabil mai mici decât orice altceva! (datorită proceselor ușoare din Erlang și a gestionării ultra-eficiente a rețelei/messajelor)
- de 4 ori mai multe cereri pe secundă decât aplicația Node.js (Express.js) echivalentă.
- de 9 ori mai mult debit decât o aplicație bazată pe Python 2.7. (blocajul chiar e nașpa!)
- 10x – 100x mai multe cereri gestionate decât Ruby-on-Rails (în funcție de tipul de aplicație!)
- Performanță similară cu Go pe un singur server, dar un model de concurență multi-server mult mai simplu, astfel încât scalarea orizontală în mai multe centre de date („zone de disponibilitate”) este mult mai ușoară! (Erlang gestionează resurselepentru mai multe servere/procesoare ca o singură „flotă” de aplicații și deleagă cererile/procesarea către acestea în cadrul clusterelor/zonelor!)
Toate acestea înseamnă că cheltuiți considerabil mai puțini bani pe infrastructura Hardware/Cloud, astfel încât aplicația/compania dvs. poate obține un avantaj competitiv în ceea ce privește costurile.
Dacă vă aflați în poziția norocoasă de a lua în considerare utilizarea a ceva mult mai bun pentru următorul dvs. proiect,nu căutați mai departe de Phoenix!
Citește mai mult: http://www.phoenixframework.org
Cine?
Mulți oameni/echipe/companii folosesc deja Erlang/Elixir și Phoenix și văd rezultate fenomenale!
Inclusiv: Adobe, BBC, Spotify, Pinterest, Discord (Gamer Chat App),Groupon (Fave), Lonely Planet, Brightcove, Slack …
Vezi: https://github.com/doomspork/elixir-companies
Cine ar trebui să învețe Phoenix?
- Persoanele care doresc o modalitate ușoară de a construi o aplicație cu toate facilitățile moderne ale „generatoarelor”, interfață de baze de date încorporată („ORM”) și Firstclass WebSocketspentru „timp real”, obținând în același timp o fiabilitate legendară.
- Echipele care au nevoie de productivitatea dezvoltatorului sau de Ruby-on-Rails sau Django,dar care doresc mai puțină „magie” (adică vor să înțeleagă cum funcționează totul!).
- Companii care doresc să cheltuiască cu 90% mai puțin atât pe costurile de dezvoltare cât și pe cele de infrastructurăpentru a putea servi mai mulți oameni cu mai puține resurse.
Cine NU ar trebui să învețe Phoenix?
- Toată lumea care trebuie să folosească „cel mai popular” framework sau limbaj (indiferent de motiv).
- Companii care au deja o mulțime de Java/PHP/etc. moștenite și nu pot investi timpul necesar pentru a învăța/utiliza ceva nou.
- Dezvoltatorii care doresc „siguranța locului de muncă” reparând coduri nesigure.
Cum?
Presupuneri / Cerințe prealabile?
Elixir
Nu puteți construi o aplicație Phoenix fără a cunoaște Elixir.
Dacă sunteți nou în Elixir, „steluța” (bookmark) this
repo(astfel încât să vă puteți întoarce la el mâine)
și apoi mergeți la:github.com/dwyl/learn-elixirînvățați elixir până când simțiți că ați înțeles sintaxa,apoi reveniți și învățați Phoenix!
În mod specific ar trebui să vă concentrați pe învățarea „Bazelor” Elixir:
- tipuri de date
- atomi
- potrivire de tipare
- mape
- definiții de funcții
- module
Node.js
Phoenix folosește Node.js pentru a compila active precum fișiere JavaScript și CSS (folosind Webpack).
Asigurați-vă pur și simplu că aveți instalat Node.js. https://nodejs.org
Nu trebuie să cunoașteți Node pentru a folosi Phoenix.
Instalare
Dacă ați învățat deja ceva Elixir și ați instalat Node.js, atunciprimul pas pentru a începe cu Phoenix este instalarea!
Documentația Phoenix este uimitoare, așa că vă recomandăm să urmațiinstrucțiunile oficiale de instalare Phoenix!
De asemenea, va trebui să instalați PostgreSQL, există un tutorial despre cum se face acest lucru în ghidul de instalare Phoenix legat mai sus, dar puteți, de asemenea, să verificați repo-ul nostru learn-postgresql
pentru instrucțiuni, și să ridicați o problemă dacă aveți probleme!
În timp ce o înțelegere de bază a JavaScript poate fi utilă uneori,nu trebuie să știi cum să folosești Node pentru a folosi Phoenix.
Dacă sunteți curioși de ce au ales Brunch.io în locul „alternativelor”,
răspunsul scurt este: Simplitate & Viteză!vezi: http://brunch.io/docs/why-brunchNota: Phoenix v1.4 (nelansat la momentul scrierii acestui articol)folosește WebPack pentru compilarea activelor,vezi: CHANGELOG.md
Următorul?
Familiarizați-vă cu ghidul „Up and Running” (oficial):https://hexdocs.pm/phoenix/up_and_running.html#content
Exemple practice?
După ce ați instalat phoenixși ați urmat ghidul oficial „up and running”,
întoarceți-vă și încercați aceste exemple accesibile începătorilor:
- Counter (contor partajat în timp real folosind Phoenix LiveView):https://github.com/dwyl/phoenix-liveview-counter-tutorial
- Todo List (tutorial pas cu pas care arată cum să construiești o clonă TodoMVC complet funcțională):https://github.com/dwyl/phoenix-todo-list-tutorial
- Chat (UI/UX în timp real folosind WebSockets):https://github.com/dwyl/phoenix-chat-example
- Encryption (securitate):https://github.com/dwyl/phoenix-ecto-encryption-example
- Append-only Log (cum să stochezi datele aplicației tale):https://github.com/dwyl/phoenix-ecto-append-only-log-example
Book?
Recomandăm ca oamenii să cumpere (sau să împrumute)cartea lui @chrismccord: „Programming Phoenix”
vezi: https://pragprog.com/book/phoenix14/programming-phoenix-1-4
Autorii sunt impresionanți în mod individual și în mod colectivacoperă în mod comprehensiv Phoenix așa cum nimeni altcineva nu o poate face!Chris a creat Phoenix, José a creat Elixirși Bruce este un autor tehnic ultra-experimentatcu multe cărți de succes în palmares!
(i.e.: cartea este alegerea evidentă pentru cum să înveți Phoenix!)
Introducere video de José Valim (creatorul Elixir)
https://youtu.be/MD3P7Qan3pw
https://youtu.be/srtMWzyqdp8
Resurse
- Elixir vs Ruby Showdown – Phoenix vs Rails: https://littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails
- Benchmark: https://github.com/mroth/phoenix-showdown
Top 10 motive pentru care Phoenix
„Phoenix oferă productivitatea lui Ruby-on-Rails
cu concurența și toleranța la erori a lui Erlang.”
- Dincolo de toate beneficiile tehnice (fantastice),ceea ce ne atrage la Phoenix este marea comunitatede oameni din întreaga lume care sunt entuziasmați să facă din Phoenixun instrument uimitor pentru crearea de aplicații web!
Având oameni bineveniți care te
- ajută atunci când te blochezi, explicându-ți cu răbdare lucrurile
- răspunde la întrebări (atât „noob „cât și „avansate”) și
- discută deschis ideile (tale) de îmbunătățire.vezi: https://elixirforum.com/t/phoenix-v1-3-0-rc-0-released/3947
-
Phoenix folosește limbajul de programare Elixir, ceea ce înseamnă că yourapp este compilat și rulat pe mașina virtuală Erlang „BEAM”.
Erlang este o mașină virtuală foarte tolerantă la erori, testată în luptă, folosită de multe companii de telecomunicații -
WebSockets („canale”) sunt încorporate în framework, ceea ce înseamnă că crearea de aplicații cu comunicare și interacțiune „în timp real” este mult mai ușoară decât aproape orice alt framework/platformă!(nu este nevoie de un modul
magic
de la terțimagic
! tot ce aveți nevoie este deja acolo, gata pentru a servi milioane de oameni!!!)
vezi: http://www.phoenixframework.org/docs/channels -
Asincronizare ușoară deoarece toată programarea în Phoenix (Elixir) este funcțională!Acest lucru înseamnă că este foarte simplu să abstractizezi funcționalități utile cum ar fi autentificarea cererilor, logarea și procesarea în „piplines „care sunt ușor de citit de către om! (nu este nevoie de un modul
async
terț! nu este nevoie de „promisiuni”, „generatoare” sau „observabile” de gestionat!!) -
Securitatea & Mentalitatea de reziliență este
default
.Criptarea (SSL) este ușoară în Phoenix/Elixir șiatât atenuarea injectării SQL,Cross-site Scripting (XSS)cât și protecția CSRF sunt încorporate (activate dedefault
), astfel încât este practic imposibil pentru un programator „novice” să introducă acest tip de erori de securitate. -
Codul precis nu poate fi subestimat! Putem scrie mult mai puține linii decât în aplicația echivalentă Node.js/Java/Rails/Go, acest lucru înseamnă cădezvoltatorii sunt mai productivi și există mai puțin cod de întreținut!
-
Testabilitate datorită programării funcționale a tuturor controlorilor!
-
Dezvoltare ușoară: http://www.phoenixframework.org/docs/heroku
-
Dezvoltarea zero-downtime este gratuită! (din nou datorită lui Erlang). Erlang gestionează tranziția utilizatorilor „vii/activi” de la versiunea veche la cea nouă a aplicației dvs. fără ca aceștia să observe că a fost upgradată/actualizată!!!
-
Monitorizarea/Managementul încorporat al aplicației dvs. prin intermediul supervizorilor Erlangînseamnă că știți exact cum funcționează aplicația dvs., ce părți s-au blocat/repornit și de ce! Aceasta este o caracteristică pentru care plătim (mult) în alte framework-uri, iar aici este gratuită!!
Vă puteți gândi la un alt motivpentru care utilizarea Phoenix este minunată?!
Vă rugăm să vă împărtășiți gândurile în acest topic:https://github.com/dwyl/learn-phoenix-framework/issues/13
Întrebări?
Trebuie să învăț Elixir înainte de a încerca/utiliza Phoenix?
Da. Vedeți: https://github.com/dwyl/learn-elixir
Trebuie să știu Erlang pentru a utiliza Elixir & Phoenix…?
Nu. Puteți începe să învățați/utilizați Elixir astăzi și să apelați funcții Erlang atunci când este necesar,
dar nu trebuie să știți Erlangbefore
puteți utiliza Phoenix!
Dar Phoenix nu este „Mainstream” … Ar trebui să îl/îl folosim…?
Există multe framework-uri pentru aplicații web din care puteți/avem de ales:https://en.wikipedia.org/wiki/Comparison_of_web_frameworks
Atunci de ce ar alege cineva un framework scris într-un limbaj de programarecare nu este „Mainstream”…?
De ce nu mai folosim Hapi.js…?
Aceasta este dezinformare. Încă folosim Hapi.jspentru o serie de proiecte în care este adecvat.
Acest lucru include mai multe proiecte ale clienților și aplicații/instrumente dwyl interne.
Am decis să folosim Phoenix pentru noile noastre proiecte din aceste motive simple:
- Elixir este un limbaj mai frumos decât JavaScript.
#LessIsMore
#LessButBetter
#SmallIsBeautiful
#SyntaxMatters
- JS poate fi funcțional, în timp ce Elixir este (întotdeauna) Funcțional!Distincția face toată diferența!
Cu programarea „funcțională”,programele sunt mult mai ușor de gânditîn timp ce le scrii/întreții! - Elixir folosește Erlang VM care este mult mai eficient/puternic decât „V8”
- Elixir folosește Erlang VM care se scalează mult mai ușor la multi-core multi-server multi-data-center decât Node.js
(sau cam orice altceva de altfel!!)
Pentru noile noastre proiecte avem nevoie de toleranță la erori multi-data-center!
obținem asta „gratis” folosind Erlang -> Elixir -> Phoenix!!!
În opinia noastră Hapi.js este încă „cel mai bun” framework Node.js și îl vom continue
folosi și îl vom recomanda
oamenilor care au nevoie de aplicații simple care se extind și sunt ușor de întreținut.
vezi: https://github.com/dwyl/learn-hapi
De asemenea, noi încă folosim JavaScript pentru toate micro-serviciile noastre AWS Lambda,acest lucru nu se va schimba.
Ele sunt simple, eficiente și se scalează foarte bine!
vezi: https://github.com/dwyl/learn-aws-lambda
Ce este „greșit” în a folosi Rails sau Django?
Cadrele web „productive” originale au fost „Ruby-on-Rails” și „Django” (python) încă din 2005!
(Am folosit ambele pentru perioade de timp în „călătoria” noastră și putem vorbi despre avantajele fiecăruia dintre ele!)
Nu este „nimic în neregulă” cu utilizarea Rails sau Django.
Credem că există încă o mulțime de cazuri de utilizare pentru ambele framework-uri.
Știm doar că este (mult) mai ușor să construiești „în timp real”
cu Phoenix pentru că „Channels” (WebSockets) sunt integrate,
iar concurența Elixir/Erlang este o cu totul altă treabă!
Erlang (și, prin urmare, Phoenix) poate gestionamilioane de utilizatori simultani pe un singur server,
în timp ce un server Rails/Django poate gestiona doar câteva mii (în cel mai bun caz!)
dacă aplicația dvs. deservește doar câteva mii de persoane în același timp, atunci sunteți în regulă!!
Ne place faptul că Erlang folosește procese „lighweight long-lived”,
ceea ce înseamnă că putem conecta milioane de dispozitive (IoT) …Pentru IoT Erlang este (indiscutabil) Răspunsul!
Pentru aplicații web mai simple, unde vă așteptați doar la câțiva utilizatori pe zi,Rails/Django sunt încă viabile.
Dar de ce să faci compromisuri dacă nu trebuie?
Dacă poți avea o Tesla la „prețul” unui Ford Focus,de ce nu ai face-o?!!!?
De ce să te mulțumești cu ceva bun când poți avea/utiliza cu ușurință ce e mai bun?
Dar GitHub încă folosește Rails … Cu siguranță GitHub este „scalabil”?
Da, GitHub încă folosește Rails pentru aplicația/site-ul lor web.
Dar întrebați pe oricare dintre membrii echipei de bază de la GitHub dacă (având șansa de a o lua de la capăt)ar alege Rails
pentru a construi GitHub în 2017, și vedeți câți dintre ei spun „da, desigur”(cu o față serioasă…)!
De asemenea, GitHub face o mulțime de lucruri pentru a scala Rails în fundal.
Și multe dintre caracteristicile lor mai noi (pe partea de client) sunt scrise în JavaScript!vezi: https://github.com/github
Bottom line is: orice poate fi făcut să se scaleze folosind „DevOps”,
dar Phoenix este făcut să se scaleze dedefault
pentru că Erlang (a fost) inventat (pentru) a se scala!
De ce să NU folosiți Go?
„Există două tipuri de limbaje de programare – cele pe care nu le folosește nimeni și cele despre care toată lumea se plânge” ~ Bjarne Stroustrup(creator al
C++
)
Go este foarte popular. În mare parte datorită faptului că Google îl „sponsorizează”.
A fost conceput pentru a simplifica (înlocui) C++
și Java în interiorul Google …
și, în cea mai mare parte, a reușit!
Ne place foarte mult Go. A fost alegerea noastră „numărul doi” atunci când am decis ce limbaj de programare
(după Elixir) în „stiva noastră post JS”…Decizia de a folosi elixir
în loc de orice else
a fost ușoară:
- Elixir este funcțional (mult mai simplu de citit/scris/menținut/extindere)
- Funcțiile Elixir se compun într-un mod foarte elegant ca „fișe”/”conducte”
- Datele sunt imuabile, ceea ce face ca starea aplicației să fie predictibilă (fără ghiciri!)
- Tipurile sunt dinamice și deduse (nu este nevoie să le declarați manual)dar există reguli care simplifică lucrurile și compilatorul le verifică dând un avertisment corespunzător.
- Erlang face aplicațiile distribuite mult mai ușor și planul nostru este de a construi sistemeIoT care vor însemna conectarea multor (milioane) de dispozitivecu conexiuni persistente, Erlang a fost făcut pentru asta!
- Phoenix include multe lucruri utile din start, inclusiv câteva caracteristici de securitate la care majoritatea oamenilor nici nu se vor gândi.
Lecturi suplimentare:
- De ce Go nu este bun: http://yager.io/programming/go.html
- Go Web Frameworks: https://medium.com/code-zen/why-i-don-t-use-go-web-frameworks-1087e1facfa4
- De ce toată lumea urăște Go: https://npf.io/2014/10/why-everyone-hates-go/(click-bait titlu, unele puncte valide…)
- Discuție: https://www.reddit.com/r/elixir/comments/3c8yfz/how_does_go_compare_to_elixir
(se caută `ajutor` pentru a extinde acest răspuns…)
De ce NU folosiți în schimb Scala + Play Framework…?
Dacă sunteți deja obișnuiți să scrieți Java sau să implementați în JVM, Play Framework este o alegere superbă: https://www.playframework.com
Scala este un limbaj de programare bun și toată lumea ar trebui să-l învețe!https://www.scala-lang.org/what-is-scala.html
Am folosit Play de câteva ori (înainte de a adopta Node.js)și ne-a plăcut foarte mult!
Dar Scala este un limbaj de programare „kitchen sink” (multi-paradigmă)care permite oamenilor să folosească „tot Java” …
Credem că „interoperabilitatea Java” a lui Scala înseamnă că este „prea ușor” să permițicomplexitatea în baza ta de cod. Mai exact „Mutația OOP” …
De ce nu mai folosim noi (DWYL) „Play” pentru proiecte noi?În primul rând, am trecut la Hapi.js (Node.js) cu câțiva ani în urmăpentru că era mai „ușor” și ne permitea să scriem programe minuscule care foloseau doar câțiva Megi de RAM(în cazul în care aplicațiile noastre Play erau foarte mari consumatoare de resurse..!ați încercat vreodată să rulați o aplicație Scala pe un laptop „de bază” cum ar fi un Chromebook…?)
Rezumat al „motivelor” pentru Phoenix în loc de Play:
- Susținem că Play/Scala are încă o mulțime de cazuri de utilizare valabile.
- Elixir este mult mai simplu decât Scala.
- VM-ul Erlang este mult mai bun la concurență decât JVM.
- Ne place faptul că toate datele sunt imuabile în Elixir.
- Ne place cât de puține resurse sunt necesare pentru a rula o aplicație Phoenix (de exemplu, pe un Raspberry Pi!!!)
Credeam doar că pentru proiectul (proiectele) nostru (noastre) modelul Concurrency din Erlang funcționează mai bine, iar codul funcțional care transformă datele imuabile este mai ușor de testat și de întreținut.
Dacă aveți dovezi că „Scala este mai simplu „ne-ar plăcea să le auzim de la dumneavoastră!
Spuneți-ne: https://github.com/dwyl/learn-phoenix-web-development/issues
De ce nu folosiți Haskell?
Dacă vă place atât de mult Programarea Funcțională (FP), de ce nu folosiți Haskell?