1
Jak nie u
ż
ywa
ć
frameworków?
Paweł Abramowicz
Memory is cheap these days. Go with what will
make your development easiest (which is usually
what your team knows best).
~ Jason Baker
odp. na stackoverflow, 2.01.2009
2
I’ve gone down this path already...
Projekty na ZPI i ZTW wykonane w Laravelu.
Własny framework – nawet zanim tamte projekty powstały.
Czy naprawd
ę
potrzebuj
ę
cho
ć
by połowy z tego, co oferuje mi framework?
PHP: {C, C++, Java}-like web framework
Społeczno
ść
programistyczna była ju
ż
w tym miejscu.
PHP powstał jako framework dla skryptów CGI i zamiennik dla pisania własnych
rozszerze
ń
Apache.
3
Dlaczego frameworki?
– szybkie tworzenie skomplikowanych serwisów,
– no-bullshit: nie piszesz ju
ż
ż
adnej z funkcjonalno
ś
ci, które “powinny by
ć
” w
bibliotece standardowej j
ę
zyka,
– zaawansowane mechanizmy cache, które działaj
ą
zwykle całkiem dobrze out-of-
the-box.
Argument 1: musz
ę
by
ć
zbyt rozwlekły (verbose)
Ten argument istnieje głównie w j
ę
zykach bazowanych na rodzinie C (PHP).
Je
ś
li nie obchodzi Ci
ę
implementacja funkcjonalno
ś
ci, wybierz Ruby lub Python!
We front-endzie: czy na pewno nie mo
ż
esz u
ż
y
ć
jakiego
ś
rozwi
ą
zania HTML5?
Kiedy ostatnim razem przejrzałe
ś
dokumentacj
ę
swojego j
ę
zyka?
http://caniuse.com
http://bitworking.org/news/2014/05/zero_framework_manifesto
4
Argument 2: nie chc
ę
implementowa
ć
wszystkiego
Ups, leftpad ;)
Na pocz
ą
tku 2016 roku wielu programistów siadaj
ą
c przy swoich biurkach zauwa
ż
yło,
ż
e ich
przechodz
ą
ce testy programy z dnia na dzie
ń
przestały si
ę
kompilowa
ć
.
Winny był pakiet leftpad, maj
ą
ca par
ę
na
ś
cie linii biblioteka dostarczaj
ą
ca pojedyncz
ą
funkcj
ę
, uzupełniaj
ą
c
ą
ła
ń
cuch znaków od lewej podanym znakiem, a
ż
do po
żą
danej
długo
ś
ci znaków. Znikn
ę
ła ona z sieci po zawirowaniach wokół innej biblioteki tego samego
autora, który usun
ą
ł w przypływie gniewu wszystkie swoje projekty z repozytorium npm.
Nie udawało si
ę
zbudowa
ć
kolejnych wersji wielu frameworków Javascriptowych,
korzystaj
ą
cych z leftpad. Dodatkowo, problemy zanotowano tak
ż
e w zespołach
deweloperskich du
ż
ych portali, takich jak Facebook.
Argument 3: potrzebuj
ę
cache, ale bez rozmy
ś
lania
Mechanizmy cache kodu s
ą
cz
ę
sto wbudowane w j
ę
zyk.
Mechanizmy cache zasobów HTTP s
ą
wbudowane w HTTP – po prostu
przeczytaj speck
ę
, dobrze zrobi to Twojej stronie; mo
ż
esz osi
ą
gn
ąć
du
ż
o wi
ę
cej,
ni
ż
to, co robi
ą
domy
ś
lne ustawienia Twojego frameworka.
Redis is fun!
Czy w ogóle potrzebujesz cache po stronie serwera?
5
Plus cache, plus mailer, plus baza danych, plus ORM...
Cz
ę
sto potrzebujesz tylko podstawowej funkcjonalno
ś
ci bazy danych, wysła
ć
maila, zapisa
ć
plik na chwil
ę
…
… dlaczego nie u
ż
y
ć
wbudowanych lub lekkich rozwi
ą
za
ń
?
https://levels.io
Kwestie wydajno
ś
ci
Je
ś
li potrzebujesz wysokiej wydajno
ś
ci, a korzystasz ju
ż
z frameworka i wszystkich
dost
ę
pnych przyspiesze
ń
, cz
ę
sto przytaczanym argumentem b
ę
dzie “Je
ś
li
potrzebujesz wydajno
ś
ci, skorzystaj z kompilowanych rozwi
ą
za
ń
”.
Ale chwila, przecie
ż
same j
ę
zyki to kompilowane rozwi
ą
zania, dlaczego nie
skorzysta
ć
z ich bibliotek standardowych?
J
ę
zyki oferuj
ą
równie
ż
mo
ż
liwo
ść
implementacji funkcji w formie wtyczek – php-ds
1
1
http://tiny.cc/phpds
6
Co zamiast frameworków?
Zero framework manifesto – wcale nie chcemy pisa
ć
wszystkiego sami.
Zamiast u
ż
ywa
ć
cało
ś
ci frameworka, mo
ż
e potrzebujesz tylko jednego z jego
modułów?
Mo
ż
e podstawowe funkcje, z których korzystasz, pokrywa jaki
ś
microframework?
Mo
ż
e sytuacj
ę
rozwi
ąż
e mały zestaw wzajemnie rozł
ą
cznych narz
ę
dzi?
(“za moich czasów” u
ż
ywali
ś
my lightboksa do galerii, nie potrzebowali
ś
my całego jQuery)
Case study: zafri
– 21 linii bootstrappingu
1
+ 11 linii routingu
– SQLite – czy dla małego serwisu potrzebny Ci MySQL? Mo
ż
e wystarczy JSON?
– własne biblioteki do obsługi plików .env i infrastruktury do wysyłania maili
1
Bootstrap to nazwa biblioteki, bootstrap to proces “wi
ą
zania sznurówek do biegu”
7
Pami
ę
taj o pami
ę
ci!
Wymagania pami
ę
ciowe frameworków potrafi
ą
by
ć
poka
ź
ne: aplikacja Hello World
napisana w Ruby on Rails pochłania 35 MiB pami
ę
ci RAM. Dla porównania ta
sama aplikacja w czystym Ruby – poni
ż
ej 10 MiB; w Pythonie – 7,3 MiB.
http://nuald.blogspot.com/2011/08/web-application-framework-comparison-by.html