web workers

Tags:    javascript

<< < 123 > >>
Hej jeg har den her side hvor man kan teste hvor mange tegn browseren kan gemme i localStorage og sessionStorage :
http://scootergrisen.dk/htmlgrisen/eksempler/eksempel0008.html

Nu vil jeg gerne lave siden om så den bruge web workers som jeg forstår skulle være godt til sådan en opgave.

Testen lider nemlig under at processbaren ikke opdater sig før hele testen af slut i de fleste browsere og det lidt ærgeligt det er meningen man under testen skal kunne følge med på processbaren og se hvor langt man er nået.

Nå men nu er jeg så lige idag gået igang med at lære om web workres så kender det ikke endnu men jeg kan se at man ikke har adgang til window objecktet fra en webn worker og dermed heller ikke localStorge og sessionStoage...

Så hvordan skal jeg kunne lave min test med web workers ?

Jeg ville jo gerne putte localStorage.setItem('', e.data); i min web worer fil men det kan jeg jo så ikke.

Fik afvide noget af min kode var ueffektiv.
Så fik jeg afvide jeg kunne skrive data = new Array(10000000).toString(); i stedet.

Er der en endnu bedre måde at lave en lang streng på hvor der skal være et vist antal tegn i ?




Indlæg senest redigeret d. 29.07.2012 06:09 af Bruger #13010
24 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Data fra web worker bliver kopier (ikke delt) til hoved scriptet.
Så det kan da godt være man ikke spare noget tid ved at lave strengen i en web worker og sende den tilbage.

Men hvor i min kode ville i lave det setinterval ?



Jeg kan ikke se ideen med testen ... Sessionstorage og localstorage kan holde cirka 5mb. Det er altså en rimelig lang string, at skulle sætte sammen på den her måde.



@Dan: Jeg giver dig ret, men lad os hellere løse problemet og derved lærer scootergrisen måske noget andet af det.

@Scootergrisen: Det er det jeg har prøvet at svare på i mine to forrige svar? I stedet for et direkte kald til din divide-and-conquer algoritme, så benyt dig af et "indirekte" kald vha. setTimeout.

Fold kodeboks ind/udJScript kode 




Ideen er at finde ud af præcist hvor mange tegn der kan gemmes.



jeg ville nok også droppe det der med, at lave den lange string hver gang du kalder setTimeout ... det koster en del resourcer, at lave en toString på sådan et langt array, for ikke, at snakke om hvor mange resourcer det tager, at lave sådan et lagt array.



At allokere fem megabytes er nu ikke hverken tungt, dumt eller ualmindeligt. Jeg bruger bl.a. JavaScript til noget billedbehandling og genererer af og til langt større buffere.



nej, men her snakker vi om lidt noget andet, han generere en string fra scratch ud fra et array som er 5 mb



jakob det hjælper mig bare ikke at du siger jeg skal gøre sådan og sådan jeg aner ikke hvordan jeg skal skrive i koden.
Du velkommen til at kigge i koden og fortælle hvordan jeg skal gøre.

Jeg ved ikke om det er effektivt og lave en lang streng fra starten hver gang. Ville det være bedre og beholde den samme lange streg også bare tilføje eller trække et vist antal tegn fra og til når man skal bruge en anden længde ?





Hmm.

Så vidt jeg ved er Javascript strenge immutable. Så de kan ikke ændre størrelse - i stedet så laver alle operationer på strenge en ny streng.

Så hvis i prøve at bygge en 5MB streng op ved at starte med 1MB så lægge 1MB til osv. indtil i når 5MB ender i med at lave i alt: 1+2+3+4+5=15MB streng i alt. Desto større den endelige streng, og desto mindre intervallet jo større bliver den endelig mængde data der er spild. Hvis intervallet var 0,5MB i stedet ville i ende med at have lavet 27,5MB hvor 22,5MB er spild. Interval på 64 bytes ender man med at lave 205GB!!! Så hvorfor ikke blot be om det hele på en gang?
Fold kodeboks ind/udJScript kode 


Noget jeg dog mere er i tvivl om der størrelsen på et tegn. Javascript bruger vidst nok 16-bit unicode tegn internt. Men spørgsmålet er om browseren lagrer det på en anden måde? Men hvis de lagres som 16-bit så er der vel egentlig dobbbelt så meget plads tilgængelig.



Indlæg senest redigeret d. 30.07.2012 15:46 af Bruger #14645
@Søren

Scooter ved ikke hvor stor den endelige streng skal være og derfor kan han ikke bare allokere den på en gang...hele hans opgave består i at finde ud af, hvor stor strengen skal være.

Og ja, strenge er immutable og kan derfor ikke ændre størrelse, men JavaScripts runtime kan deallokere tidligere genererede strenge så snart, der ikke længere er referencer til den...hvornår den gør det, må den selv om.



<< < 123 > >>
t