Autor Zpráva
sjiamnocna
Profil
Ahoj,
mám ze školy snahu psát čitelný a efektivní kód, šetřit paměť, co nejmenší náročnost aplikací, uvolnění zdrojů ap. Napadlo mě - bylo by možné udělat něco v tomto stylu např. s Nette aplikací (backend pro nějaké JS rozhrání)?
Vím, že při použití frameworků se mi tam dostane spousta věcí, které se jenom načítají, zabírají zdroje, ale v aplikaci nevyužijí, nebo pouze při vývoji a pak už ne. Existuje nějaký nástroj, který by třeba poskládal celý kód, nahradil konstanty, odebral nepoužité části a reference před tím než to pustím na produkci? Teď nemyslím přímo překlad na binárku, jen že by to prostě ořezal, případně minifikoval (jako se dělá JS, CSS nebo i HTML).

Cílem by bylo ušetřit práci interpreteru - ušetřit čtení souborů při include/require, zjednodušit program o zbytečné znaky ap.- vím, že dneska už se na to moc nehledí (v PHP obzvlášť) a prostředků je někdy i přebytek, ale snažím se myslet do budoucna, kde může mít app třeba přes milion uživatelů a mohla by se trochu více zapotit a stejně s tím bude potřeba něco dělat.

Budu vděčný za názor, doporučení ap.
tttttt
Profil *
Teď nemyslím přímo překlad na binárku, jen že by to prostě ořezal, případně minifikoval
A proč to rovnou nepřeložit na binárku nebo bytecode pro virtuální stroj?

S include je problém, buď vytvoříš jeden obrovský soubor, nebo budeš muset zajistit, že se includované soubory nezmění (jinak by mohly volat funkci, kterou jsi smazal). Dost věcí tě nezajímá - vykonají se jednou při startu (třeba to načtení konstant), ne pro každý požadavek. Ušetřil bys tedy pár microsekund, v lepším případě milisekund při startu aplikace.

Facebook kdysi kompiloval PHP na C++ (hledej HipHop, teď to myslím kompilují do bytecode en.wikipedia.org/wiki/HHVM.

Nevidím moc smysl to řešit, pokud nejsi Facebook. Pokud chceš podobné optimalizace, nepoužívej PHP, ale třeba Elixir, Rust, Javu, které jdou kompilovat a budou o řád rychlejší než PHP (poslední dobou to moc nesleduju, ale hádám, že to pořád platí).

Taky můžeš narazit na to, že tě bude zpomalovat databáze a jak rychlý bude samotný web ti bude víceméně jedno.
Keeehi
Profil
To o co se snažíš, tomu se říká předčasná optimalizace. Chceš řešit problémy, které ještě nenastaly a nejspíše ani nikdy nenastanou. Nahrazením konstant neušetříš prakticky nic. A zjistit, které části kódu jsou nepoužité je u PHP téměř nemožné, jelikož následující kód je plně funkční.

<?php

function foo() { 
    echo "Hi"; 
}

$bar = "foo";

$bar();

V tomto případě by nějaký analyzátor měl šanci že funkce foo se používá, jelikož veškeré informace jsou v kódu přítomné, jenže hodnota proměnné $bar by mohla být načtená třeba z databáze.
Pokud se opravdu někdy dostaneš na milion uživatelů, tak ta aplikace bude vypadat úplně jinak. Ale ne tak, že v kódu budeš mít nahrazené konstanty a místo $i++ budeš používat ++$i, protože to je rychlejší*. Ale jiná bude už v samotném návrhu její architektury, budeš používat keše na spoustě různých úrovní, atd.

Nicméně pokud chceš výkon honit už teď, tak si nainstaluj profiler. Ten ti změří, jaké funkce se při reálném používání aplikace volají nejčastěji a které části kódu jsou nejpomalejší. Zvládne to i obyčejný Xdebug. Výsledek si pak musíš v něčem zobrazit, dost často takovou funkcionalitu mají IDE ať už na přímo nebo skrz nějaké rozšíření. Případně se dá použít nějaký externí program/aplikace. Na základní vyhodnocení se dá použít například webgrind.

* $i++ není pomalejší než ++$i, je to jen odkaz na dobu dávno minulou kde se tvrdilo, že preincrement je v céčku rychlejší než postincrement.
N71
Profil *
sjiamnocna:
použití frameworků se mi tam dostane spousta věcí, které se jenom načítají, zabírají zdroje
Nette (a všechny trochu kvalitní frameworky taky) používá DI kontejner a lazy-loading. Tím pádem se načtou vždy jen ty třídy, které reálně použiješ.
Co se týče nadbytečných částí kódu, ty je vhodné odstranit spíš ze sémantického hlediska. Na výkon nemají žádný vliv.
Optimalizaci a kešování zdrojů provádí i sám PHP interpret a to dost intenzivně.

Sečteno a podtrženo, chceš udělat něco, co je úplně zbytečné.
sjiamnocna
Profil
Dobrá, děkuji za názory, zkusím to nějak zpracovat :)
Hezký den

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0