Top Banner
Napredno web programiranje web programiranje
29

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

May 27, 2019

Download

Documents

phungbao
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

Napredno web programiranjeweb programiranje

Page 2: 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

Zend Technologies

Page 3: 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

Termini koje treba razumetiBugCoding standardC d   d biliCode readabilityComparison operatorsPerformancePerformanceCachingPortabilityPortability

Page 4: 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

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

Page 5: 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

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

Page 6: 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

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

Page 7: 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

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

Page 8: 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

PrimerPrimer

Page 9: 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

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

Page 10: 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

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

Page 11: 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

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

Page 12: 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

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) ?>

Page 13: 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

= 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”;}

Page 14: 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

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

Page 15: 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

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

Page 16: 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

Ispravna provera

Page 17: 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

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

Page 18: 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

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

Page 19: 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

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

Page 20: 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

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

Page 21: 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

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

Page 22: 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

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

Page 23: 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

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

Page 24: 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

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

Page 25: 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

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

Page 26: 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

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.

Page 27: 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

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

Page 28: 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

Zend Technologies

Page 29: 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

Napredno web programiranjeweb programiranje