Honlapfejlesztés - sebesség
2012-02-26T15:18:31+01:00
2012-02-27T16:56:12+01:00
2022-07-24T05:37:20+02:00
  • Hát kíváncsi lennék rá hogy miért.
    Én pont azért szeretem mert ha kavarnak se akkora probléma. Ehhez persze nem szabadna script generátorként tekinteni rá. Ami viszont nem jelenti azt hogy a kód nagy részét ne lehetne legenerálni vele. De abban igazad van hogy pont a generátora miatt lehet benne csúnyán is fejleszteni. Ami nekem nagyon nem tetszik, amikor a templateket nem a script generátor készíti, hanem kiemeljük a cache könyvtárból és szépen átalakítjuk. Ott mondanám azt hogy most akkor én ebből a projektből kiszállok.

    De szerintem nem tudsz olyan esetet mondani, hogy az alábbi scripted szerint készült program bővítése egyszerűbb lenne, mint Symfonyban egy bővítés/átalakítás. Most ami éppen nemrég készült el, egy emailt kapjak, ha hibára fut egy sql utasítás. Na persze itt sem csak az sql utasításra van szükség, hanem egy csomó más információra ($_SERVER, $_SESSION, $_REQUEST is többek között). Ennek a kódja nem volt több mint a Te általad beszúrt kód mennyisége. Pedig az alkalmazás összes hibája esetén jön a mail. Neked mennyi munkád bánná, hogy az általad bemádolt kódon elkészült alkalmazásodnál ugyanezt elkövesd?

    A memcache meg nem ara való hogy 50 megát tárolj a memóriában és akkor abból keresd ki azt a rekordot amire szükséged van. Az nem is lenne olyan gyors, mint mysqlből. Talán a lekérdezéseknél ilyen formában nem is értelmes dolog eltárolni az adatokat. Elvileg a mysql is tud memóriából dolgozni. Inkább miután elkészült egy model osztályod, azt érdemes memcachebe berakni. Vagy még inkább egy komplett templatet.
    Mutasd a teljes hozzászólást!
  • - És ha közepes 50MB -os táblákból 3 -at eltárolsz, már is memory limitbe ütközöl
    - Ha szükséges ez a 3 tábla minden lekérdezésnél, akkor mindenképp ez a célravezető Vagy szerinted az kevésbé pazarló, ha minden lekérésnél 150 Megát elszipkázol?


    Nem tárolom az egész táblát memóriában csak a szükséges adat kerül oda (amit többször is használok, globális változóba (_ENV) tárolni szoktam), így nem a teljes 50MB -os tábla, csak 100K -s érték kerül memóriába.
    Mutasd a teljes hozzászólást!
  • Symfony inkább script generátor. Ha készen van egy oldal, gyorsan meg lehet csinálni... (Még nagyobb portál/webárhuz/fórumokat is) Viszont későbbi fejlesztése bővítése, átalakítása. bonyolúltál teszi... 2007 -ben készítettün kegy sysmfonys oldalt, tavajig nem is volt vele semmi dolgunk, csak kitalálta az oldal tulaja, hogy kicsit megkavarja a menetet.
    Tovább tartott annak alo csomálta az utófejlesztés, mint az eredeti oldal elkészítése...
    Mutasd a teljes hozzászólást!
  • A symfony is 40 megával indul, mégsem állnék neki egy saját keretrendszernek, mert a vége az lesz hogy gyártok egy nova76_symfony keretrendszert. Ha kis projekt akkor azért nem éri meg csinálni sajátot, mert symfonyval pillanatok alatt megvan és nem számít hogy kicsit lassú. Ha meg nagyobb projekt, akkor meg azért nem, mert sose lesz kész, és úgyis legalább olyan bonyolultra tervezném mint amilyen.
    Mutasd a teljes hozzászólást!
  • És ha közepes 50MB -os táblákból 3 -at eltárolsz, már is memory limitbe ütközöl

    Ha szükséges ez a 3 tábla minden lekérdezésnél, akkor mindenképp ez a célravezető Vagy szerinted az kevésbé pazarló, ha minden lekérésnél 150 Megát elszipkázol?
    Mutasd a teljes hozzászólást!
  • "memcachebe is belepokolni"

    És ha közepes 50MB -os táblákból 3 -at eltárolsz, már is memory limitbe ütközöl

    Lásd egy ismert CMS -nél: [Joomla]
    Fatal error: Allowed memory size of 146800640 bytes exhausted (tried to allocate 15656475 bytes) in /libraries/joomla/cache/storage/file.php on line 142
    Mutasd a teljes hozzászólást!
  • nem beszélve arról hogy ugyanannak a lekérdezésnek az eredményét is eltárolhatod, és ha megnevezed külön a táblát is, akkor lehetőséged van ezt utólag táblához kötni és akár egy memcachebe is belepokolni. De ilyet akkor sem csinálnék hogy a mysql_query-t beleírom a kódba mindenhová. Még az is jobb, ha csinálok egy saját függvényt és abba írom bele hogy

    function my_query($sql)
    {
    return mysql_query($sql)
    }

    Mutasd a teljes hozzászólást!
  • PHP -ból Loggolni a MySQL Query -t?
    Gondolom szerver által készített log-ot nem ismered.
    Különben nem terhelnéd akár duplára a szervert.

    Az nálam alap hogy ha debug módban vagyok, akkor kiírom valahová hogy milyen SQL futott le, meddig tartott, milyen IP címről jött a kérés, milyen felhasználó futtatta, ha be volt jelentkezve, milyen action és melyik modul. Erre kiírására én a FirePHP-t használom, vagy a symfonynál a debug toolbart. Ha mondjuk van egy slow_querym (direkt így írom mert van mysqlben is ilyen log), akkor szeretném tudni hogy honnan jött a kérés és mi volt az (emailben). A mysql slow_query logjából kaphatok egy queryt, amit aztán keresgélhetek a kódban hogy hol is futott le, ügye? Ráadásul változó adatokkal van tele, amire egy sima grep nem lesz megfelelő. De nem fogja nekem eltárolni hogy melyik modul, melyik actionje, milyen IP címről, és ki futtatta.
    Amúgy általában nem loggol egyetlen lekérést sem a mysql. A slow_queryt is be kell kapcsolni, de ha a rendesen (vagy akár hibásan) és időben lefutó queryket nézed, akkor arra én nem is ismerek programot, vagy beállítást, amivel logolhatnám. Valószínűleg létezik valami külső monitor program, de olyan ami még a PHP-val is össze lenne kötve? Pláne olyan ami az én kódommal? És ez automatikusan fent lenne, feltelepülne a linuxszal? Tehát duplán nehezen tudnám terhelni a szervert.
    Mutasd a teljes hozzászólást!
  • "Aztán nézd meg, hogy mennyi az én órabérem, meg mennyi a tied."
    Mennyi?
    Mutasd a teljes hozzászólást!

  • Tesztként sima mysql_query, és a te osztályos függvényed lekérdezését mérd meg.
    100× egymás futtasd le, a mért időt vesd össze, és nézd meg mennyi a különbség.


    Nem feltétlenül van szignifikáns különbség. Ha mind a 100× újra össze kell állítanom a kverit, akkor valóban lesz valamennyi(bár 100× futásnál még nem lesz túl jelentős).
    Viszont megtehetem azt, hogy csak egyszer, az elején állítom össze a kverit, elmentem egy objektumba és utána már csak $objektum->execute()-ot kell meghívnom. Ez már kb ugyanaz, mint a mysql_query (csak mondjuk ott kezdődik, hogy normális ember mysqli-t használ).

    De nagyon sok lekérdezésnél valóban lassabb lehet az enyém, mint a tied.
    Aztán nézd meg, hogy mennyi az én órabérem, meg mennyi a tied.

    Na de én most nem a saját cuccomról akarlak meggyőzni, vannak annál sokkal jobbak is, egyszerűen csak arra akartam rávilágítani, hogy millió szebb és jobb módja van annak, hogy kezeld az adatbázist, mint az általad vázolt.
    Mutasd a teljes hozzászólást!
  • Az if-ek kivételével mindent gond nélkül támogat.
    Azokra ebben a formában még soha nem volt szükségem, majd ha lesz, kitalálok arra is valami szép megoldást. (végülis egyáltalán nem nehéz beszúrnom még egy új függvényt: Select::create()->select('table1.data1 as elso_ertek,...')->if(FELTÉTEL,TRUE,FALSE)... )
    Mutasd a teljes hozzászólást!
  • A tiszta kód definíciójára még nem hallottam ilyen szép kifejezést:
    "a funkcionális redundancia mentes kód"
    Ez meg van fogalmazva, tömören a lényeg benne van
    Mutasd a teljes hozzászólást!
  • Az egy nagyon fontos dolog, hogy gyorsan készüljön el és minőségi legyen a kódolás. Viszont avval nem értek egyet hogy a gyorsaságot a klaviatúra intenzívebb használatával kellene megoldani. Inkább a funkcionális redundancia mentes kód az egyszerűsítés és kreativitás amivel sokat lehet spórolni. Coder Vs Programmer
    Mutasd a teljes hozzászólást!
  • Még egy előnye van:
    Ha MySQL -ről át kell rakni valami oknálfogva pl. M$SQL -re, akkor nem kell az egészben átvésni.
    De akkor is értelmetlennek tartom, az egyedi sokszor többszörösen összetett SQL -t, az alább említett módon alkalmazni...

    Tesztként sima mysql_query, és a te osztályos függvényed lekérdezését mérd meg.
    100× egymás futtasd le, a mért időt vesd össze, és nézd meg mennyi a különbség.
    Mutasd a teljes hozzászólást!
  • PHP -ból Loggolni a MySQL Query -t?
    Gondolom szerver által készített log-ot nem ismered.
    Különben nem terhelnéd akár duplára a szervert.
    Mutasd a teljes hozzászólást!
  • Előnye, hogy aki egyszer megírta az ismeri, és gyorsan tud vele haladni.

    Nem. Előnye hogy aki ismeri, annak könnyű vele haladni. Másik előnye, hogy aki meg nem ismeri, annak meg meglehet tanulni. Ezért nem jó, ha valaki saját keretrendszereket, meg ORM-eket készít, mert ha csapatban kellene dolgoznia, akkor hátrányból indul azzal szemben, aki már dolgozott a csapat által használt rendszerrel. A csapatnál meg különösen rossz a saját ORM, mert ott minden új tag bután néz ki a fejéből. Ráadásul a szerzett tudás kevesebbet is ér, mert ellopni ügye nem kéne, de máshol nem is biztos hogy tárt karokkal fogadják a másik csapat kódját.
    Viszont a mysql_query leírása 120x nem javasolt minden egyes lapon. Érdemes valami egyszerű osztályt keríteni mögé, még akkor is ha nem lesz több a tudása, mint a mysql_querynek. Csak gondolj bele abba, hogy valamiért logolni akarnád egy fájlba a queryket. Utólag ebbe a kódba hogyan teszed bele? Végigmész az összes fájlon és beleírod?
    Mutasd a teljes hozzászólást!
  • Első ránézésre, egy a symfony -ban használt adatbázis kezelésnek tűnik.
    Előnye, hogy aki egyszer megírta az ismeri, és gyorsan tud vele haladni.
    Hátránya, ha más embernek kell dolgoznia vele, előbb meg kell fejteni a kódot, és ha össze tévesztően hasonlít külsőre egy ismert freamworkhoz, akkor oltári nagy bogarakat lehet vele csinálni.
    Mutasd a teljes hozzászólást!
  • A következő lekérést, hogy dolgoznád át!?
    $con = mysql_query(' SELECT `table1`.`data1` as `elso_ertek`, `table1`.`data2` as `masodik_ertek`, `table1`.`data3` as `harmadik_ertek`, IF(`table1`.`data4`>0,`table1`.`data4`,`table2`.`data3`) as `negyedik_ertek`, IF((`table2`.`data4`>0 AND `table3`.`data2`>0),`table2`.`data4`,`table3`.`data3`) as `negyedik_ertek`, * FROM `table1` LEFT JOIN `table2` ON `table1`.`id` = `table2`.`data1` RIGHT JOIN `table3` ON `table2`.`id` = `table3`.`data1` WHERE `table1`.`data1` LIKE "%@%" AND `table1`.`data1` LIKE "%.%" AND (`table3`.`data4` = "I" OR !(`table2`.`data4`>0)) GROUP BY `table1`.`id` ORDER BY IF(`table2`.`date`="0000-00-00",0,1) ASC, `table2`.`date` DESC ');
    Mutasd a teljes hozzászólást!
  • Azért írd mellé az osztályt és lássuk egyben a kódot.
    Mutasd a teljes hozzászólást!
  • A saját frameworkömben még a legalacsonyabb szintű eszközökkel is átláthatóbb (és nem tartott 10 percig megírni):

    /* Kihagyom az isset-eket. $_POST helyett is érdemes saját függvényt használni, ami exceptiont dob, ha az adott mező nincs kitöltve */ $kapcs_mail = strtolower($_POST['kapcs_mail']); $kapcs_nev = $_POST['kapcs_nev']; $kapcs_tel = $_POST['kapcs_tel']; $kapcs_text = $_POST['kapcs_text']; $count = Select::create()->count()->from('aloldal_mail') ->where('alom_mail',$kapcs_mail)->where('alom_k_id',$sor['alo_id'])->execute(); if (!$count) { Insert::into('aloldal_mail') ->fields('alom_k_id,alom_nev,alom_tel,alom_mail,alom_text,alom_date') ->values($sor['alo_id'],$kapcs_nev,$kapcs_tel,$kapcs_mail,$kapcs_text,now())->execute(); } $ekid = Select::create()->select('ek_id')->from('user_web_erd_kor') ->where('ek_aloldal',$sor['alo_id'])->limit(1)->execute(); if ($ekid) { $_uwid = Select::create()->select('uw_id')->from('user_web') ->where('uw_mail',$kapcs_mail)->execute(); if (!$_uwid) { $_uwid = Insert::into('user_web')->fields('uw_nev,uw_mail,uw_tel,uw_status') ->values($kapcs_nev,$kapcs_mail,$kapcs_tel)->execute()->lastId(); } if ($_uwid > 0) { Insert::into('user_web_ek_uw')->fields('uwk_ek_id, uwk_uw_id, uwk_status') ->values($ekid,$_uwid,"A")->execute(); } }
    Látod a különbséget?
    Lehet hogy egyeseknek kicsit sok benne az objektumozás, szerintem így átlátható és rendezett (na meg így van gyönyörű code completion). (Ja és kb fél óra munkával át tudom rakni az egész projektet MySQL-ről MS SQL-re, Oracle-re, AnyámTyúkjaSQL-re).
    Arról nem is beszélve, hogy biztosan mindenhol minden escape-elve van és a ``-k se felejtődnek el.

    Egyébként általában a legtöbb táblához van egy php-ban definiált osztályom (amik persze egy közös ősből származnak), onnantól kezdve meg az összes insert (a selecteket hagynám, ha csak egy id-t kell lekérdezni (vagy külön fgv)) még tovább egyszerűsödne (szélsőséges esetekben: Insert::obj($objektum) ).
    Nem kell minden apróságra külön függvényt írni, de fontos az átláthatóság és az újrahasznosíthatóság.
    Mutasd a teljes hozzászólást!
  • Szerintem sok az a 17 betű percenként. Ha én veled szeretnék dolgozni inkább kevesebb legyen mint több. Azt vizsgálnám hogyan tudod a legkevesebb leütött karakterrel elkészíteni a programot. Érdekes hogy jó pár éve dolgozom PHP fejlesztőként, de a mysql_query parancsot eddig talán 5x írtam le. Te ugyanezt a számot ebben az egyetlen példádban majdnem kimerítetted.
    Mutasd a teljes hozzászólást!
  • ""Menjen el legközelebb egy profibb programozó céghez."
    Meg tette, a hozott oldal HTML-ben egy MS-WORD fejléccel rendelkezett."

    Ehhez, őszintén gratulálok neki
    Mutasd a teljes hozzászólást!
  • Amúgy idő -re vissza térve:
    Mi a gyorsabb!?
    - Külön függvényeket készíteni, minden egyedi lekérdezéshez.
    - Egyedi lekérdezést ott helyben hagyni, ha kell módosítani, nem kell megkeresnie ha valaki más kapja meg.
    Mutasd a teljes hozzászólást!
  • "Menjen el legközelebb egy profibb programozó céghez."

    Meg tette, a hozott oldal HTML-ben egy MS-WORD fejléccel rendelkezett.
    Mutasd a teljes hozzászólást!
  • Egykét delikvenst leszámítva igen... De csak azért mert a lehetőség és igények alapján a legjobbat próbálom kihozni.

    Te pl. mit csinálná, ha 20% előleget kapsz egy komplett weboldalból a szerződésben szereplő összegalapján. Mikor végzel, és fizetnie kéne a delikvensnek, akkor közli: "Majd akkor fizetem ki a teljes összeget, ha a weboldal megtermelte azt."
    Mutasd a teljes hozzászólást!
  • Ez inkább egy psziho hadviselés. Azzal kifogással él, hogy Te mint fejlesztő azért számolsz el több fejlesztési időt, mert nem értesz annyira hozzá. Ez már rögtön személyeskedésbe megy át és védekezni kényszerülsz. Ilyenkor csak visszalőni lehet. Menjen el legközelebb egy profibb programozó céghez. Ott majd rövidebb idő alatt megcsinálják, de drágábban. (Ezt azonban már fizesse ki szépen, ha megrendelte.)
    Mutasd a teljes hozzászólást!
  • Biztos Te csinalod jobban, ha mar az ugyfel is ennyire elegedett...
    Mutasd a teljes hozzászólást!
  • Véleményem szerint az első
    Ha módosítani kell ne keljen X helyet egyszerre követnem egy egyedi lekérdezés, és egy egyedi insert miatt.
    Mutasd a teljes hozzászólást!
  • Pont erre céloztam a vodkás példával. Az például egy környezeti hatás, ha coder 5 percenként felhajt egy vodkát. Az is, hogy 20-30 percenként szirénázás hallatszik. A lényeg, ha mérsz a környezeti paraméterek a lehetőségekhez mérten azonosak legyenek!
    Még így is csak a relatív gyakorisági tényezőt tudod bevetni azoknál a komponenseknél, ahol a programozó képességeit vagy feladat nehézségét kell felmérni. Ezek szubjektívek lehetnek, de ha 100 programozót és 100 feladatot nézel meg, akkor ezek a különbségek szépen kiegyenlítődnek. Minél nagyobb mintavételi tartományod annál pontosabb az eredmény.



    Mutasd a teljes hozzászólást!
  • Az átlátható kód pl. számít. Mert szinte biztos, hogy hiba-javítanod vagy módosítanod is kell. Arról nem is beszélve, ha valami oknál fogva meg kell szakítanod a fejlesztést egy időre, akkor nehéz visszarázódni. Vagyis befolyásolja, milyen gyorsan fejlesztesz, ez a coder skilljéhez tartozik;)
    Az is igaz ezt egy 'lamer' nem tudja, így nem is ítélheti meg mennyire értesz hozzá.
    Szerintem itt a kérdés nem az, hogy ért valaki hozzá, hanem hogy mennyire? Hiszen akkor egyáltalán nem tudná megcsinálni vagy jó esetben el sem vállalná a munkát.
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd