ugrás a tartalomhoz

javascript vs actionscript

zzrek · 2010. Feb. 21. (V), 14.25
Sziasztok!

Mostanában csinálok egy olyan webes alkalmazást, amiben a háttérben számításigényes bonyolult algoritmus fut le. Tartalmaz gráfban keresést, prototípusosan öröklődő objektumok tömegét, closure-t, sztringműveleteket stb.
Látszik a különbség a böngészők között a lefutási időben. Még korántsem vagyok a projekt végén, és előre el kell gondolkodnom azon, hogy mi van akkor, ha a végső algoritmus futási ideje bizonyos böngészőkön már elér a felhasználók számára egy megengedhetetlen szintet? Chrome-ban úgy tűnik, hogy szépen fog menni, de mi van, ha valaki egy lassabb böngészőt kénytelen használni?

Felvetődött bennem, hogy ebben az esetben megkövetelném a flash jelenlétét és az algoritmus abban futna le. Actionscriptben viszont semmi tapasztalatom nincsen, és ezért szeretnék tájékozódni, a véleményeteket kérni, hogy elképzelhessem hogy mivel jár ez, érdemes-e ebben gondolkodni.

1: Tényleg gyorsabban futna le flash-ben, actionscripttel ugyanaz az algoritmus?
Ilyen linkeket találtam a neten javascript vs actionscript témában:
http://oddhammer.com/actionscriptperformance/set4/
http://jacksondunstan.com/articles/534
http://coolwebdeveloper.com/tag/javascript-vs-flash-performance/
Nem tűnik egyértelműnek a gyorsulás.
2: A flash külön processzen fut a böngészőtől? Vagyis ha többprocis gépet használ valaki, akkor hatékonyabban tudom kihasználni vele az erőforrásokat?
3: Nehéz átírni egy javascript kódot actionscriptre? Mire kell vigyázni? Ha úgy döntök hogy mindkét platformon futtatható kódot készítek, mi az, amit nem érdemes használnom, mert nehéz lenne átírni?
4: Actionscript kódból hogyan csinálhatok swf állományt, van erre ingyenes eszköz? Mit ajánlotok?

Köszönöm a véleményeteket, gondolataitokat!
 
1

Gyorsabb

Poetro · 2010. Feb. 21. (V), 19.18
Valamivel valószínűleg gyorsabb lesz ActionScript 3 alatt, és ráadásul minden böngészőben ugyanolyan gyors. A hátránya tud lenni, hogy meg kell tanulni a különbségeket a két nyelv között, amik azért nem is kicsik. Mondjuk sok dologban megegyeznek, mert alapjaiban az ActionScript is ECMA Script, csak más irányba fejlesztették.

Másik kérdés, hogy sokkal több helyen van JavaScript, mint ahol Flash. Vannak olyan platformok, ahol egyáltalán nincs Flash, JavaScript viszont van, fordítva ez nem igazán igaz.
2

köszi értem

zzrek · 2010. Feb. 21. (V), 20.14
Köszi, nem tudsz valami linket, ahol a két szkriptnyelvet összehasonlítják?
Az algoritmusban nincs semmi böngészőhöz kötődő, csak objektumok, ciklusok, ternális operátorok, bitműveletek, closure, object és tömbliterál forma, prototype öröklődés -- gondolom ezek még szintaktikában is egyformák. Mik azok az elemek, amik copy-paste után nem működnének?
Ha nem akarok semmilyen grafikai stb elemet, akkor milyen eszközzel lehet legolcsóbban kipróbálni az swf-gyártást?
(Alapvetően javascriptre gondoltam, és csak akkor csinálnám meg actionscriptre is, ha megéri, érezhetően gyorsabb lesz, és nem kerül túl nagy anyagi-/munkabefektetésbe az "áttérítés"
3

Környezet

vbence · 2010. Feb. 21. (V), 20.28
Inygenes flash-környezetet tudsz csinálni a FlashDevelop + Flex Builder párossal.

Ami a flash egyértelmű előnye lehet, hogy külön szálon fut, mint az UI, amég a JS blokkolja a böngészőt (jó esetben is az aktuális tabot).
5

Különbségek

Poetro · 2010. Feb. 21. (V), 22.20
Például az a különbség, hogy az ActionScript 3 már típusos, Objektum Orientált, és már nincsenek Prototype jellegű öröklődés, hanem hagyományos - Java jellegű - öröklődés van. A korábbi ActionScript implementáció igencsak hasonlított a JavaScript-re, de az ActionScript 2 (Flash 7) óta egyre nagyobb az eltávolodás. Rövidebb leírást találsz Wikipedián, illetve a nyelv teljes dokumentációja elérhető online. A példák sok mindent elárulnak szerintem.
6

szomorú

zzrek · 2010. Feb. 22. (H), 00.25
Hmm, ha nincs benne prototype öröklődés, akkor nagyon át kellene írni, ez azért nagy változtatás (osztályokat előredefiniálni például, meg még ki tudja mit?) (Ez a váltás azért komolyan érinthette a flash fejlesztőket is, egy csomó kódot ki kellett hogy dobjanak ezek szerint, kíváncsi lennék hogy mi motiválta az actionscript szabványfejlesztőket egy ilyen lépésre)
Köszi az infót, ez legalább segített abban, hogy ne foglalkozzak a kérdéssel és ez azért sok munkától megkímélt (majd megpróbálok beleférni az időkeretbe javascripttel)
Köszönöm mindenkinek, szép jövőhetet!
7

Sebesség

Poetro · 2010. Feb. 22. (H), 00.35
Ha nézted a teszteket, láthatod hogy leginkább a sebességbeli növekedés és a fordítás szintű hibakeresés az, ami miatt szerintem a változtatást csinálták. És valóban rengeteg kódot ki kellett dobni, de véleményem szerint a nyelv így se rossz, és a fordítás szintű ellenőrzések sokat javítanak a hibakeresésben, ami azért nem túl egyszerű, és leginkább nem triviális JavaScript alatt.
8

A típusosságot

zzrek · 2010. Feb. 22. (H), 10.43
A típusosságot értem hogy miért rakták bele (fordítás szintű ellenőrzés, rákényszerítve van a programozó hogy szabályosabban gondolkodjon és gyorsabb is lehet tőle a lefordított kód) de a prototype lecserélésének indokát még nem értem, és számomra ez lenne a "nagyobb költségű" a kód átírásánál és ezt már nem vállalom be. (A típusosságot még be lehetett volna tartani JSben is, de most nem éri meg átformálni az egészet hagyományos öröklődésesre csak azért hogy ASben is futhasson)
Reménykedtem, hogy egyszerű lesz az átállás, de sajnos nem, ez van (pedig érdekes, ígéretes ötletnek tűnt)
Köszi a segítséget!
9

AS2

vbence · 2010. Feb. 22. (H), 12.08
Nem feltétlentül kell AS3mat használnod.
10

na lám nem értek hozzá ez eszembe se jutott

zzrek · 2010. Feb. 22. (H), 13.39
Áhá! Ez akkor hogyan megy? A flashlejátszóknak a böngészőben mindegy, hogy milyen AS verzióban fordítottam, visszamenőleg is kompatibilisek? (Végülis persze, hiszen a régi swf-ek is működnek ma is) Ez jól hangzik...
AS2-ben szépen benne van a prototype ezek szerint?
Kösz hogy említetted, utánanézek...
(Egy mai swf fordító is tud AS2-ből dolgozni, vagy keresnem kell egy régit?)

(most 12:45 van és a post bejegyzésnek 13:39-et rögzített, rosszul jár a szerver óra)
11

Pl.

vbence · 2010. Feb. 22. (H), 14.35
A fent írt eszközökkel, FD-ben létrehozol egy AS2 projektet, ami elkészít egy vázat:
class Main {
	
	public static function main(swfRoot:MovieClip):Void {
		// entry point
	}
	
	public function Main() {
	}
		
}
Ebbe copypaste-elheted a prototype-alapú kódot:
class Main {
	
	public static function main(swfRoot:MovieClip):Void {
		// entry point

		var X = function () {
			this.num = -1;
		}
		X.prototype.set = function (num) {
			this.num = num;
		}
		
		X.prototype.get = function () {
			return this.num;
		}
		
		var Y = function () {
			X.apply(this, arguments);
		}
		Y.prototype = new X();
		
		Y.prototype.getNeg = function () {
			return -this.num;
		}
		
		var y = new Y();
		y.set(33);
		trace("getNeg: " + y.getNeg());
	}
	
	public function Main() {
	}
		
}
Persze lehet szükség változtatásokra, a JS azért tud csoda dolgokat... nem azt mondom, hogy copypaste és boldogság :)

--

Kár hogy a kódszínezőben JS-nek kellett cimkézni a kódot...

--

Kiváncsiságból kipróbáltam AS3ban is... lefordul, lefut gond nélkül, csak Warningokat generál a hiányzó tipusdeklarációk miatt.
12

Köszi a példát

zzrek · 2010. Feb. 22. (H), 14.42
Köszi a példát ez sokat fog segíteni, este kipróbálom.
Ahogy itt olvasom:
http://studiokoi.com/blog/comments/making_anonymous_functions_and_closures_work_in_actionscript_20/
figyelni kell az anonymous függvényekre és a closure-ra is, de azt hiszem ezeket megoldom.
Belekerül egy pár napba, míg kipróbálgatom és belejövök, majd postolok, hogy mire jutottam.
4

köszi, kipróbálom

zzrek · 2010. Feb. 21. (V), 21.29
Köszi, kipróbálom!