A feladat, egy Excel kalkulátor PHP implementálása weboldalra.
Az ügyfél természetesen költségérzékeny, így a minimális befektetéssel, az excel cellaképleteket átírtam PHP kódokra.
Nincs benne semmilyen speciális Excel függvény, de rengeteg rekurzív hivatkozás, maximumkeresés meg szumma.
Az Excelben pillanatok alatt lefutó számítások PHP alatt eléggé sokáig tartanak. Ez akár sok-sok percet is jelent, és félő, hogy egyes bemeneti paraméterek értékével exponenciálisan megnő ez az idő.
Megpróbáltam a cellák értékeit a $GLOBALS tömbben elkeselni, hogy csak egyszer számítsa ki, de így még hosszabb futásidőt kaptam.
Felmerült még a számítási eredmények adatbázisban történő eltárolása is, de nem vagyok benne biztos, hogy magának az adatbázisnak a létrehozása épeszű idő alatt megtörténhetne, az adatbázis méretéről már nem is szólva ...
Van valakinek valamilyen egyszerű gyorsítási ötlete, ami nem túl nagy munkaidő árán érezhető javulással kecsegtethet?
- 1349 megtekintés
Hozzászólások
Valami tervezési hiba lehet a dologban, mert eddig ilyen tapasztalatom csak fordítva volt. Amit excelben hosszabb ideig csináltak, azt php, sql és egyéb technológiákkal nagyon meg lehetett gyorsítani.
Volt olyan ami több xls, majd abból lekérdezés kb. 5 perc volt, ebből php+mysql-el lett olyan 1-3 mp.
De volt olyan eset is ami kb. 2-3 napos biorobot excelezés és levittük az időt 1mp alá.
Viszont nekem minden esetben sql volt (mysql) és amit tudtam vele számoltattam és kerestettem a lekérdezéssekkel.
Lehet célravezető lenne egy memóriában tárolt táblával sql-en áttolni.
- A hozzászóláshoz be kell jelentkezni
Úgy tűnik, a válasz a $GLOBALS használata.
Elsőre a $GLOBALS[ 'cache_'.$sor.'_'.$oszlop ] = $value volt a cache tömböm.
Tehetetlenségemben létrehoztam egy global $cache tömböt, amiben már $cache[$sor][$oszlop] = $value a gyorsító, és így tényleg pillanatok alatt lefut.
Nem tudom, hogy maga a $GLOBALS tömb ennyire lassú, vagy a kulcsnál a string összefűzés, netán a hosszú kulcsok ...
- A hozzászóláshoz be kell jelentkezni
Ja hogy nem átírod az algoritmust, hanem konkrétan lekódolod az egészet táblával mindennel? LOL.
- A hozzászóláshoz be kell jelentkezni
írta, hogy "Az ügyfél természetesen költségérzékeny, így a minimális befektetéssel, az excel cellaképleteket átírtam PHP kódokra.", került már a kezem alá program, ahol "$a23 = $a17 * $a18;" sorok voltak, rögtön kértem az excel táblát, ami alapján készült :), megkockáztatom, hogy vannak a neten erre még converter-ek is, csak hogy ne szaporítsuk a totál követhetetlenül megírt programok számát.
- A hozzászóláshoz be kell jelentkezni
Ez esetben a válasz az, hogy használjon Excelt, ne PHP-t meg akármit.
- A hozzászóláshoz be kell jelentkezni
A probléma adott, excel-ben ez már lassú, és az excel nem csoportmunkára alkalmas, nem képes távolról adatokat fogadni, stb. Sok cégnél felmerül ezen a ponton, hogy hát na, akkor csináljunk belőle egy intranet-es webapp-ot, vagy hasonlót, és ahogy a témanyitó írta, költséghatékony megoldás kellett. Az más kérdés, hogy ez akkor költséghatékony csak, ha SOHA többet nem kell belenyúlni a képletekbe, mert ha igen, akkor a molyolás a követhetetlen kódban óraszámokat szül.
Csináljunk erre egy startup-ot, hja várj, volt már egy csomó, ami excel-to-webapp-converter akart lenni, nem tudok sikeresről, de lehet van :).
- A hozzászóláshoz be kell jelentkezni
> nem képes távolról adatokat fogadni
Ez azért így nem igaz, én múltkor olyan táblát kattintgattam össze, ami egy Disqus beszélgetésből letölti egy automatikusan frissülő Excel táblába a kommenteket, és ehhez minden szükséges eszköz beépítve megvolt egy Office 365 Essentials csomagban.
-- a Microsoftnál dolgozom
- A hozzászóláshoz be kell jelentkezni
I stand corrected. Biztos vannak hozzá megoldások, lehet pontosabb úgy fogalmaznom, hogy szerintem van egy pont, ahol az alkalmazás alapját nem jó döntés, ha egy excel tábla adja, táblák közti kapcsolat, csoportmunka, összetett lekérdezések, ilyesmi már nehezen (biztos van rá 3rd party eszköz) megoldható. Míg egy ilyen célú programnyelvben pár sor mondjuk.
Viszont az tény, hogy okkal terjedt el az excel az egyedi programkészítés helyett sok helyen, irodai dolgozók meg tudják oldani így-úgy összelegózva az igényeiket, szerintem egy meglepően jó leképezése az excel az üzleti folyamatoknak. Korlátosan, de jó.
- A hozzászóláshoz be kell jelentkezni
Így igaz, nekem ebben a threadben rögtön az lenne az első kérdésem, hogy pontosan mi az igény egyáltalán. Ezek a kalkulátor táblák amik 3-4 input mezőből csinálnak statikusan egy negyediket nem véletlenül terjedtek el, cserébe egy serverside megoldás sosem lesz olyan rugalmas, ha valamit át kell benne írni.
A kalkulátor táblák kezelésére is lehet egész jó megoldást összerakni, nem kell megmaradni az emailben küldözgetett ezerféle verzió szintjén.
- A hozzászóláshoz be kell jelentkezni
Érdemes lenne tesztelned, a $GLOBALS tömb használatából nem sok jó sülhet ki amúgy sem, de simán el tudom képzelni, hogy egy-egy új változó létrehozása sokkal több idő, mint egy meglévő array-be új érték felvétele, vagy valami hasonló érdekességbe futhatsz.
- A hozzászóláshoz be kell jelentkezni
Azt azért nem hittem volna, hogy ennyire érdemi a különbség: néhány perc, vagy kevesebb, mint egy másodperc.
- A hozzászóláshoz be kell jelentkezni
Ennek az ég világon semmi köze ahhoz, hogy tömbbe vagy változóba pakolgatsz
- A hozzászóláshoz be kell jelentkezni
Ezért írtam, hogy kéne belőle egy tesztet csinálni, x millió globals írás, x millió írás egy tömbbe, mi a különbség. De nem tudom a nagyságrendet, nem tudom milyen műveletek zajlanak utána a változókkal, ...
- A hozzászóláshoz be kell jelentkezni
Régen néztem már a PHP forrását, de nem lennék meglepve, ha a $GLOBALS tömb egy speciális builtin adatstruktúra lenne, amit persze tömbként érsz el, de a belső implementációja más. Emiatt simán lehet több nagyságrendes különbség.
Persze az a jó sok stringművelet az eredeti kódban sem éppen a gyorsaságot segítette. :)
- A hozzászóláshoz be kell jelentkezni
Valószínűleg a php asszociatív tömbjének hashing algoritmusa nagyon érzékeny az indexkulcs hosszára és/vagy szelektív voltára (az egyes kulcsok értékének eltérésére).
A konkatenált kulcsú tárolásnál egyrészt minden kulcs hosszabb a "cache_" prefixszel (és igen, a konkatenálást übermagas szintű rutin végzi, amit minden eshetőségre fel kellett készíteni, aminek ára van), másrészt a kulcsok éppen ezért kivétel nélkül hasonlítanak egymásra, azaz csak a 7. karaktertől kezdenek el szórni.
- A hozzászóláshoz be kell jelentkezni
Nyilvános weboldalra? Céges belső felhasználásra? Más, zárt közösség?
Napi hány kalkuláció?
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
Javaslom adj még részleteket, mert szerintem sokan (ahogy én is) fejvakarva állunk azelőtt, hogy milyen számítás lehet php-ban az, ami sok-sok percig fut. Nagyságrendeket írj, hány és milyen művelet zajlik le, mert ez így elsőre inkább valamilyen máshonnan eredő problémának tűnik.
- A hozzászóláshoz be kell jelentkezni
subs
---
Why use Windows, if you have open doors… to Linux
- A hozzászóláshoz be kell jelentkezni
Kisértetiesen hasonlít egy szolnoki cég beugrójára. :)
- A hozzászóláshoz be kell jelentkezni
Az aranyszabály: ha kicsi a költségvetés, akkor nem találjuk fel újra a kereket... :)
- A hozzászóláshoz be kell jelentkezni
És azt mondod, hogy ha ezzel megnyitok egy xls fájl, és átírom az input cellák értékét, akkor kiolvashatom a kalkulátor eredményét?
- A hozzászóláshoz be kell jelentkezni