29
Napredno web programiranje web programiranje

Napredno web programiranje - webdizajn.ict.edu.rs fileyOvde nije izvršena provera uspeha realizacijje upita y U slučaju da se nije izvršio, neće se generisati greška i kod ide

Embed Size (px)

Citation preview

Napredno web programiranjeweb programiranje

Zend Technologies

Termini koje treba razumetiBugCoding standardC d   d biliCode readabilityComparison operatorsPerformancePerformanceCachingPortabilityPortability

Tehnike koje treba savladatiWriting readable codeProper commentingC i  h  dComparing heterogeneous dataDebuggingIdentifying and preventing performance bottlenecksIdentifying and preventing performance bottlenecksPreventing performance issuesImproving database performanceImproving database performanceUsing content and bytecode caching

Standardi u pisanju kodaKod se mora pisati struktuiranoNe postoji striktan standard kojim bi se utvrdio bolji ilil šiji k d  ili k ji  i j  j   il   i jlošiji kod, ili koji propisuje jasna pravila pisanjaDokumentovanje koda iz tog razloga je obaveznoP lj j  d k ij   jč šć     di  ki   d Pravljenje dokumentacije najčešće se radi nekim od softvera, npr. PHPDocumentorOvaj softver može da kreira dokumentaciju na bazi Ovaj softver može da kreira dokumentaciju na bazi svih komentara u kodu, pod uslovom da su dobro struktuirani, čime se ponovo daje značaj strukturnom pisanju koda

Poželjno je...Korišćenje praznih redova i ekstra space‐a može biti vrlo korisno kao i odvajanje koda u logičke grupe i uvlačenje redovauvlačenje redova

Ravnjanje if uslovaUkoliko se koristi više if uslova, preporučljivo je uvlačenje kodaMeđutim  veliki broj ugnježdavanja  sa pojedinačnim Međutim, veliki broj ugnježdavanja, sa pojedinačnim uvlačenjima, može biti vrlo težak za čitanje kodaPored toga, posebnu pažnju treba posvetiti strukturi juslova u if kontrolama tokovaNekada se zbog negacije u samom uslovu može drastično smanjiti broj linija koda  i struktuiranjedrastično smanjiti broj linija koda, i struktuiranjeTreba razmotriti mogućnost da se kod pise u što manjim logičkim celinamaUz sve ovo, voditi računa o optimalnosti koda za interpreter, iako je rezultat koji se dobija isti

PrimerPrimer

Deljenje jedne linije kodaJedna od dobri stvari u PHPu je što se kod jedne linije može pisati u proizvoljno mnogo redova, bez promene funkcionalnosti kodafunkcionalnosti koda.Ovo je posebno bitno u situacijama kada je kompleksna logika koja se definiše posmatranom kompleksna logika koja se definiše posmatranom linijomDeljenje je dozvoljeno u svakoj situaciji sem u deljenju j j j j j j j jcelovitog stringa

Konkatanacija ili zamena koda?U slučaju kada se u nekom stringu žele integrisati druge vrednosti promenljivih, može se koristiti operator za konkatanacijukonkatanacijuMeđutim, to može biti vrlo naporno za čitanje

Lošije jer se mora pozvati posebna biblioteka

Sa druge strane to se može uraditi jednom linijom koda primenom funkcije printf(), koja vrši zamenu dela koda

Zatvaranje tagovaKombinacija HTML i PHP koda je vrlo česta i uobičajenaPotrebno je obratiti pažnju na koji način se otvara tj. zatvara PHP kod  obzirom da postoji više načina za pisanje zatvara PHP kod, obzirom da postoji više načina za pisanje PHP kodaNpr.p<?php print “Testing 1 2 3” ?><?= “Testing 1 2 3” ?>

Samo je verzija <?php ?> potpuno portabila dok se sve druge mogu isključiti kroz PHP konfiguracijudruge mogu isključiti kroz PHP konfiguraciju

print() ili echo()Već je ranije naglašena razlika između print() i echo()print() može raditi kao funkcija i samim tim uvek ć i  d  (T )  d k  h       divraćati vrednost (True), dok echo to ne radi

U tom smislu sasvim je regularna sintaksa? h h   i  ( ) ?<?php echo print (10) ?>

= ili == ili ===If uslov dozvoljava upotrebu bilo kod operatoraTo često može da izazove greškuNajčešća je

Naravno, ovo treba da bude napisano kao

if ($a == 5){{print “a is 5”;}

Natraške?Jedan od načina kojim se nikada ovaj tip grešaka neće napraviti, bez obzira na broj znakova = je

Na ovaj način, ako je jedno =, prijaviće se greška, jer konstanti nije moguće promeniti vrednostkonstanti nije moguće promeniti vrednostSa druge strane, logika rada je ista u regularnim uslovima, pa se ovakav vid pisanja proporučuje, p p j p p j

Provera dostupnosti resursaČesto se greši u pisanju koda jer se ne proverava dostupnost nekog udaljenog resursaNa primerNa primer

Ovde nije izvršena provera uspeha realizacije upitaj p p j pU slučaju da se nije izvršio, neće se generisati greška i kod ide na sledeću liniju koda. Kasnije u kodu se može prijaviti greša u liniji koda koja zavisi od ove akcije  i teško se greša u liniji koda koja zavisi od ove akcije, i teško se pronaći u ranijem kodu

Ispravna provera

Ternarni operatorUpotreba ovog operatora je u situacijama kada je potrebno u if uslov staviti neki dodatni logički problemproblemNa ovaj način, kod postaje mnogo kraći i pregledniji

• ili

Ternarni operatorDodatno ovo se može upotrebiti i u komunikaciji sa bazom podataka

Logovanje i greškePrikaz grešaka u browser‐u može biti problematičnoKorisnik vidi da postoji greška, vide deo koda ili podataka koje ne želite, ...Jedan od dobrih načina da se ovo reši je podešavanje u php.ini setings‐u, i definisanje da se greške ne prikazuju nego skladište u log fajl

lOvo se realizuje pomoćudisplay_errors na off i log_errors na on

Može se koristiti i shell komanda tail –fMože se koristiti i shell komanda tail  fDodatno, može se koristiti funkcija set_error_handler() kojom se na sopstveni način može definisati obrada grešaka i specificirati koje greške i koje informacije se pamte u log fajlui koje informacije se pamte u log fajluMože se koristiti i @, ali se tako ne mogu pronaći greške koje su se desile

Upotreba Debugger‐aUpotreba debugger‐a je vrlo poželjna je se može pratiti izvršavanje koda, vrednosti pojedinih promenljivih, stavljanje break pointa i slstavljanje break pointa i sl.Postoji veliki broj debugger‐a, od kojih su neki integrisani u Zend Studio IDEintegrisani u Zend Studio IDE

Optimizacija performansiMerenje performansi sajta u realnoj upotrebi je vrlo važnoSajt može da radi savršeno u off modu, i na Vašem računaru, ali kada velika količina saobraćaja krene ka sajtu, računaru, ali kada velika količina saobraćaja krene ka sajtu, dolazi do izražaja sva optimizacija u koduPrvi način rešavanja problema je povećanja RAM memorije i veličine hard diska na serverui veličine hard diska na serveruBitno je omogućiti da se podaci koji pripadaju aplikaciju čuvaju na jednom disku, a podaci iz log fajala na drugomNa taj način operativni sistem može da optimizuje keširanje Uz to, bitno je da server bude dobro konfigurisanUz to, bitno je da server bude dobro konfigurisan

Optimizacija performansiDobra preporuka je da se na serveru isključi reverse DNS resolution i analiza log fajla raditi offlinePotrebno je poznavati i karakteristike serveraPotrebno je poznavati i karakteristike serveraNa primer, Apache 1.3.x kreira kopije svih svojih procesa (children). Svaki child proces čeka na konekciju od strane ( ) p jweb serveraU poreayumevanoj konfiguraciji Apache ima maksimalno   hild150 children‐a

Svaki child traži 2 do 5 megabytes memorije da bi radioTako za 150 njih treba između 300MB i 750MB  pa ako Tako za 150 njih treba između 300MB i 750MB, pa ako nema fizičke server će raditi sa virtuelnom memorijom, što dodatno usporava ceo proces rada

Optimizacija performansiStvaranje sve više konekcija za nove children, povećava korišćenje virtuelne memorije, pa se i vreme odziva povećavapovećavaKako se procesi ne izvršavaju, stvara se jos više novi children‐a, da bi se to uradiloViše novih još više usporava sistem, i sve se kumulativno produžavaZato je čitanje dokumentacije servera jedna od stavki Zato je čitanje dokumentacije servera jedna od stavki koja se svakako preporučuje, a naročito u delu gde se definiše podašavanje i rad sa children‐ima, njihovom b j   ij  i  ličbroju, opcijama i slično

Optimizacija performansiDodatna mogućnost PHP‐a je da se prenos podataka ka korisniku zipuje i na taj način prenos ubrzaJ d   d  či  j  d     ći GZIP b ff  h dlJedan od načina je da se omogući GZIP buffer handlerunutar php.ini fajlaDrugi način je da se ovo aktivira direktno iz skripta Drugi način je da se ovo aktivira direktno iz skripta pomoću ob_start(“ob_gzhandler”);Ovaj sadržaj će biti komprimovan samo ako browser Ovaj sadržaj će biti komprimovan samo ako browser podržava GZIP standard za kompresiju

Optimizacija baze podatakaU komunikaciji sa bazom podataka, obzirom da se radi o komunikaciji sa eksternim fajlom, sporost u komunikaciji može izazvati veliko nezadovoljstvo kod korisnika sajtamože izazvati veliko nezadovoljstvo kod korisnika sajtaNema striktnih pravila u vezi sa strukturom i komplesnošću definisanja upita bazi podatakaMeđutim, pisanje 20 upita unutar jedne strane može uticati na brzinu realizacije prikaza sadržajaN k d    j d   it  ž  biti d fi i  t k  d   ht  Nekada samo jedn upit može biti definisan tako da zahteve mnogo više vremena nego i 20 pomenutih upitaEmpirijsko pravilo većine programera je do 5 upita po stranip j p p g j 5 p p

Optimizacija baze podatakaPrvi korak u optimizaciji je optimizacija tabela u bazi podatakaBaza mora biti normalizovana, svaki podatak treba da se 

l d b l b l bnalazi u samo jednoj tabeli i tabele moraju biti ispravno povezane stranim ključevimaNa primer, upit

INSERT into my_table values (10, ‘Test’)Može biti loš, obzirom da polazi od toga da tabela ima samo dve kolone. Kako je u relanom životu promena di j   k d   h d   j  i  bi i   šk   k  dizajna nekada neophodna, ovaj upit bi izazvao grešku ako do promene dizajna dođe. Tako bi trebalo da ovaj upit bude

INSERT into my_table (id, name) values (10, ‘Test’)k b d d l d d k lIsto tako treba doviti računa da li će u dodatim kolonama 

biti omogućeno null, i da li će imati default‐ne vrednosti, da bi sve radilo kako treba.

KeširanjePonekad je spor upit ili eksterni web servis toliko spor, da se na to ne može upicatiU tim situacijama treba razmotriti tehniku keširanja, čime U tim situacijama treba razmotriti tehniku keširanja, čime će se sačuvati dobijeni podaci, i u sledećoj iteraciji koristiti ti snimljeni podaci a neće se praviti novi zahtev ka eksternom resursueksternom resursuPostoji više tehnika za keširanje(što definiše da li će recimo snimiti rezultat upita bazi podataka ili cela web stranica)K ši j   ž  bi i    k   h   d   k i ik  Keširanje može biti u trenutku zahteva od strane korisnika, ali i programiski generisano, što se definiše podešavanjimaZa ovo se mogu koristiti i komercijalna rešenja, od koje g j j jjedno ima i Zend

Zend Technologies

Napredno web programiranjeweb programiranje