| Autor | Správa |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: St 25.08.10 14:16 |   |
Mám takéto zadanie:
| citácia: | 2.)
v tejto časti, je Vašou úlohou optimalizovať výkon triedy Catalog,
navrhnite a implementujte podľa Vás najefektívnejší spôsob optimalizácie
popíšte v skratke čo je cieľom optimalizácie, a prečo ste sa rozhodli pre Vaše riešenie |
Trieda Catalog je hotová, ale nechápem, čo a myslí pod tou optimalizáciou. Nevie niekto čo asi odo mňa chcú???
Týka sa to rýchlosti, alebo mám pridať nejaké funkcie??
Totiž skúsim kontaktovať aj zadávateľa, ale je už po pracovnej dobe a do zajtra to má byť hotové, tak neviem... |
| |
    |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 | Zaslal: St 25.08.10 14:35 |   |
predpokladam, ze si za to plateny, takze by si mal vediet, co od teba chcu... nabuduce to pojde rovno do kosa! |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: St 25.08.10 14:36 |   |
Nie som, týka sa to výberového procesu a toto je všetko čo som k tomu dostal. |
| |
    |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 | Zaslal: St 25.08.10 14:42 |   |
my ti mame poradit a ty to potom odovzdas ako vlastne riesenie? trosku blbe nie? neber to pls osobne, ale ked nevies, co je to optimalizacia a ako ju aplikovat, tak sa zbytocne namahas... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: St 25.08.10 14:48 |   |
No dobre, tak sa teda zbytočne namáham a teda mi aspoň poraď, kde sa o tom niečo dozviem, aby som sa nenamáhal zbytočne nabudúce.
EDIT:
Tak som našiel toto: http://interval.cz/clanky/usetrete-az-80-datoveho-prenosu/
Ale mám s tým jeden problém. Nemôžem použiť ob_start("ob_gzhandler")
Vypisuje mi to, že používam nepovolené kódovanie. Pritom by tá funkcia mala zabepečovať práve to, aby to browser dokázal rozbaliť.
Tak zatiaľ som to dal bez toho gzipu.
Bude to mať nejaký význam z hľadiska optimalizácie??
PS: Myslím si, že moje úsilie je adekvátne a o žiadne hotové riešenia tu nikoho nežiadam... resp. každú otázku na tomto fóre je možné chápať ako snahu o zneužitie cudzích vedomostí...
EDIT2
Há tak som zistil, že to vplyv mať nebude. Je mi to na prd. ako som zistil ob_gzhandler mi nefungoval, preto, že mi server gzipuje automaticky a ja som to gzipoval dva krát, čo bolo aj pre FF priveľa.
Len nechápem zmysel tejto komunikácie...
Kde by som sa len dozvedel niečo o optimalizovaní, keď už ani google, ani kniha a ani na fóre mi nikto nič nepovie... |
| |
    |
 |
vladivlad
 Užívateľ
 Založený: 18.05.2010 Príspevky: 10
 | Zaslal: Št 26.08.10 18:40 |   |
to Stenley:
si sice moderator, ale otazka to bola v pohode.
forum je o pomahani, ak vies porad, ak nie zbytocne nespamuj.
a k tejto tvojej vete:
| stenley napísal: | | my ti mame poradit a ty to potom odovzdas ako vlastne riesenie? trosku blbe nie? neber to pls osobne, ale ked nevies, co je to optimalizacia a ako ju aplikovat, tak sa zbytocne namahas... |
o tom su rady, clovek sa uci kazdym dnom a ked nieco neviem cita a pyta sa urobi si vlastny zaver a spravi potom vlastne riesenie. je to standardne a vsade.
je tu x ludi co robi projekty, webaplikacie alebo v praci ma robotu a nevie si poradit a tu sa spyta (a v praci je za to plateny)
camo nvm ci si na nieco prisiel, ale uz mas po funuse, tak snad si to zmakol.
GL (good luck)
//mne ucel fora vysvetlovat nemusis, som tu dost dlho na to, aby som to vedel... takisto o spamovani by som na tvojom mieste radsej pomlcal... moja reakcia bola preto taka, lebo ma zarazilo, ze sa hlasi do nejakeho vyberoveho konania, a pritom nema ponatia o zakladnych veciach... je tu jedno pravidla, ktore sa tyka vypracovavania domacich uloh a toto ma velmi podobny charakter... (stenley) |
| |
  |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 | Zaslal: Št 26.08.10 19:25 |   |
mozno by pomohlo keby Camo najprv napisal co je trieda Catalog , naco sluzi, ako pracuje ... |
| |
  |
 |
vladivlad
 Užívateľ
 Založený: 18.05.2010 Príspevky: 10
 | Zaslal: Št 26.08.10 21:35 |   |
to ano  |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Št 26.08.10 22:21 |   |
Stenley:
A čo mi uniklo ohľadom tej mojej dilemy, že vlastne každá otázka na tomto fóre je potenciálne zneužitie cudzích vedomostí. To že pravidlá tu sú neznamená, že nie sú zlé. A ako som napísal, ja tu od nikoho nežiadam hotové riešenia...
//dolezita je forma, akou otazku podas - ak toto budes ovladat, nebudes mat problem (stenley)
To all:
Keďže už to nespadá pod zákony tohoto fóra, dám vám sem to zadanie, ak sa na to bude chcieť niekomu pozrieť:
Takže mám txt súbor:
| kód: | -TV, audio, video
--LCD televízory
---JVC
---LG
---Panasonic
---Philips
---Samsung
---Sony
--LED televízory
--Plazmové televízory
--Satelitná technika
--Domáce kiná
--Hifi systémy
--Prehrávače
---Blu-ray prehrávače
---DVD prehrávače
---DVD prenosné prehrávače
-Veľké spotrebiče
--Práčky
--Sušičky
--Chladničky
---voľne stojace
---vstavané
---prenosné
--Sporáky
-Malé spotrebiče
--Vysávače
---podlahové
---stojanové
---parné
---ručné
--Žehličky
--Fritézy
--Rýchlovarné kanvice |
K tomu som mal urobit triedu, ktorá z toho spraví klikatelné menu s dorazom na tzv. hygienu kódu, preto tam bude kopa bielych znakov.
Tvar URL si nevšímajte to bola požiadavka, alebo som ja niečo nepochopil.
Vyrobil som toto(dufam že sa to bude dať u vás čítať s tými komentármi):
| kód: | <?php
class Catalog
{
public function render()
{
$source=file('sourcedata.txt');
$priznakLevel=0; // urcuje uroven polozky v strukture menu
$anchor=''; // format atr. href v tagu <a>
echo "<ul>\n";
foreach($source as $item)
{
$item=trim($item); // zdroj obsahuje zalomenia riadkov \n ktore treba odstranit
if(preg_match("/^-(?!-)/",$item)) // zistuje sa ci sa jedna o polozku prvej urovne
{
if($priznakLevel==2) echo "\t</ul></li>\n"; // ak je pred polozkou jeden vnoreny zoznam <ul> z predoslej polozky treba ho ukoncit
if($priznakLevel==3) echo "\t\t</ul></li>\n\t</ul></li>\n"; // ak su pred polozkou dva vnorene zozonamy <ul> treba ich ukoncit
$cleanItem=str_replace('-','',$item); // odstranenie znaku -
$anchor="/".$cleanItem; // vytvorenie atr. href pre taf <a>
echo "<li><a href=\"$anchor\">$cleanItem</a>\n";
$priznakLevel=1; // oznacenie urovne pre potrebu dalsieho cyklu v suvislosti s ukoncovanim vnorenych zoznamov
continue; // odpada kontrola nasledujucich podmienok
}
if(preg_match("/^--(?!-)/",$item)) // zistuje sa ci sa jedna o polozku druhej urovne
{
if($priznakLevel==1) echo "\t<ul>\n"; // ak sa jedna o zaciatok vnoreneho zoznamu tj. este nebola nastavene prem. $priznakLev=2 prechadzame z urovne 1 na 2
if($priznakLevel==3) echo "\t\t</ul></li>\n";
$cleanItem=str_replace('--','',$item);
$anchorLev2=$anchor."/".$cleanItem; // $anchorLev2 je pouzita preto, aby sa neprepisala premenna $anchor z ktorej vychadzame pri polozkach 2. urovne
echo "\t<li><a href=\"$anchorLev2\">$cleanItem</a>\n";
$priznakLevel=2; // pre potreby dlasie cyklu v suvislosti s ukoncovanim vnorenych zoznamov
continue;
}
if(preg_match("/^---(?!-)/",$item)) // zistuje ci sa jedna o polozku 3. urovne
{
if($priznakLevel==2) echo "\t\t<ul>\n"; // ak sa jenda o zaciatok vnoreneho zoznamu prechod z urovne 2 na 3
$cleanItem=str_replace('---','',$item);
$anchorLev3=$anchorLev2."/".$cleanItem;
echo "\t\t<li><a href=\"$anchorLev3\">$cleanItem</a></li>\n";
$priznakLevel=3;
}
}
if($priznakLevel==1) echo "</ul>\n"; // ukoncovanie podla aktualnej urovne
if($priznakLevel==2) echo "\t</ul></li>\n</ul>\n"; // - " -
if($priznakLevel==3) echo "\t\t</ul></li>\n</ul></li>\n</ul>\n"; // - " -
}
}
?> |
No a oni v druhej úlohe chceli, aby som zvýšil výkon triedy.
Dali k tomu takú indíciu, ako že aby som implementoval rozhranie(to už bolo nad môj pochop):
| kód: | <?php
interface ICatalog {
/**
* Loads config data.
* @param string path to config file
*/
public function load($cfg);
/**
* Renders html menu.
*/
public function render();
}
?> |
Vie mi niekto povedať, čo tým mysleli?? |
| |
    |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 9709 Bydlisko: Bratislava Vek: 24
 | Zaslal: Št 26.08.10 22:33 |   |
si si istý, že tým mysleli "zvýšiť výkon implementovaním rozhrania"? neviem o tom, že by pri použití interface-u došlo k nárastu výkonu optimalizácia nemusí vždy znamenať len "zvýšenie rýchlosti" interface je len akoby "šablóna" triedy
inak ešte k tomu kódu - toto je CELÁ trieda? |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Št 26.08.10 22:52 |   |
| citácia: | | si si istý, že tým mysleli "zvýšiť výkon implementovaním rozhrania"? |
Asi si nepochopil...
Ja som si práve nebol istý. Ja som sa tu pýtal či neviete, čo tým mysleli, nie že SI JA NIEČO MYSLÍM! Podľa môjho skromného názoru(na rozdiel od toho tvojho)by sa na také veci nemusela používať trieda. Takže tvoje úškrny mi akurát tak lezú na nervy... NAČO REAGUJEŠ?!?! Aby si ukázal aký si ty múdry? To moc múdre neni a ak to bude pokračovať tak ten ban zariskujem a vysvetlím to podrobnejšie... |
| |
    |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 9709 Bydlisko: Bratislava Vek: 24
 | Zaslal: Št 26.08.10 23:01 |   |
reagoval som na toto:
| citácia: |
No a oni v druhej úlohe chceli, aby som zvýšil výkon triedy.
Dali k tomu takú indíciu, ako že aby som implementoval rozhranie |
z tohto mi vyplýva, že buď ti to takto povedali alebo si to tak pochopil ty. Zaujímalo ma, či ti to už priblížili (interface si v prvom príspevku nespomínal). Nemám v úmysle sa hádať a ak si to tak z môjho príspevku pochopil, tak sa ti ospravedlňujem. Narozdiel od iných nemám problém diskutovať...
to, či na toto treba alebo netreba používať triedu... v tomto s tebou súhlasím, na rozparsovanie jedného txt súboru v php je to asi zbytočné. Pokiaľ je tebou uvedený príklad celé znenie triedy tak je to samozrejme oničom a rýchlejšie by bolo v porovnaní s tým urobiť len obyčajnú funkciu.
+ reagujem preto, aby som vyjadril svoj názor a prípadne aj pomohol. Ak to nie je vítané, stačí povedať, nabudúce keď uvidím že si založil tému ty, nechám to tak. Nepotrebujem sa tu s nikým doťahovať. |
| |
  |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3715 Bydlisko: Bratislava Vek: 26
 |
ako tak pozeram na metodu render(), tak by bolo najlepsie, keby si ju prerobil a spravil poriadne, lebo toto mi ako citatelny kod, navyse s dorazom na prehladnost a univerzalnost, nepripada... napr. co spravi tvoj kod, ked pribudne dalsia uroven v menu? treba obcas rozmyslat aj algoritmicky, a nie sa bezhlavo hnat do programovania za kazdu cenu, vysledkom coho je vacsinou jeden velky bordel, podobne ako v tvojom pripade...
naznacili ti, ake metody mas zhruba pouzit, ale ty nie, ty to strcis do jednej, aby sa pre isotu nedala pouzit na iny subor, v ktorom moze byt ulozena ina struktura menu - aj o tom je optimalizacia, univerzalnost, znovupouzitelnost, ktore tvojmu kodu nie len ze chybaju, ale ty si ich tam naschval nezahrnul... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 927
 |
no tiez sa priklanam k stenley-mu , ten kod je dost neprehladny a neuniverzalny. tiez interface definuje dalsiu povinnu metodu "load($cfg)" ktoru nemas vo svojom kode. tvoja trieda by mala byt implementaciou predpisaneho interface. samozrejme ja osobne by som do triedy zapracoval dalsie privatne metody ktore by riesili ciastkove ulohy. napr : | kód: |
class Catalog implements ICatalog {
public function load($cfg) {
... tu by som riesil nacitanie suboru s definiciou menu
}
public function render() {
... tu by som riesil vyskladavanie html codu
}
private function gelLevel($riadok) {
return strcspn($riadok,"-"); -- vrati pocet znakov "-" cize urci level
}
...
}
|
toto brat iba ako vseobecny pohlad , na presnu spravnost syntaxe nepozerat ! |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1185 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Pi 27.08.10 10:53 |   |
Takto vy kritici:
Toto čo tu je, je úloha číslo jedna. Tam nič viac mať nechceli.
Úloha dva bola optimalizovať a tam som samozrejme pridal voliteľný parameter ktorý umožní Stenleymu aj Coldakovi načítať iný súbor.
Inak mi prosím vás skúste niekto vysvetliť, že čo je na tej funkcii neprehľadné???
No a pekne sa z toho vyvliekol coldak: ,,toto brat iba ako vseobecny pohlad , na presnu spravnost syntaxe nepozerat !,,
Priznávam, ak funkcia strcspn() robí to čo myslím, tak to je lepšie riešenie.
Ale skôr to ma asi byť strspn()...
No ale neviem pochopiť načo je tam funkcia load()(podľa coldaka) dobrá. Načo je tam proste definícia tejto metódy, ktorá urobí to, čo musí urobiť vždy, teda podľa mňa by mala byť súčasťou metódy render().
Predpokladám že getLevel() je volaná z metódy render(). Tak?? Však ako inak, keď je privat.
Aby vaše zhrozenie bolo dokonalé, tak vám ukážem ako som úlohu2 poňal ja:
| kód: | <?php
/*
**
Priznavam, ze vasu myslienku implementacie rozhrania som nepochopil.
Navrhol som vlastne zdokonalenie triedy Catalog:
V povodnej triede Catalog bola vymenena funkcia preg_match za retazcovu funkciu strpos
Kontrola 3. urovne bola presunuta na zaciatok pretoze funkcia strpos by nerozoznala pocet "-" v retazci a aj 3.uroven by pokladla za prvu prip. druhu uroven
Kod by mal byt rychlejsi, ale stratil na prehladnosti
Pridany volitelny parameter $source metode Arender
**
*/
class ACatalog
{
public function Arender($source)
{
$source=file($source);
$priznakLevel=0; // urcuje uroven polozky v strukture menu
$anchor=''; // format atr. href v tagu <a>
echo "<ul>\n";
foreach($source as $item)
{
$item=trim($item); // zdroj obsahuje zalomenia riadkov \n ktore treba odstranit
if(strpos($item,'---')===0) // zistuje ci sa jedna o polozku 3. urovne (0==false preto ===)
{
if($priznakLevel==2) echo "\t\t<ul>\n"; // ak sa jenda o zaciatok vnoreneho zoznamu tj. prechod z urovne 2 na 3
$cleanItem=str_replace('---','',$item);
$anchorLev3=$anchorLev2."/".$cleanItem;
echo "\t\t<li><a href=\"$anchorLev3\">$cleanItem</a></li>\n";
$priznakLevel=3; // pre potreby dalsieho cyklu v suvislosti s ukoncovanim vnorenych zoznamov
continue; // odpada kontrola ostatnych podmienok
}
if(strpos($item,'--')===0) // zistuje sa ci sa jedna o polozku druhej urovne
{
if($priznakLevel==1) echo "\t<ul>\n"; // ak sa jedna o zaciatok vnoreneho zoznamu tj. este nebola nastavene prem. $priznakLev=2 tj. prechadzame z urovne 1 na 2
if($priznakLevel==3) echo "\t\t</ul></li>\n"; // prechadzame z urovne 3. na 2.
$cleanItem=str_replace('--','',$item);
$anchorLev2=$anchor."/".$cleanItem; // $anchorLev2 je pouzita preto, aby sa neprepisala premenna $anchor z ktorej vychadzame pri polozkach 2. urovne
echo "\t<li><a href=\"$anchorLev2\">$cleanItem</a>\n";
$priznakLevel=2;
continue;
}
if(strpos($item,'-')===0) // zistuje sa ci sa jedna o polozku prvej urovne
{
if($priznakLevel==2) echo "\t</ul></li>\n"; // ak je pred polozkou jeden vnoreny zoznam <ul> z predoslej polozky treba ho ukoncit
if($priznakLevel==3) echo "\t\t</ul></li>\n\t</ul></li>\n"; // ak su pred polozkou dva vnorene zozonamy <ul> treba ich ukoncit
$cleanItem=str_replace('-','',$item); // odstranenie znaku -
$anchor="/".$cleanItem; // vytvorenie atr. href pre taf <a>
echo "<li><a href=\"$anchor\">$cleanItem</a>\n";
$priznakLevel=1; // oznacenie urovne pre potrebu dalsieho cyklu v suvislosti s ukoncovanim vnorenych zoznamov
}
}
if($priznakLevel==1) echo "</ul>\n"; // ukoncovanie podla aktualnej urovne
if($priznakLevel==2) echo "\t</ul></li>\n</ul>\n"; // - " -
if($priznakLevel==3) echo "\t\t</ul></li>\n</ul></li>\n</ul>\n"; // - " -
}
}
?> |
|
| |
    |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|