JavaScript véletlen generálás tömbből
A problémám az, hogy nem megy az alábbi forrásom:Mi miatt?
■ <script type='text/javascript'>
var szamok = new Array ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'f');
document.write ("<body style='background: #fff; text-align: center'>");
for (var szam = 0; szam < 100; szam ++) {
var szinertek = '';
for (ertek = 0; ertek < 6; ertek ++) {
var szin = array_rand (szamok);
szinertek += szamok[szin];
}
document.write ("<div style='background: #" + szinertek + "; display: inline-block; height: 40px; margin: 5px; padding: 50px; width: 200px;'><span style='color: #fff;'>#" + szinertek + "</span><br /><span style='color: #000;'>#" + szinertek + "</span></div>");
}
document.write ("</body>");
</script>
Én csak array_rand() PHP
PHP a forrás eredetileg...
Akkor vagy írd meg az
Math.floor(Math.random() *
new Array
, csak kivételes esetekben, mert esetleg kellemetlen meglepetések érhetnek, valamint lassabb is, mint aKirály
Hivatkozás rá.
Bár csak kevésszer generál le színt, mert belekerült valami undefinied(?) is.
e
e
. De ami még fontosabb, hogy nem értetted azt az egy sor kódot, amit leírtam. Kérlek előbb azt értelmezd, mielőtt használod.Felkeltette az érdeklődésemet
var szamok, i;
var ido1 = new Date().getTime();
for (i = 0; i < 100000; i++) {
szamok = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
}
var ido2 = new Date().getTime();
for (i = 0; i < 100000; i++) {
szamok = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
}
document.title = (new Date().getTime() - ido2) + ' - ' + (ido2 - ido1);
</script>
IE kivételével a többi böngészőben pont fordított eredmények jöttek ki (bár az előbbiben sem túl nagy a különbség, és többedszerre futtatva ott is győz a new Array()).
Arra gyanakszom, hogy az utóbbi idők JS motor optimalizálási versenyének köszönhető a változás.
Viszont a new Array() egy teljesen szabványos szerkezet, és egy böngészőben sem okozhat gondot a használata.
szerk.: még egy tesztet írtam, és ennek az eredményein még jobban meglepődtem, mint az előbb:
var szamok, i;
var ido1 = new Date().getTime();
for (i = 0; i < 10000; i++) {
szamok = {egy: '1', ketto: 'ketto', harom: 'harom', negy: 'negy', ot: 'ot', hat: 'hat', het: 'het', nyolc: 'nyolc', kilenc: 'kilenc', a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f'};
}
var ido2 = new Date().getTime();
for (i = 0; i < 10000; i++) {
szamok = new Object();
szamok.egy = '1', szamok.ketto = 'ketto', szamok.harom = 'harom', szamok.negy = 'negy', szamok.ot = 'ot', szamok.hat = 'hat', szamok.het = 'het', szamok.nyolc = 'nyolc', szamok.kilenc = 'kilenc', szamok.a = 'a', szamok.b = 'b', szamok.c = 'c', szamok.d = 'd', szamok.e = 'e', szamok.f = 'f';
}
document.title = (new Date().getTime() - ido2) + ' - ' + (ido2 - ido1);
</script>
Akkor általánosítsunk: a
/^ize (bigyo) .*/
vs.new RegExp('^ize (bigyo) .*')
.(Én úgy tartom, hogy a kódot ketten olvassuk: én és az interpreter. Ezért nem mindent az interpreter szájíze szerint írok. A literálokat azért használom, mert én könnyebben olvasom őket.)
Azért ez nekem nem teljesen
Kliens oldalon mikor érdemes egyáltalán a JS performanciájával foglalkozni? Már feltéve, hogy rendeltetésszerűen használjuk és nem írunk benne op.rendszert... ;)
(vagy az flashben íródott? lehet, hogy keverem)
Ha például alkalmazást
Akkor bennem valami tévképzet
Én még úgy kezeltem, mint egy HTML scriptelési lehetőséget, amit csak nagyon rövid feladatok kivitelezésére használunk. (akkor is, ha Ajax-szal dolgozunk)
Ha már applikációban gondolkodom, akkor inkább java webstart(??? remélem, nem keverem a szezont a fazonnal) vagy valami egyéb, vastag klienses megoldás.
---
Na jó, nem akarom ezt a témát szétoffolni, úgyhogy inkább hagyjuk is vagy menjünk át vele privátba.
Gmail, Goole Maps, Google Docs
Miért lassabbak a literálok?
Kellemetlen meglepetés
Nem tudom
random(x, y)