10/9/2013

Blog Generat Static

Paginile GitHub ce susțin generatoare statice s-au înmulțit considerabil în ultimul an, tot mai mulți programatori și mulți alți utilizatori avansați alegând avantajele unui sait generat static, în contextul în care timpul este tot mai prețios iar conținutul de calitate devine tot mai important în era Facebook, Twitter, Google One, Spotify, etc. Blogurile (saiturile) ce mizează pe generarea statică a saiturilor o fac din necesitate sau urmează un hype?

Sait HTML

Pentru început vom spune că cel mai rapid randat este direct codul HTML, indiferent de doctype. În plus, dacă codul este scris și fără greșeli de sintaxă, cu atât mai bine. Însă a scrie direct HTML este ok pentru un sait de prezentare, cu puțin conținut dinamic și care nu suferă prea multe modificări în timp (de exemplu, situl unei companii, cu câteva poze, o scurtă prezentare și niște date de contact). Se poate ține și un blog dar adminstratorul acestuia va fi nevoit în permanență să găsească o soluție de prezentare a tuturor articolelor centralizat (în genul unei pagini master - arhivă) care va trebui actualizată de fiecare dată când apare o postare nouă sau un sistem manual tip page prev / page next, cu aceleași limitări. Desigur, cu un conținut deosebit și cu o semantică corectă (de exemplu să nu folosiți tagurile h1 și h2 doar pentru a avea un text mai mare, eventual cu alt font și culoare, să folosiți strong în loc de b doar pentru a avea un text cu font boldat dar cu importanță semantică redusă, etc.), șansele unui page rank mare pentru fiecare articol sunt ridicate. Dar ca sfat personal, dacă vreți să scrieți des și să țineți un jurnal online, folosiți Wordpress (externalizat pe platforma Wordpress.com sau local folosind pachetul Wordpress oferit de mai toate firmele de hosting serioase prin Fantastico), Tumblr (externalizat și găzduit pe serverele Yahoo) sau folosiți un generator static (găzduit extern dar cu mirror local permanent), fiindcă veți avea mult mai mult timp să vă concentrați pe scrierea de conținut decât pe administrarea acestuia.

Pentru articolul prezent, voi folosi cu echivalență conceptele de blog web și de sait web, deși primul este o particularitate (subset) al celui de-al doilea, iar acolo unde precizarea diferențelor este necesară, o voi face.

Wordpress și Movable Type

Dezvoltarea limbajelor interpretate și a scripting-ului (PHP, Python, Perl, Javascript) au dus la apariția unor unelte noi care au simplificat crearea dar mai ales menținerea saiturilor web, precum și îmbogățirea fiecărei pagini web cu elemente generate dinamic (formulare contact, date și arhive, căutarea după termen, gruparea după categorii și/sau cuvinte cheie, etc.). Implementarea pe scară largă a soluției opensource de hosting LAMP (mașini Linux, server web Apache, baze de date MySql și limbaj interpretare PHP) a condus la apariția la mii de soluții software, cu care se putea crea, mneține și dezvolta orice tip de sait (până la Web 2.0, partea de interactivitate a fost asigurată de Flash, care însă a fost folosit în exces și a grăbit apariția și implementarea la nivel de browser și nu ca plugin a CSS3 și HTML5).

Wordpress (MySql + PHP) și Movable Type (MySql + Perl) au purtat un război surd (exagerare, desigur) în atragerea utilizatorilor care doreau să își publice online ideile și gândurile, weblog fiind noul hit din mediul online, după decăderea chat-ului și conversațiilor IM (care presupun, de regulă, conversații unu la unu, spre deosebire de blog, unde există o anumită interactivitate / feedback). Lupta s-a dat atât tehnologic (Perl vs/ PHP) cât și ca marketing și gestiune a utilizatorilor.

Wordpress a câștigat nu pentru că PHP ar fi mai bun în gestiunea textului (sarcina principală a unui motor software pentru un blog) decât Perl, ci pentru că oamenii de la Automattic au transformat în propriul avantaj schimbările dese în politica de licențiere a Movable Type (a fost free, apoi pe bani, acum opensource pentru utilizatori individuali dar pe bani pentru firme). Succesul Wordpress a fost completat, pe lângă licență, de oferirea unei platforme hosting pentru cei care nu își permiteau propria soluție de hosting (blogurile de tip utilizator.wordpress.com), de susținerea totală a comunității în a dezvolta plugin-uri și teme gratuite dar și plătite (modele tip Apple Store cum este Envato, de exemplu - dezvoltatorii scriu cod - teme, plugin-uri - pentru Wordpress deoarece există zeci de milioane de instalări adică o piață creată precum și numeroși utilizatori disponibili în a plăti pentru aceste caracteristici suplimentare). Wordpress ca motor software a fost dezvoltat continuu, fapt care a condus la tot mai multe caracteristici și opțiuni pentru administratori și utilizatori (cele mai multe la cererea acestora), dar și mult mai multe bătăi de cap pentru programatorii nucleului Wordpress, nevoiți să mențină tot mai multe linii de cod și să găsească tot felul de improvizații pentru menținerea compatiblității cu noile tehnologii.

Wordpress a devenit o platformă extinsă, care poate găzdui orice tip de sait, de la un simplu blog, la un sait de prezentare al unei companii, la saituri tip portofoliu, la magazine online și chiar comunități în era socializării.

Blog Generat Dinamic

Wordpress este o soluție de sait generat dinamic, ceea ce presupune existența unui motor software care să servească pagini dinamice pe baza conținutului și metadatelor din diferite tabele ale unei baze de date. Plastic vorbind, vorbim de propriul tău ospătar la un bufet suedez, care știe ce îți place și îți aduce pe masă diferite aperitive, mâncăruri și băuturi. Într-un blog Wordpress neoptimizat (vanilla), numele sitului, descrierea, numele articolelor și data publicării acestora, etichetele asociate, tag-urile, categoriile și meniurile folosait, tot ceea ce ține de comentarii și multe, multe altele, sunt introduse de administratorul blogului și salvate într-o bază de date.

Această bază de date este compusă din mai multe tabele. Baza de date este masa (bufetul) iar farfuriile și alte recipiente sunt tabelele. Fiecare vizitator al sitului este un client al bufetului suedez. Administratorul bufetului (soluția php + mysql + web server) are grijă să nu fie probleme la masa bufet, ținând socoteala mâncărurilor și aperitivelor, cât și a locului acestora pe masă (administrarea blogului), umplerea mesei cu noi mâncăruri și îndepărtarea farfuriilor goale (adăugarea de conținut, ștergerea de conținut) și ce este mai important, servirea tuturor clienților (vizitatori ai sitului). Pe lângă sarcinile administrative (backend), de susținere a administratorului blogului în gestiunea sitului, motorul software trebuie să servească și cererile fiecărui vizitator. Astfel, fiecare vizitator vine cu propriul set de cerințe - unii doresc să citească ultimul articol (paralelă - unii clienți doresc cel mai nou aperitiv de pe masă), alții doresc să comenteze, alții urmăresc articole mai vechi și caută prin categorii și norul de etichete (paralelă - nehotărâții de la masă).

Ideea blogului generat dinamic este că fiecare vizitator trebuie servit cât și administratorul blogului, prin numeroase operațiuni de interogare a bazei de date și de servire a conținutului dinamic solicitat, adică un dute-vino continuu de la bufet la oaspeți cât și de la bufet la bucătărie. Problemele pot fi mult mai mari dacă sunt instalate plugin-uri scrise prost, care îngreunează și mai mult platforma și așa greoaie (paralelă - brânzeturi aruncate alandala prin farfuriile cu legume proaspete). Separat de toate acestea există vulnerabilitățile și problemele de securitate - să le spunem doi-trei ospătari români care mai șmanglesc din mâncăruri sau intră subit în grevă și blochează tot evenimentul. În termeni de web hosting și generare pagini web, interogările bazei de date presupun trafic intens între web server și utilizator / administrator cât și stresarea resurselor web server-ului (Apache, cel mai probabil) și a serverului MySql. Pentru un blog cu trafic mare și vizitatori numeroși, un server cu disponibilități hardware limitate (CPU, viteză hard-disc, lățime de bandă) va genera întârzieri în afișarea paginilor pentru unii vizitatori. Dacă și vizitatori beneficiază de o conexiune nu tocmai fericită, problemele se vor accentua și disconfortul vizitatorilor se va traduce prin nemulțumirea acestora și chiar evitarea accesării ulterioare a blogului respectiv.

Soluțiile cloud și CDN înseamnă mutarea sarcinilor de procesare și servire a clienților către alte mașini mai puternice, în general contra cost și par cel mai bun compromis pentru cei care nu pot renunța la avantajele oferite de o bază de date.

Blog Generat Static

Generatoarele statice execută local, pe calculatorul administratorului sau pe o stație externă (și aici merge o soluție GitHub, Dropbox, Amazon S3), diferite de server-ul web, anumite sarcini prin care transformă elementele de intrare (conținut utilizator, metadate conținut utilizator), în pagini statice HTML iar pe baza șabloanelor de sait, pagină și/sau articol construiesc un sait HTML static, care este mai departe servit ca atare vizitatorilor, fără interogări suplimentare, ceea ce face din lățimea de bandă a soluției de hosting și/sau a vizitatorilor principalul bottleneck în afișarea sitului, resursele CPU sau viteza HDD fiind mai puțin importante.

Continuând analogia cu bufetul suedez, suntem în situația în care fiecare oaspete la eveniment (vizitator) își găsește pe propria masă farfurii cu toate aperitivele și mâncărurile disponibile, cu precizarea că în acest caz bufetul suedez este un pic mai sărac în ofertă. Dar nu mai există chelneri și nici dute vino.

Blogul generat static păstrează câteva din avantajele unui blog generat dinamic. Există o temă (stil) care depinde de imaginația și cunoștiințele de HTML / JavaScript / CSS ale administratorului. În general, există pagini statice (echivalentul paginilor Wordpress) cât și articole (echivalentul posturilor Wordpress), există un sistem automat de datare și arhivare a paginilor și arhivelor și alte numeroase facilități mai avansate. Ceea ce nu se poate oferi, decât prin soluții externe, este un sistem modern de comentarii (acestea presupun interogarea bazei de date), o funcție de căutare prin sait (aici intervine modulul Google Search sau diverse scripturi Perl). De asemenea, nu există administrarea blogului pe paradigma Wordpress, cu panou, editare centralizată articole, pagini și caracteristici sait. Conținutul și structura logică a sitului sunt create manual, în timp ce generatorul static formatează” (un termen ușor forțat din lumea editării text) conținutul potrivit unor reguli existente sa umodificate de administratorul blogului.

Pe foarte scurt și destul de alambicat, cam asta se întâmplă. Un script (de la câteva zeci de linii de cod până la programe mult mai mari) aplică anumite modele de pagină, îmbogățite cu stiluri CSS peste conținutul (textul) scris, generând un sait HTML complet și îl trimite spre afișare serverului web.

Într-o interpretare ușor de înțeles, generatorul static știe câteva lucruri pe care le face bine și foarte repede, pe când Wordpress știe multe lucruri pe care le face încet și bine.

Evitându-se folosirea bazelor de date, totul este generat foarte rapid; un server MySql (Maria DB, variante SQL) este un important consumator de timp CPU al platformei de hosting, alături de serverul web propriu zis. Fiecare interogare a diferitelor tabele din baza de date înseamnă trafic suplimentar, nevăzut de utilizator (vizitator sau administrator / blogger) și în spatele conținutului propriu zis, trafic tradus în timpi de încărcare mai mari ai paginilor și posibilitatea mult mai mare de apariție a unor erori. Utilizatorii mobile (3G, wireless) au numeroase constrângeri implicit, dincolo de rezoluția dispozitivului - lățimea de bandă și traficul disponibil în abonament dar și o soluție de alimentare mobilă, pe baterie - astfel încât fiecare secundă în plus în așteptarea randării paginii (sitului) pentru interogări ale bazei de date amplifică angoasa și poate mărește factura.

Wordpress este o platformă greoaie

Wordpress este, pe bună dreptate, liderul de facto al platformelor de publicare a blogurilor și nu numai, intrând adânc pe tărâmul CMS-urilor și chiar a platformelor e-commerce, datorită numeroaselor teme și plugin-uri. Ar fi incorect totuși să rezumăm Wordpress la statutul de platformă greoaie și doar atât. Foarte interesant, printre miile de plugin-uri care extind Wordpress, s-au dezvoltat plugin-uri inclusiv pentru optimizarea unui sait Wordpress, plecând de la tutoriale aplicabile oricărui sait cu conținut îmbunătățit (optimizare scripturi, imagini, alte fișiere, etc.), trecând prin simple optimizări ale bazei de date / tabelelor MySql și mergând până la pseudo-generarea de post-uri statice (așa numitele plugin-uri de tip wp-cache), pentru că un cod HTML, fără prea multe interogări de baze de date sau a altor fișiere (scripturi, fișiere externe sau interne, imagini, stiluri, etc.), este randat cel mai rapid. Sad, but true.

Pe lângă stresul provocat de platforma propriu zisă - PHP și MySql, codul Wordpress este dat ca exemplu de spaghetti code”. Puteți citi și căuta mai multe pe net despre cât de bun este pentru web în contextul actual și cu alternativele actuale limbajul PHP, dar și cât de bună este implementarea PHP în Wordpress și de ce un blog Wordpress este încet. Desigur, toată lumea are dreptul la păreri dar mai ales dreptul la alegere.

În ce constă alegerea?

Pentru cei care doresc să se concentreze pe scrierea de conținut, au cunoștiințe de CSS/HTML și ceva limbaje interpretate peste necesarul instalării și optimizării unui blog Wordpress, soluția unui generator static este binevenită și recomandată. Se va evita astfel o platformă greoiae, cu multe vulnerabilități și care poate deveni o bătaie de cap. Controlul asupra blogului va fi aproape total. Câteva din avantajele unui blog static (sait generat static) sunt enumerate mai jos.

  • Performanță - memorie și timpi CPU mult mai mici necesari pentru randare; în plus nefind necesar un server Sql, situl este în picioare chiar dacă la furnizorul de hosting cade serverul MySql (poate fi serviciu pe aceeași stație sau o altă stație separată configurată special pentru lucru cu baze de date);
  • Securitate / Siguranță - neexistând o bază de date și posibilitatea atacării acesteia și nici cod interpretat (vizibil), singurul element vulnerabil este furnizorul de hosting și cum face față acesta atacurilor DoS, de exemplu;
  • Backup și Redundanță - aveți mereu o copie la zi a sitului pe calculatorul local sau pe stația externă pe care este instalat generatorul static (o caracteristică a generatoarelor statice);
  • Portabilitate - vă puteți muta ușor către un alt furnizor de hosting, deoarece situl live” îl aveți deja copiat (generat) local sau îl puteți copia foarte rapid de pe stația externă; nu trebuie să faceți vreun backup deosebit sau să mutați (exportați, modificați, importați) baze de date; în plus, puteți găzdui situl și pe mașini cu performanțe mai reduse, deoarece cerințele de sistem sunt minime;
  • Control - pentru cei obsedați de control, un generator static oferă posibilități multiple (aproape nelimitate) în ceea ce privește gestiunea layout-ului, cât și a structurii acestuia - controlați fiecare script, fiecare stil, fiecare imagine încărcate;
  • Economie - puteți găsi soluții de hosting gratuite pentru găzduirea sitului dvs., chiar dacă aceste vin cu tot felul de limitări; având un sait static (HTML + Javascript), cel mai probabil nu veți fi atinși de acestea;

Un blog static are și numeroase dezavantaje. Cele mai important sunt enumerate mai jos.

  • Necesitatea existenței unui PC pe care să fie instalat generatorul static, deoarece va trebui să rulați local generatorul static pentru a obține o copie locală actualizată a sitului, care va fi ulterior trimisă server-ului web; puteți totuși să obțineți un grad de portabilitate prin folosirea unui stick USB care poate fi configurat ca server web și care va deveni mașina pe care este generată copia locală;
  • Administrarea blogului nu se realizează prin intermediul unei interfețe grafice locale sau web, ca în cazul Wordpress ci direct din linia de comandă, atât pentru modificări ce țin de layout și structură a sitului cât și scrierea propriu zisă a articolelor;
  • Scrierea articolelor se poate face direct în format text, insă rezultatul generat și vizibil de vizitatori va fi în genul unui mesaj email, cu minime formatări - fără caractere boldate, fără italice, fără diferențierea semantică sau structurală a diferitelor blocuri de text, etc.; pentru obținerea unor formatări ale textului în genul celor oferite de Wordpress prin Ckeditor și tema rulată (care oferă în fișierul stylesheet principal CSS diverse stiluri pentru tag-uri cum sunt titlurile, listele, lucrul cu paragrafe, etc.) , va trebui să scrieți direct cod HTML (sau Markdown sau reStructuredText) în articol sau să apelați la un editor GUI cu suport pentru astfel de sintaxe;
  • Nu puteți beneficia implicit de sistem de comentarii (puteți implementa ușor soluții externe ca Disqus, Livefyre, etc.), nu puteți avea funcția de căutare prin sait (celebra casetă search) decât cu excepția implementării (destul de ușor, totuși) a unei casete Google Search; în funcție de generatorul static folosit sunteți mai mult sau mai puțin limitați de folosirea separat sau împreună a unui sistem de arhivare a paginilor / articolelor, a unui sistem de grupare pe categorii și / sau după cuvinte cheie, a unui sistem de paginare înainte - înapoi, etc.;
  • Eventuale facilități suplimentare și module ulterioare ale sitului trebuie integrate manual deoarece nu există un sistem integrat de plugin-uri și nici de teme (templates, skin);

Toate dezavantajele prezentate mai sus pot fi considerate drept features” de unii utilizatori mai experimentați, care se așteaptă să își scrie în linie de comandă articolele în timp ce mai compilează un kernel sau să folosească formatarea Markdown, reST ori HTML în dauna editorului GUI din Wordpress (să ne amintim cât de mult a durat până când amplasarea imaginilor cu margin și padding într-un post a funcționat în panoul de administrare și a fost susținută de cod CSS în cadrul diverselor teme altele decît cea oficială). Legat de comentarii, mulți utilizatori cred că acestea distrag autorul de la adevărata menire - aceea de a produce conținut și nu de a comenta mai mult sau mai puțin on-topic pe marginea lui - părerile vizitatorilor se pot exprima și pe Twitter sau via email.

Într-un articol viitor, voi reveni cu prezentarea câtorva generatoare statice și a soluțiilor existente în general, cât și cu un mic studiu de caz legat de soluția adoptată pe acest blog.

tehnologii web


Articolul Precedent
Despre Accize Apartenența la Uniunea Europeană înseamnă și asumarea unor reguli cum sunt, de exemplu, nivelul accizelor, adică a unor impozite tip penalizare (de
Articolul Următor
The Smelly Station Îmi aduc aminte de un episod din Seinfeld - “The Smelly Car”, în care Saab-ul lui Jerry a capătat un miros care nu a mai putut fi scos de nicio