Autor Zpráva
Jcas
Profil *
include vs velký soubor
Představte si soubor function.php a dejme tomu, že tam je 30 Fc.
stránka 1 potřebuje jenom 4
Stránka 2 třeba 10 fc
Stránka 3 třeba 15.

Je lepší jeden velký soubor, nebo to rozsekat dle potřeby. např.
str.1 bude includovat pouze function1.php
str.2 bude includovat function1.php a function2.php
str.3 ----||--- function1 a function 3
str.4 ----||--- function1 a function2 a function4

Další možnost je třeba funkce společné pro všechny zduplikovat do dalších souborů. Takže třeba fc z function1 bude i v function 2 a i v function3.php

Takže jaký je správný postup? Více include, či načítání většího souboru i když polovinu nepotřebuji, nebo duplicita kódu?
juriad
Profil
Výkonostní rozdíl je tak minimální, že ho nemá smysl jako uvažovat jako argument.
Mnohem důležitější je přehlednost, tedy za žádnou cenu neduplikuj kód, čleň jej tak, jak je přirozené.
Jakmile musíš soubory pojmenovávat čísly, děláš něco blbě.
quatzael
Profil
Jcas:
Asi bych řekl, že hodně velkou roli hraje to, jak ty funkce, které načítáš a ve skutečnosti nepotřebuješ, jsou velké a ne to kolik jich je..
Jcas
Profil *
A když k tomu přidám zbytečné dotazy na databázi? (vybírám data, která zrovna v danou chvíli nepotřebuji)
juriad
Profil
Pokud jde o to, zda si vytáhneš pár řádků navíc, tak moc velké zpomalení není. Ale nelze napsat ten dotaz lépe, abys obdržel přesně to, co potřebuješ? Nejvíce času se stráví jen samotným položením dotazu.
Pěkně to je vidět tady (porovnání složitého dotazu nebo mnoha dotazů): http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php
Jcas
Profil *
Lépe řečeno: Mám funkci, která mi bere z DB z tabulky vše. V druhém případě potřebuji pouze id. A ve třetím případě potřebuji 2 sloupce.
Tato situace se mi opakuje u více tabulek a pro různé stránky. Takže více funkcí, více souborů s funkcemi, nebo jeden soubor s více funkcemi? Nebo to ke každé stránce narvat přímo?

Dřív jsem toto neřešil a vybral vždy vše. Ale nyní mám tabulku, která může mít opravdu hodně záznamů a tak se bojím zbytečných dotazů. A s tím je spojená ta struktura. Jestlí více funkcí, či více inkludování, či přímo do souboru.
Pepiik
Profil
Dej ty funkce do tříd jako statické metody ( funkce které spolu nějak logicky souvisí do jedné třídy). Každá třída bude zvlášť ve vlastním souboru a název souboru se bude jmenovat stejně jak název třídy. A všechny soubory budou v jedné složce třeba class. Pomocí spl_autoload zajistíš, že se ti automaticky a dynamicky naincluduje jen třída kterou zavoláš.
juriad
Profil
Jcas:
Jestli vytáhneš pár sloupců nebo jen některé, mezi tím moc velký rozdíl není a navíc to lze snadno upravit v případě nutnosti.
Tím vše myslíš doufám všechny sloupce, nikoli, že vybereš všechny záznamy (bez podmínky WHERE).

Vždy jsem pokládal dotazy přímo, vytvořit si funkci na tři řádky maximálně, která evidentně přínáší problémy, mi za to nikdy nestálo.
Nakonec často dojdeš k tomu, že té funkci předáváš tolik argumentů a ta funkce se bude chovat mnoha různými způsoby. Není zodpovědná za jedinou činnost.
Jcas
Profil *
Děkuju. Myslím, že jste mi dali přesně ty odpovědi, které jsem potřeboval.
Jan Tvrdík
Profil
Trochu upřesním odpověď na tu původní otázku.

IO operace jsou obvykle alespoň řádově pomalejší, než ostatní operace. Takže pokud se soubory načítají z pevného disku, tak je include (a podobné funkce) jedna z vůbec nejpomalejších věcí, kterou můžeš v PHP dělat. Tedy malá aplikace bude v takovém případě obvykle výrazně (desítky procent) rychlejší, když dáš všechno do jednoho souboru.

V praxi naštěstí větší množství souborů tolik nevadí, protože se na serverech používá opcode cache, takže se skripty načítají spíš z paměti, než z disku.

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: