IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
lcet.m
Člen
Avatar
lcet.m:19.3.2013 19:05

Ahojte, na začátek řeknu, že nejsem webař.

Takže mám ke zkušenějším otázečku - proč je obecně vnímáno (jestli vůbec je) použití eval() v JS jako špatný nápad?

Pomiňme prosím otázky bezpečnosti a přehlednosti kódu - potřebuji to použít na velmi specifickou věc, kde toto 100% odpadá.

Zajímá mě spíš, jestli mají současné browsery třeba nějaké známé problémy s výkonem, ke kterým toto vede?

Díky za vaše názory

 
Odpovědět
19.3.2013 19:05
Avatar
Odpovídá na lcet.m
Michael Olšavský:19.3.2013 19:18

Hlavní nevýhodou je jak si psal bezpečnost. Jelikož se ale ptáš ohledně výkonu, "evaluovaný" kód je pomalejší, jelikož funkce eval() znovu volá interpret tzn. kód se nedá zkompilovat a nepoužívá ani cache. Tohle jsou moje informace.

 
Nahoru Odpovědět
19.3.2013 19:18
Avatar
Odpovídá na lcet.m
Drahomír Hanák:19.3.2013 19:39

Obecně používání eval je špatný nápad, ale neplatí to vždy.

Proč je to špatný nápad?

  1. Zvyšuje se bezpečnostní riziko. Při větším kódu si neuhlídáš, co všechno eval spouští.
  2. je to pomalejší (nejde cachovat, spouští se, až když se zpracuje eval)
  3. je mnohem těžší kód debugovat

Kde by se naopak mohla funkce použít?
Když mám nějaký asynchronní loader javascriptu (třeba AJAXem - např. require.js, Google Closure má myslím taky něco apod.)

 
Nahoru Odpovědět
19.3.2013 19:39
Avatar
lcet.m
Člen
Avatar
Odpovídá na Drahomír Hanák
lcet.m:19.3.2013 23:32

Díky za odpověď. Jak už jsem říkal, to co jsi uvedl pod body 1 a 3 vynechávám, protože vím přesně, ke které konkrétní věci se bude tahle technika používat. A ano, jde o javaScript dynamicky vytvářený na serveru a asynchronně načítaný klientem.

Btw, jiná možnost spuštění takového kódu asi ani není? Něco jsem zahlédl ohledně dynamicky generovaného tagu <script>, ale to mi přišlo jako moc velký hack, navíc se mi to na IE nějak nepovedlo uvést v život.

 
Nahoru Odpovědět
19.3.2013 23:32
Avatar
Odpovídá na lcet.m
Drahomír Hanák:20.3.2013 0:06

Takže ty na serveru generuješ nějakým jazykem JavaScript?

Načítání skriptú jde buďto AJAXem (pak je to asynchronní) nebo přidáním tagu script do DOM, jak jsi zmínil. Můžeš používat obě. Záleží na tom, co ti víc vyhovuje.

 
Nahoru Odpovědět
20.3.2013 0:06
Avatar
lcet.m
Člen
Avatar
Odpovídá na Drahomír Hanák
lcet.m:20.3.2013 10:31

Aha, teď tomu moc nerozumím. "Načítání skriptú jde buďto AJAXem (pak je to asynchronní)" - to znamená co? Já prostě udělám z browseru HttpRequest na server, přijmu script ve stringu a ten pak pomocí eval spustím. Žiju v tom, že tomu se říká Ajax?

 
Nahoru Odpovědět
20.3.2013 10:31
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:20.3.2013 10:38

Místo eval() je v případě jQuery vhodnější použít $.getScript() nebo $.parseJSON() podle účelu.

Nahoru Odpovědět
20.3.2013 10:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na lcet.m
Drahomír Hanák:20.3.2013 13:23

To co používáš, je AJAX ;) Asynchronní je to proto, že se JS zpracovává vesele dál a tvůj nový javascript, který chceš přes AJAX načíst, se načte, až prohlížeč obdrží odpověď serveru. Na tu odpověď serveru ale javascript nečeká, pouze zaregistruje callback, který se zavolá po přijetí.

 
Nahoru Odpovědět
20.3.2013 13:23
Avatar
lcet.m
Člen
Avatar
Odpovídá na Drahomír Hanák
lcet.m:20.3.2013 16:52

Uf, už jsem si chvíli myslel, že to co jsem myslel že je Ajax, je někdo úplně jiný :)

Ok, díky za názory, pokusím se teda vydat tudy, pokud přijdu na nějaký problém, podělím se...

 
Nahoru Odpovědět
20.3.2013 16:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.