generování odkazů z databáze routování
- zool
- Člen | 144
Ahoj mám takový problém, řeším adresy odkazů až na konci projektu. Adresy generuji z databáze, ale stalo se mi, že když generuji celé kategorie, tak mám hodně dotazů na databázi, a tedy to není moc rychlé , nevíte jak by se to dalo zrychlit děkuji. Inspiroval jsem se návodem od Honzy Smitka o routování.
- zool
- Člen | 144
Zkousím to napsat trochu jinak mám vlastní routu, která za pomocí
databáze generuje přátelské adresy
mám kód
$routerStranky = new RouterStranky('[<id>/][<produkty-vp-page>/]',array(
'id' => array(
Route::FILTER_OUT => function ($id) use ($container){
if(!is_numeric($id))
{
return $id;
}
else
{
$adresa = $container->model->getStranky()->select('adresa')->get($id)->adresa;
return $adresa;
}
},
Route::VALUE => $uvod
),
'module' => 'Front',
'presenter' => 'Stranky',
'action' => 'default'
));
$routerStranky->context = $container;
$router[] = $routerStranky;
Problém nastává na tomto řádku
$adresa = $container->model->getStranky()->select('adresa')->get($id)->adresa;
Tím že se po každé volá dotaz nad databází a pokud se generují adresy
třeba 40 odkazů, tak se do databáze podívá 40×. Přemýšlel jsem nad
tím, a myslím, že by šlo si předem uložil pole s klíči id a hodnotou
adresy, a pak pouze šahat do tohoto pole(kde by byli uloženy adresy všech
stránek), ale nevím jestli je to takto správně.
díky
- Tomáš Votruba
- Moderator | 1114
@zool: Jak píše studna, přidej cache. Cachování nad db asi myslíš cachování struktury dotazů, nikoliv jejich výsledků (pozor na to).
Takto nějak:
// $adresa = $container->model->getStranky()->select('adresa')->get($id)
$cache = $container->cache;
$adresaList = $cache->load("adresaList");
if ($adresaList == NULL) {
$adresaList = $container->model->getStranky()->fetchPairs('id', 'adresa');
$cache->save("adresaList", $adresaList);
}
if (isset($adresaList[$id])) {
$adresa = $adresaList[$id];
}