V tom případě se někdy dokonce dá zapomenout jeho jméno a hledání podle názvu převést na indexování, což je významné urychlení.mate to nejak overene, nebo to je jen domenka? v pripade, ze jednotlive identifikatory jsou sdilene (coz je vcelku trivialni optimalizace), pak rozdil mezi pouzitim indexu a prohledavanim tabulky lokalnich promennych je radove v jednotkach instrukci daneho stroje, coz pro vetsinu rozumnych programu funkce ma (< 10 promennych/parametru) predstavuje zrychleni na urovni statisticke odchylky (+ samozrejme neco sezere jeste staticka analyza)
Názory k článku
Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
RE: Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
celé vláknoRE: Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
celé vláknoRE: Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
celé vláknofunction base(a)
{
var b = 4;
return function sum()
{
return a + b;
}
}
var a = 3;
a = sum();
var sum = base(4);
a = sum();
RE: Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
celé vláknoV článku popisuju konrétní situaci v toplevel funkci, tam ten identifikátor může skutečně být jen globální (= toplevel) proměnná nebo lokální proměnná či parametr (technicky je to totéž).
Ve složitější situaci je samozřejmě třeba uvažovat celý lexikální scope chain. Jako lokální proměnnou bych pak definoval proměnnou zaznamenanou v posledním článku aktuálního scope chain, jako globální proměnnou proměnnou zaznamenanou v článku prvním. Jestli existuje nějaký používaný pojem i pro proměnné definované v ostatních článcích, netuším.
K příkladu: V ECMA-262, 3. edice, sekce 13 se píše, že funkční výraz (to, co vracíte ve funkci base) nezapisuje název funkce jako identifikátor do aktuální tabulky proměnných (do posledního článku scope chain) a už vůbec ne do tabulky globálních proměnných (do prvního článku scope chain), a nelze se na něj tedy odvolávat v toplevelu. První příkaz a = sum(); tedy vyhodí chybu.
Pokud bychom ho odstranili, tak na posledním řádku bude mít globální proměnná sum hodnotu funkce vracené v base, která bude mít díky uzávěrové vlastnosti poznamenán schope chain, kde a byla proměnná v jeho předposledním článku (tj. ani globální, ani lokální proměnná dle mé definice) a měla hodnotu 4. Po zavolání druhého příkazu a = sum(); bude tedy hodnota a rovna 8.
Doufám, že vás to přesvědčilo, že vím, o čem mluvím :-)
RE: Do hlubin implementací JavaScriptu: 3. díl - výkonnostně nepříjemné konstrukce
celé vláknoNižšie som dal príklad (22.2).
Môžete posúdiť, ako by to bolo vtedy s optimalizáciami?
caller
celé vláknoJe pravda, ze eval je nielen nebezpecny, ale aj komplikuje chod kodu, ale niekedy je to jedina moznost. napr. spracovanie JSON a podobne veci.
Re: caller
celé vláknoRe: caller
celé vláknoPozor, je rozdíl mezi arguments.caller a Function.caller. První je opravdu deprecated/obsolete, druhé "jen" nestandardní rozšíření.
Re: caller
celé vláknoRe: caller
celé vláknoRe: caller
celé vláknoRe: caller
celé vláknoEval a alternativy
celé vláknoRe: Eval a alternativy
celé vláknozle:
v = eval(jsonsrc)
dobre:
<script type="text/javascript">
v = jsonsrc
</script>
(jde to nahradit v iframe "ajaxu", pro xmlhttprequest uz to nepujde)
(taky to jde pouzit pro "boot" volby, konfigurace a pod.. generovane serverem pri startu aplikace)
Re: Eval a alternativy
celé vláknohttp://zdrojak.root.cz/serialy/json-pro-vymenu-dat-na-webu/
Re: Eval a alternativy
celé vláknoDíky
celé vláknoJe v tomto výkonovo nejaký rozdiel?
celé vláknowith({n:0}) var id2 = function(){return n++;};
// Je výkonovo nejaký rozdiel medzi id1 a id2, prípadne čo sa týka optimalizácií?