Avaleht
uus teema   vasta Tarkvara »  WWW »  küsimus php funktsioonide kohta märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 14.02.2009 13:39:28 küsimus php funktsioonide kohta vasta tsitaadiga

Kui mul on näiteks ühes include'itavas failis umbes 3000 rida koodi ja kümnete kaupa funktsioone, kas see teeb lehe aeglasemaks ja koormavamaks, kui selle faili iga lehe päises sisse includin?
Või oleks mõttekas jagada need funktsioonid eraldi failidesse (see oleks mulle tülikam) ja includeda vaid seal, kus just ainult mingeid konkreetse lehe jaoks vastavaid funktsioone vaja on? icon_rolleyes.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 14.02.2009 14:16:35 vasta tsitaadiga

3000 rida on tühine. Projektis, mida hetkel arendan, on rohkem kui 3000 rida JavaScripti, rääkimata serveripoolsest koodist.

Suurem probleem on see, et 3000 rida koodi ühes failis on ikka meeletult palju. Mul on siin üks fail, kus on 500 rida koodi (kõige suurem fail kogu projektis), ning seegi on juba täiesti kohutav.

Peaksid kindlasti need funktsioonid jagama nende funktsionaalsuse põhjal eraldi failidesse. Seejärel võid kirjutada mingi väikse PHP faili, mis inkluudib kõik need failid, mis tekkisid selle suure faili tükeldamisel, ning saavutad ikkagi selle, et iga lehe päises pead inkluudima vaid selle teisi faile inkluudiva faili.

Kunagi kui ma programmeerisin QBASICus, kirjutasin ma ka kogu programmi koodi ühte faili - seal lihtsalt polnudki teistmoodi võimalik. Lõpetasin QBASICu kasutamise, kui jõudsin punkti, kus suvalise järgmise koodirea lisamise peale teatas süsteem: "Program out of memory".

PHP puhul sa sellise probleemi otsa niisama naljalt ei satu, aga sellegipoolest pole hea mõte kogu koodi ühes failis hoida. Alustuseks on see juba väga riskantne. Kui selle ühe failiga peaks midagi juhtuma (ma oletan, et sa ei kasuta versioonihaldust), siis on ju kõik metsas. Kui sul aga on palju faile, ning keerad neist ühe untsu, siis pole ju veel kõik kadunud.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 14.02.2009 14:31:48 vasta tsitaadiga

Selge siis, tänud! icon_biggrin.gif
Lisaks mul on veel mitmeid asju tehtud ühte faili, eraldatud vaid swicth()-iga. Näiteks foorum, milles on 1500 rida koodi, selle saaks jagada 6-7 eraldi failiks, aga tegin ühe failina, sest ülal on mingid andmed ja muutujad, mida on korraga kõikides case'ides vaja ja neid iga eraldi faili jaoks oleks tüütu uuesti määrata, aga vb ma lihtsalt ei tea praegu paremat praktikat ja see 1500 vist pole veel väga hull. icon_biggrin.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 14.02.2009 15:47:56 vasta tsitaadiga

Tõenäoliselt kogu kood neid globaalseid muutujaid siiski ei vaja. Need osad peaks saama vabalt eraldada funktsioonidesse, mis saab panna eraldi failidesse.

Mõned globaalsed muutujad võid küllap defineerida konstantidena - siis saab neid vabalt kasutada ükskõik kus kohas koodis, kuid oma olemuselt on nad siiski globaalsed andmed ja nende kasutamisega tasuks nii palju kokku hoida kui võimalik.

Kui sul on hiigelsuur switch(), kus iga case sisaldab palju koodi, siis tuleks iga case sisu panna hoopis eraldi funktsiooni, ning siis seal case sees lihtsalt kutsud selle funktsiooni välja. Lõpuks on vast isegi võimalik see switch() täielikult elimineerida.

Ülesehituse koha pealt võid proovida näiteks mingit sellist lähenemist:

<?php
include "globals.php";
include "foo_functions.php";
include "bar_functions.php";
include "baz_functions.php";

...ülejäänud kood, mis kasutab neid funktsioone ja globaalseid muutujaid...

?>

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Speedee
HV kasutaja
Speedee

liitunud: 23.04.2003




sõnum 15.02.2009 19:20:30 vasta tsitaadiga

Lisaks võid teha timing testi.
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 15.02.2009 19:25:07 vasta tsitaadiga

Speedee kirjutas:
Lisaks võid teha timing testi.

Mis imeloom see veel on?
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 15.02.2009 20:38:29 vasta tsitaadiga

Eks mõeldi vist miskit sellist:

function getmicrotime(){
   list($usec, $sec) = explode(" ",microtime());
   return ((float)$usec + (float)$sec);
}
$time1 = getmicrotime();
inculde_once 'suur_func_fail.php';
$time2 = getmicrotime();
echo 'aega kulus '.($time2-$time1);


Palju võitu ajaliselt annab näiteks eAccelerator php kiirendaja kasutamine, mis kiirendab väga-väga palju igasuguseid failide includemist, kuna php ei pea igal jooksutamisel faile sisse parsema vaid kasutab cachet.
3000 rida ühe faili kohta on veidi palju jah, mul endal on kõige suurem asi BaseObject klass (mis vahendab OOP maailma ja mysql vahelist suhtlust stiilis $obj->field1='12121'; $obj->Save(); pluss vajadusel cacheb mällu neid objekte jms) koos kommentaaridega miski 1200 rida.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 16.02.2009 11:15:44 vasta tsitaadiga

selge, sellest sain nüüd aru. eAccelerator kõlab ka tuttavalt, aga pole asjasse süvenenud veel icon_razz.gif
Tänud jällegi hea info eest! thumbs_up.gif

Edit:
eAccelerator-i võib unustada (tuligi meelde, miks ma seda rohkem uurinud pole), sest selle peab installima serverisse ju, jagatud hostingus ma seda kasutada ei saa. icon_sad.gif

Edit2:
Panin selle ajamõõturi terve lehe peale ja tulemus on 0.06#### midagi. See siis terve lehe kohta, alates algusest (esimene include) kuni lõpuni (</body>).
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 16.02.2009 16:57:41 vasta tsitaadiga

Selle inzinz'i antud getmicrotime funktsiooni asemel on parem kasutada lihtsalt microtime(true). IMHO võib tänapäeval eeldada, et kõik kasutavad PHP5-te (kui küsija pole just ise öelnud, et tahab PHP4 peal töötavat lahendust).
_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 16.02.2009 17:21:33 vasta tsitaadiga

Mhmh, seda küll, peakski endal ka selle vana kasutusmooduse välja viskama kuna ise aint php5 compatible koodi kirjutan (class autoloading, muud funcid veel) icon_biggrin.gif Sai see kasutusse võtud php4 ajal ja otse üle toodud ilma süvenemata kas php5 on microtime funci täiendanud, thx icon_wink.gif
_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 16.02.2009 17:28:05 vasta tsitaadiga

Mul on php5 nii localhostis kui serveri(te)s, kus kasutan. Ma pole ammu enam näinud ainult php4 (ja mitte 5) kusagil.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  küsimus php funktsioonide kohta
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.