texy dvojí ukládání do db

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Je lepší ukládat do db dva záznamy jeden se syntaxí texy a druhý s html nebo uložit jen texy syntaxy a pak to v šabloně pomocí helperu převádět?

Foowie
Člen | 269
+
0
-

Zvolil bych druhou metodu + cache

Filip Procházka
Moderator | 4668
+
0
-

jenom nástin:

public function renderDefault()
{
	// získání $clanek
	$this->template->clanek = $clanek;
}

v šabloně

{cache $clanek->id, tags => ['clanek#'.$clanek->id, 'clanky']}
	{* jak nastavit texy jako helper do šablony je tisíc a jeden návod *}
	{$clanek->text|texy}
{/cache}

potom budeš mít vždy správně vykreslený výstup, prohnaný texy. Zpracovávat se to bude vždy jen jednou a nebo pokud smažeš v namespace Nette.Template.Cache podle tagu clanky nebo clanek#12345, kde 12345 je ID článku.

masterr
Začátečník | 141
+
0
-

No ten texy výstup potřebuju jen v administraci pro editaci, ten html výstup jen v šabloně pro zobrazení, takže bych stejně mohl selectovat jen to co potřebuju a nesnížila by se tím rychlost scriptu, ne?

Jak moc urychlí načítání stránky cashování oproti načítání dat z db? (v případě běžnýho článku) Jaký to má výhody?

bojovyletoun
Člen | 667
+
0
-

v tomhle případě to asi smysl mít bude, protože inicializování celého texy modulu a následná konverze si určitě něco řeknou (při každém požadavku sic) . Kdyžto vzetí bloku z cache j prosté includování souboru temp\cache\_Nette.Template.Cache\_8..

Filip Procházka
Moderator | 4668
+
0
-

Ono to zase tak úplně prosté není, je tam práce s meta informacemi atd. Ale každopádně to výrazně sníží nároky oproti vykonávání hromady regulárů :)

masterr
Začátečník | 141
+
0
-

Dík za objasnění, ale když bych to udělal tak že bych ukládal oba dva ty tvary (html,texy)do db a pak při zobrazování článku selectnul jen ten html výstup, tak tím pádem by mi tam nevadil ten texy tvar a nijak by nezatežoval server, nebo se pletu?

Pak bych nemusel používat cachování a vyšlo by to rychlostně a zátěžově na server podobně?

Foowie
Člen | 269
+
0
-

Tak rychlostní rozdíl databáze vs cache tady je. (Kdyby nebyl tak by cache ani nemusela existovat)
Takže pokud děláš nějaký systém který bude hodně zatěžovaný, zvolil bych cachování. Pokud děláš stránky, na které se přijde podívat denně pár lidí, tak bych rozdíl mezi cache, db nebo i případně převod z texy tvaru (nevím jak je to rychlé) moc neřešil.

Filip Procházka
Moderator | 4668
+
0
-

velký objem dat, který se skoro nemění ⇒ lepší je použít cache

masterr
Začátečník | 141
+
0
-

Snažím se udělat e-shop a učím se přitom s nette, použiju cash teda.

masterr
Začátečník | 141
+
0
-

HosipLan napsal(a):

jenom nástin:

public function renderDefault()
{
	// získání $clanek
	$this->template->clanek = $clanek;
}

v šabloně

{cache $clanek->id, tags => ['clanek#'.$clanek->id, 'clanky']}
	{* jak nastavit texy jako helper do šablony je tisíc a jeden návod *}
	{$clanek->text|texy}
{/cache}

potom budeš mít vždy správně vykreslený výstup, prohnaný texy. Zpracovávat se to bude vždy jen jednou a nebo pokud smažeš v namespace Nette.Template.Cache podle tagu clanky nebo clanek#12345, kde 12345 je ID článku.

No, ale takle mi to stejne furt bude tahat data nejprv z db a když budou v cashi tak se akorát nevypišou, ale furt je taham, ne?(tím docilím akorat toho ze se mi to prevede jednou tim texy)

Nebylo by lepší to cashovat už při ukládání do db? Že by se to vždycky tahalo rovnou z cache?
Ale stejně nechápu moc tu logiku, k čemu je teda db, když mohl vše ukládat do cashe, pak to z ní i tahat a upravovat a bylo by to rychlejší?

Můžete mi to nějak osvětlit k čemu používat db, když je tu serverová cash?Dík

Foowie
Člen | 269
+
0
-

Cash je podle wiki „označujeme někdy případ placení v hotovosti, úhradu hotovými penězi.“
Cache může být (pro větší rychlost) jen v paměti, takže nezaručuje persistenci. Může se tedy klidně stát, že se cache celá pročistí klidně každý den … Navíc cache neumí SQL atd atd …
A jak funguje DB snad víš a když ne tak google…

Filip Procházka
Moderator | 4668
+
0
-

jak to funguje, když použiješ navrhovaný postup:

  1. uložím si článek do databáze
  2. na stránku s článkem přistoupí člověk
    1. článek se načte z databáze
    2. článek se zpracuje pomocí texy (tady to žere hodně výkon)
    3. článek se uloží do cache
  3. článek se zobrazí

kdykoliv potom, pokud mám platnou cache …

  1. na stránku s článkem přistoupí další člověk
    1. článek se načte z cache (žádné zpracování pomocí texy!)
  2. článek se zobrazí

Co se týče „dotaz se provede vždy“, přečti si tohle vlákno : https://forum.nette.org/…lona-v-cache?…

masterr
Začátečník | 141
+
0
-

sry za cash, chtěl jsem napsat [keš]…

Jsem myslel že cache se pročistí jen když ji k tomu dám příkaz…

HosipLane asi nechápu tu logiku jak si mi napsal v tom příkladu. Podle toho, co píšeš mám tu cache využít jen na převod do toho html tvaru. Což podle mě vyjde na stejno jako uložit oba dva tvary a pak načítat jen ten html tvar.

Takle totiž načtu stejně ty data z db a pak se akorát hledá jestli je v cache už převedenej tvar, ale ten původní se pořád načítá. Je to tak nebo se pletu?

Nemělo by se to spíš řešit v presenteru(nebo modelu)? Když jsou data v cache tak je zobraz, když ne ulož je tam z db?

Cifro
Člen | 245
+
0
-

Ak ukladaš Texy aj vyrenderované html do DB, tak Texy parsuje len pri ukladaní do DB, a potom pri načítavaní už nie, lebo vytiahneš len stlpec s html a to vypišeš.

Ak nemáš obmedzenú veľkosť DB, a viac selectov z DB ako insertov do DB, tak ja by som asi použil to dvojité ukladanie aj texy aj html do databázy.

Editoval Cifro (2. 1. 2011 16:14)

Filip Procházka
Moderator | 4668
+
0
-

Jsem myslel že cache se pročistí jen když ji k tomu dám příkaz…

napsal jsem snad že ne? :)

Tady jde o to mít v databázi surové data, tak jak půjdou krásně zpracovávat a nesrat si tam vygenerované html. Cache se naopak maximálně hodí pro ukládání vygenerovaného html, dokonce je na to v latte i macro {cache ...}...{/cache}.

Samozřejmě pokud se ti protiví to mít v šablone, můžeš si to obsloužit v presenteru:

public function renderClanek($id)
{
	$cache = Nette\Environment::getCache('MojeAplikace.Clanky.Texy');

	if (isset($cache[$id])) {
		$clanek = Model::findOne(array('id' => $id));
		$texy = new Texy();
		// nastavení texy ...
		$clanek->text = $texy->process($clanek->text);

		$cache->save($id, $clanek, array(
			'tags' => array('clanek#'$id, 'clanky')
		));
	}

	$this->template->clanek = $cache[$id];
}
<h1>{$clanek->title}</h1>
<div class="clanek">
	{$clanek->text}
</div>
Foowie
Člen | 269
+
0
-

„Jsem myslel že cache se pročistí jen když ji k tomu dám příkaz…“ Cache obecně nezaručuje trvalou persistenci dat.

Jinak mělo by to být takhle:
Existuje záznam v cache pro daný článek?

  • ANO
    • zobrazí se z cache
  • NE
    • načte se z DB
    • převede se z Texy do HTML
    • uloží se do cache
    • zobrazí se
arron
Člen | 464
+
0
-

HosipLan napsal(a):
Tady jde o to mít v databázi surové data, tak jak půjdou krásně zpracovávat a nesrat si tam vygenerované html. Cache se naopak maximálně hodí pro ukládání vygenerovaného html, dokonce je na to v latte i macro {cache ...}...{/cache}.

Samozřejmě pokud se ti protiví to mít v šablone, můžeš si to obsloužit v presenteru:…

Tohle vsechno mi prijde, ze je to jasne:-) Myslim, ze problem u masterra je ten, ze nevi, jak tohle prepsat rouzmne do sablony s pomoci makra {cache}. A osobne, taky moc nevim, jak bych to udelal :-) Naznac pls. :-)

masterr
Začátečník | 141
+
0
-

No mě jde taky o to, že od každýho toho článku (zboží) potřebuju udělat výtah čistýho textu na index, bez jakychkoli značek. To kdybych mel uložený v html muzu udelat pomoci php fce. Ale v tyhle podobe to udelat nemuzu.

(Většinou ten text upravu potřebovat nebude…)

názorně

Rychlý zdroj informací pro zaneprázdněné administrátory Chcete vědět, jak vyzrát na velké množství nových funkcí Exchange Serveru 2007, jak server...

Jak mám pak tohle řešit? Cashovat index je asi kravina. Mohl bych napsat vlastní fci, která by odstranila ty značky texy, asi jediná možnost, že?

Edit:Nebo ukládat ten malej text zvlášt? asi kravina, ne?

Editoval masterr (2. 1. 2011 17:42)

Aurielle
Člen | 1281
+
0
-

Můžeš použít něco typu $this->template->perex = Nette\String::truncate(strip_tags($cache['text']), 150);

masterr
Začátečník | 141
+
0
-

Tak slavnostňě oznamuji : Úzpěšně jsem pro ,,cacheoval" ty ,,clanky" a jede to parádně Dík všem za help.

Ted k tomu druhému problému:

gmvasek napsal(a):

Můžeš použít něco typu $this->template->perex = Nette\String::truncate(strip_tags($cache['text']), 150);

Kdy mám dostat ten text do keše v html podobe? Dalo by se udelat ze bych kontroloval posledni id clanku v keši textu a pak to id srovnal s poslednim id v db, a aktualizoval keš (v keši by byl object array se všema mini článkama),

nebo

bych mohl kazdej ten mini článek ukládat do keše samostatně(a overovat jestli tam je podle id vysledku z db), jenže bych to pak musel dát i do adminu, aby se při změně danýho článku smazala jeho keš, aby se výsledek rovnou projevil.

Oboje se mi to nezdá moc ideální, nenapadá vás něco lepšího?

Aurielle
Člen | 1281
+
0
-

Proč necachuješ přímo HTML výstup co ti vyplivne Texy?

jtousek
Člen | 951
+
0
-

Nemohl by sám od sebe ten helper |texy používat keš? Bylo by to nejtransparentnější.

Filip Procházka
Moderator | 4668
+
0
-

to rozhodně nebylo, ale implementovat by to mělo být velice jednoduché

Editoval HosipLan (6. 1. 2011 8:06)

Ondřej Brejla
Člen | 746
+
0
-

jtousek napsal(a):

Nemohl by sám od sebe…

Ale no fuj, chování „ala Bradavice“ není vítáno :-)