Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SGM
HV kasutaja

liitunud: 04.12.2005
|
14.02.2009 13:39:28
küsimus php funktsioonide kohta |
|
|
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?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
14.02.2009 14:16:35
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
14.02.2009 14:31:48
|
|
|
Selge siis, tänud!
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.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
14.02.2009 15:47:56
|
|
|
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 |
|
 |
Speedee
HV kasutaja

liitunud: 23.04.2003
|
15.02.2009 19:20:30
|
|
|
Lisaks võid teha timing testi.
|
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
15.02.2009 19:25:07
|
|
|
Speedee kirjutas: |
Lisaks võid teha timing testi. |
Mis imeloom see veel on?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
15.02.2009 20:38:29
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
16.02.2009 11:15:44
|
|
|
selge, sellest sain nüüd aru. eAccelerator kõlab ka tuttavalt, aga pole asjasse süvenenud veel
Tänud jällegi hea info eest!
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.
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 |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
16.02.2009 16:57:41
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
16.02.2009 17:21:33
|
|
|
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) Sai see kasutusse võtud php4 ajal ja otse üle toodud ilma süvenemata kas php5 on microtime funci täiendanud, thx
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
16.02.2009 17:28:05
|
|
|
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 |
|
 |
|