Dlouho trvající operace autoloaderu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dlouho trvající operace autoloaderu – PHP – Fórum – Programujte.comDlouho trvající operace autoloaderu – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Facedown0
Newbie
16. 10. 2014   #1
-
0
-

Ahoj, používám Cachegrind a nejsem spokojen s rychlostí načítání tříd pomocí autoloaderu. Můj autoloader vypadá takto:

function autoLoader($className) {
	if(strpos($className, "Controller") !== false)
		require(__DIR__ . "/controller/{$className}.php");
	elseif(is_file(__DIR__ . "/model/{$className}.php"))
		require(__DIR__ . "/model/{$className}.php");
	else
		require(__DIR__ . "/helpers/{$className}.php");
}

spl_autoload_register("autoLoader");

Dle testů jsem zjistil, že ověřování přes strpos je mnohem rychlejší, než pomocí is_file. Je tedy moudré ke všem třídám, které mám ve složce model nebo helpers připojit nějakou koncovku? Třeba mojeTrida.model.php či mojeTrida.helper.php?

Popřípadě, jak zrychlit můj autoloader? Už mě nic nenapadá. Děkuji za případnou pomoc.

Nahlásit jako SPAM
IP: 86.49.98.–
Kit+15
Guru
16. 10. 2014   #2
-
0
-

#1 Facedown
Dělám to tak, že mé controllery mají koncovku "_POST.php" a viewery koncovku "_GET.php". Přesně podle toho, která metoda byla použita při volání.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Facedown0
Newbie
16. 10. 2014   #3
-
0
-

Aha, to je zajímavé řešení, ale zdá se mi relativně složité. Viewery mě netrápí, ty já nepotřebuji volat pomocí autoloaderu.

S tou první podmínkou v autoloaderu jsem relativně spokojen, jen mě trápí ty zbylé dvě, respektive jedna. Takže podle tebe je tedy lepší každý daný soubor zakončit nějakou koncovkou? 

Nahlásit jako SPAM
IP: 86.49.98.–
Kit+15
Guru
16. 10. 2014   #4
-
0
-

#3 Facedown
Jak ty viewery voláš, když ne přes autoloader? Snad v projektů nemáš víc requirů než jeden? Aha, vlastně vidím 3 v úvodním dotazu.

Používám velmi primitivní autoloader, který mi stačí úplně na všechno: 

function __autoload($class) {
    require "class/" . strtr($class, "\\", "/") . ".php";
}
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Facedown0
Newbie
16. 10. 2014   #5
-
0
-

Mám controller, ve kterém si definuji view. Potom se daný controller automaticky volá dle předané url a s ním se taktéž zavolá require na daný view. 

Základy, na kterých mi to běží nehodlám v nejbližší době měnit. Prozatím mi vyhovují. Mě by spíš zajímal pouze ten autoLoader. Tedy, jestli je správný způsob soubor zakončit nějakou koncovkou či ne.

Nahlásit jako SPAM
IP: 86.49.98.–
Kit+15
Guru
16. 10. 2014   #6
-
0
-

#5 Facedown
... a ještě něco: Všechny soubory, které obsahují interface, končí příponou "able.php". Tedy např. Selectable.php, Authenticable.php, Reportable.php apod.

Mé controllery se o viewery vůbec nezajímají. Není to jejich povinnost.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Facedown0
Newbie
16. 10. 2014   #7
-
0
-

Ok, díky. Nemáš náhodou někde část ukázkového kódu, jak máš složený MVC, třeba na GitHubu, nebo něčem podobném, prosím? Zajímalo by mě, jak to udělat lépe.

Nahlásit jako SPAM
IP: 86.49.98.–
Kit+15
Guru
16. 10. 2014   #8
-
0
-

#7 Facedown
Dělal jsem to na zakázku, můžu ti ukázat jen kousky.

session_start();
try {
    $db = new MyPDO($config);
    $model = new Model($db, $config);
    $method = $_SERVER['REQUEST_METHOD'];
    $url = $_SERVER['REQUEST_URI'];
    echo factory($model, $method, parseURL($url));
} catch (Exception $e) {
    $_SESSION['message'] = $e->getMessage();
    header('Location: /Error/');
    exit;
}

Zbytek se volá přes autoloader. Funkce factory() jen zkombinuje slova z URL a typu metody GET/POST, vyrobí z toho název třídy, ze které udělá instanci a v konstruktoru jí předá model, se kterým má pracovat. Samozřejmě to mám ošetřeno proti útokům, tady je to dost zjednodušeno.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Facedown0
Newbie
16. 10. 2014   #9
-
0
-

Škoda, ale i tak dík za tip.

Nahlásit jako SPAM
IP: 86.49.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 65 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý