Autor Zpráva
Radek9
Profil
Zdravím.
Již je to nějakou tu dobu, co se pokouším psát vlastní JS framework. Dnes jsem zveřejnil druhou RC verzi, a proto bych chtěl znát váš názor. Nechci ani znát názor na design (vím, že není nejlepší), spíš na framework samotný. Děkuji.
Web: http://legio.tode.cz/

Vím, že se to s frameworky jako Mootools nebo jQuery nemůže moc rovnat, ale na na výběr elemtnů, jejich úpravu a nějaké ty client-side funkce to není špatný pomocník.

Edit: Ještě přikládám přímé linky na download a dokumentaci:
http://legio.tode.cz/?l=ke-stahnuti
http://legio.tode.cz/?l=dokumentace
Str4wberry
Profil
Moderátor Str4wberry: Přesouvám do JavaScriptu.

Je k vidění někde čitelná verze skriptu?
Radek9
Profil
No, nechtěl jsem to tam nahrávat, protože to moc nechci dávat jako open-source, ale klidně se koukni: http://legio.tode.cz/legio-pracovni.js
Edit:
__construct:
Vidíš, o tom ani nevím, tak já to tedy mažu a kdo chce, ať se na to koukne přes to.
__construct
Profil
Vyzerá celkom zaujímavo, syntax je podobná tej zo známych JS FW, takže jeho používanie je celkom jednoduché.
<mimo-téma>
Radek9:
No, nechtěl jsem to tam nahrávat, protože to moc nechci dávat jako open-source, ale klidně se koukni: http://legio.tode.cz/legio-pracovni.js
JS Beautifier nepoznáš ;-)
K dokumentácii: Na kód by bolo dobré použiť nejaký zvýrazňovač syntaxe.
</mimo-téma>
Radek9
Profil
__construct:
Jo, až budu dělat ukázky, tak si napíšu vlastní s využitím toho frameworku.
__construct
Profil
Radek9:
Mno teraz som si skúsil jednoduchý test na výber elementov podľa class a podľa ID - výsledky sa Ti nebudú páčiť:
Legio:
Výber podľa class: 330ms
Výber podľa id: 254ms
jQuery:
Výber podľa class: 100ms
id: 23ms

console.time('Výber podľa class');  
var zoznam = $('#zoznam');
var polozky = '<ul>';
  
for (i=0; i<1000; i++) {  
    polozky += '<li class="polozka' + i + '">polozka</li>';
}  
  
polozky += '</ul>';
zoznam.html (polozky);
  
for (i=0; i<1000; i++) {  
    var s = $('.polozka' + i);
}  
console.timeEnd('Výber podľa class');  
  
console.time('Výber podľa id');  
var zoznam = $('#zoznam');
var polozky = '<ul>';
  
for (i=0; i<1000; i++) {  
    polozky += '<li id="polozka' + i + '">Polozka</li>';
}  
  
polozky += '</ul>';
zoznam.html (polozky);
  
for (i=0; i<1000; i++) {  
    var s = $('#polozka' + i);
}  
console.timeEnd('Výber podľa id');
Nox
Profil
Pokud chceš názor i na interní část, pak by bylo fakt vhodné ji sem dát, s komentáři (jistě píšeš) a normálními názvy proměnných...nebo fakt používáš a,v,cl,_r_,s...? Kdo se v tom pak vyzná?

Nebo ty z000000 jsou kvůli konfliktům s externími? Jednak je to něco jako "compatilibity by obscurity," druhak bys měl používat var a tím by problém odpadl, navíc afaik (nejsem úplně expert) je taky takové systémové odstínění uzavření toho celého do funkce atp. (něco se o tom říká tady)


ad selektory... jQ pro #id používá prostě getElementById místo hození toho do Sizzle, asi to tak nemáš, ale nechce se mi to tam moc hledat v aktuální podobě
Str4wberry
Profil
No, nechtěl jsem to tam nahrávat, protože to moc nechci dávat jako open-source

Právě se to těžko hodnotí, když se člověk nemůže podívat, jak to vypadá.
Radek9
Profil
__construct, Nox:
Pravda, ten selektor jsem napsal trochu špatně. Asi ho přepíšu.

Edit:
jQ pro #id používá prostě getElementById
Jenže to mi nefunguje. Když napíšu něco jako:
alert(document.getElementsByTagName("div")[0].getElementById("span").getElementsByTagName("a")[0].innerHTML);
Tak to hodí error, že getElementById není funkce.

Edit2:
__construct:
Mně to teď ale lítá kolem 60 ms.
ah01
Profil
Radek9
Přidám se k žádosti Str4wberry a Nox. Pokud chceš znát náš názor, bude lepší když zdrojáky ukážeš. Black box testování je na tohle horko moc náročné ;)
Radek9
Profil
ah01:
No, já něco provedu s tím selektorem a potom to sem hodím. Prozatím můžeš použít ten JS Beautifier. Ale jelikož zítra odjíždím, tak to nebude hned.

Jinak, děkuji všem za připomínky a názory, ten selektor a nějaké funkce tedy přepíšu, aby to bylo rychlejší.
Aichi
Profil
Původně jsem to nechtěl ani komentovat, ale čeho je moc, toho je moc. Z dokumentace pár divností:

- append funguje obráceně, než je v JS zvykem, takže ne node.appendChild(new), ale jako new.appendTo(node), to je haluz
- řídit získání šířky nebo výšky pomocí atributu s hodnotou 0 není moc intuitivní
- metoda co vrací data a jmenuje se set????
- metoda parent, jak bude fungovat na $('div').parent() pokud vyberu více DIVů?

Na rychlost se vybodni, hlavně ať to má pořádný API.
Radek9
Profil
Aichi:
- append funguje obráceně, než je v JS zvykem, takže ne node.appendChild(new), ale jako new.appendTo(node), to je haluz
Takhle to je i v jQuery, ;-) ale asi by nebyl problém udělat ještě opačnou funkci.

- řídit získání šířky nebo výšky pomocí atributu s hodnotou 0 není moc intuitivní
Mně příjde trochu dlouhý tam psát nějakej parametr jako true apod.

- metoda co vrací data a jmenuje se set????
Set je v překladu také soubor, množina, řada nebo sbírka. Vrací ti to prostě sadu elementů.

- metoda parent, jak bude fungovat na $('div').parent() pokud vyberu více DIVů?
Všechny elementy v selektoru změní na nahradí za jejich rodiče. Pokud daný element nemá rodiče, vyhodí ho to.
Nox
Profil
Radek9:
Tak to hodí error, že getElementById není funkce.
Ne, nejspíš to napíše že to není metoda toho objektu... no asi to tak bude, přepokládám, že je to jen na dokumentu

Není důvod hledat uvnitř něčeho, getElementByIdz dokumentu bude minimálně ve většině případů mnohonásobně rychlejší než cokoli co si napíšeš - __construct už to sem v podstatě dal

Mně příjde trochu dlouhý tam psát nějakej parametr jako true apod.
Udělej jinou funkci... tak se to většinou dělá, funkce se jmenuje podle toho co dělá

jQuery mi přijde jako rarita že různý funkce se chovají trochu odlišně podle zadaných parametrů, ale výsledek je vždy stejný....nebo aspoň si neuvědomuju opačný případ


Jinak by jsi se mohl vyjádřit k žádostem - alespoň záporně s odůvodněním (že tedy třeba chceš hodnotit jen interface)
Chamurappi
Profil
Také přemýšlím o tom, že bych napsal nějaký (mini)framework. Ale aspoň trochu dobře.

Reaguji na Radka9:
Nelíbí se mi vlastnosti, kterými se Legio podobá jQuery. Myslím si, že jeden příkaz by měl dělat jednu věc (nikoliv dvacet proložených tečkami) a že návratová hodnota funkce by měla odpovídat významu funkce (tj. neměla by vracet původní objekt). Tenhle zřetězovací zlozvyk vede jen k tomu, že lidi neumí používat normální proměnné a neuvědomují si rozsahy platnosti — ty jsi toho důkazem. Také se mi nelíbí hra na selektory — u efektivně napsaného kódu a skriptu je jen velmi výjimečně zapotřebí prohledávat dokument stejným způsobem, který je přirozený pro CSS. (Čímž neříkám, že člověk musí všechno pracně rozepisovat metodami DOMu, od frameworku očekávám ulehčení, ale jiné.)

.on(): „Funkce události má dva nepovinné parametry. Jsou jimi e - event a t - this.
Proč není this dostupné jako normální this? Protože neznáš apply, hm?

Spoustu věcí bys mohl napsat lépe a čistěji, kdybys pozorněji sledoval, o čem se bavíme tady na diskusi.
1) Používáš smyčku for-in na pole a kolekce.
2) Nepoužíváš u ní var, zbytečně vytváříš globální proměnné (ještě k tomu ošklivé).
3) Dáváš ternární operátor tam, kde by stačilo logické nebo.
… ani nevím, čím pokračovat. Celkově z toho čiší víc nadšení než zkušeností.
shaggy
Profil
Radek9:
Odhliadnuc od "zaujímavej" dokumentácie, pletenia pojmov (miešaš funkcie a metódy), zaujímala by ma len jedna vec:

Aký je prínos tvojho frameworku?

Je vidieť, že názvami metód, selektormi, fungovaním sa snažíš priblížiť/podobať jQuery. Prečo by teda niekto mal siahnuť po tvojom výtvore, keď je pomalší a ešte dlhú dobu bude zaostávať napr. za spomínaným jQuery? Tvrdenie, že dávaš niekomu možnosť výberu neobstojí - človek hľadá alternatívu vtedy, keď je z nejakého dôvodu nespokojný so súčasným stavom (rýchlosť, množstvo funkcií, kvalita), ale ty zatiaľ nič z toho nepridávaš.
Nox
Profil
Tak dost možná že ta snaha "FW pro ostatní" není úplně smrtelně vážná a prostě ho to baví+se něco přiučí tam i tady

Řetězení vidím dost i v PHP, nevim jestli je to úplně špatně. Pokud je to funkce typu get(), tak samozřejmě řetěz přerušuje a chyby se vyřeší výjimkama
Když odhlédnu od edukativního vlivu
Radek9
Profil
Chamurappi:
Myslím si, že jeden příkaz by měl dělat jednu věc
No, taky možnost, ale mně se víc líbí tohle. Neříkám, že je to tak nejlepší.

Proč není this dostupné jako normální this? Protože neznáš apply, hm?
Pravda, to neznám, díky.

1) Používáš smyčku for-in na pole a kolekce.
Já vím, jádro jsem psal před nějakou dobou a potom jsem jen upravoval. Od té doby jsem se naučil, že je lepší psát normální for, takže to potom přepíšu.

2) Nepoužíváš u ní var, zbytečně vytváříš globální proměnné (ještě k tomu ošklivé).
To jsem si teď už na localhostě opravil.

shaggy:
Aký je prínos tvojho frameworku?
Nauka. Dělal jsem to hlavně proto, abych se lépe naučil JS. Vím, že to má ještě hodně nedostatků, ale z těch jsem se už poučil a chci to vše opravit. A já ten frameowrk nikomu nenutím, navíc jsem psal, že se to s jQuery atp. nemůže rovnat.


Edit:
Jinak, pokud už nikdo nemáte nějaké jiné připomínky, tak bych to rád zamknul, abych to mohl upravit a až to bude dokonalejší dát zhodnotit znovu.

Edit2: Dobře, zamykám tedy a jdu upravovat. ;-)
Toto téma je uzamčeno. Odpověď nelze zaslat.