Avatar billede nmh Nybegynder
09. oktober 2003 - 23:45 Der er 22 kommentarer og
1 løsning

Array håndtering i VBscript og JavaScript

Er der store forskelle i performance i de to programmeringsprog, når det drejer sig om håndtering af arrays?

Der er ikke tale om at få point her, men om at få en diskussion i gang.

Alle påstande skal dokumenteres, og gerne ledsages af små eksempler.

Se også her:http://www.eksperten.dk/spm/409861
Avatar billede olebole Juniormester
09. oktober 2003 - 23:53 #1
<ole>

Som jeg foreslog i det andet spm, så start med Google. Det vil formodentlig holde dig beskæftiget en rum tid - både med tekst og eksempler.
Jeg har selv prøvet ... det er bl.a. på den baggrund, jeg udtaler mig  :)

/mvh
</bole>
Avatar billede nmh Nybegynder
10. oktober 2003 - 00:04 #2
Kom nu med nogle konkrete eksempler.
Her er to små eksempler. Kør dem og kom med en kommentar.

VBscript:

<html>
<script language=VBscript>
Option Explicit
sub test()
  dim t1,t2,A(200000),i
  t1=Timer
  for i=1 to 200000
    A(i)=i
  next
  t2=Timer
  MsgBox t2-t1
end sub
</script>
<body>
<form name="f">
<input type=button value="Tryk her" onClick="test()">
</form>
</body>
</html>

java script:

<html>
<script type="text/javascript">
function test(){
  var A=new Array(200000);
  Tstart=new Date();
  t1=Tstart.getTime();
  for(i=0;200000>i;i++){
    A[i]=i
  }
  Tslut=new Date();
  t2=Tslut.getTime();
  alert((t2-t1)/1000);
}
</script>
<body>
<form name="f">
<input type=button value="Tryk her" onClick="test()">
</form>
</body>
</html>
Avatar billede nmh Nybegynder
10. oktober 2003 - 00:06 #3
Hvis der ændres til A(i)="qwertyu" bliver der endnu større forskel.
Avatar billede olebole Juniormester
10. oktober 2003 - 01:36 #4
"Det, vi oplever, er ikke naturen - men naturen udsat for vores måde at spørge på."
- Niels Bohr

Med tanke på 10/10-2003 00:06:20:
Er du sikker på, hvad det egentlig er, du måler på? Er det performance af sprogenes håndtering af arrays eller strenge? Prøv med noget mere kompliceret array-håndtering.

Har du prøvet at søge på det? Jeg gjorde det, da jeg skulle vælge, hvilket sprog, jeg ville anvende under ASP. Samtidig spurgte jeg de udviklere, jeg kender, der kan begge sprog (godt), trawlede usergroups m.m. Alle steder fik jeg samme svar.
Jeg brugte faktisk temmelig lang tid og megen energi på at checke scenen ud og orker ikke starte forfra der, hvor jeg allerede har været.
Hvis du har lyst til at foretage dine egne undersøgelser, synes jeg til gengæld absolut, du skal gøre det  ;o)
/mvh
Avatar billede nmh Nybegynder
10. oktober 2003 - 10:45 #5
Nu er det jo svært at isolere tingene helt, og det var derfor jeg valgte to forskellige typer tildeling i for-løkken.
Med A(i)=i var VBscript 9-10 gange hurtigere, og med A(i)="qwertyu" ca. 50 gange hurtigere.
VBscript er kendt for at være dårlig til at lægge tekststrenge sammen, og jeg havde egentlig forventet, der kom problemer, når der kom tekststrenge ind i billedet.

Jeg har altid troet, at der mht performance ikke var den helt store forskel på de to sprog, og har valgt mest at benytte VBscript, når jeg koder ASP.

Jeg har selvfølgelig prøvet at søge, men har endnu ikke fundet noget rigtig fornuftigt.

Når du nu har undersøgt disse ting olebole, kunne du så ikke komme med et link, eller en programstump, der kan illustrere forskelle?
Avatar billede nmh Nybegynder
10. oktober 2003 - 12:31 #6
Håndtering af arrays m.m. i VBscript:
http://www.4guysfromrolla.com/webtech/041101-1.shtml
Avatar billede nmh Nybegynder
10. oktober 2003 - 12:46 #7
Nu har jeg prøvet med en løkke med "indmaden" A[A[i]]=A[i],
her vinder VBscript igen. VBscript er 5 gange hurtigere.

Er der slet ikke nogen, der kan komme med et eksempel, hvor JavaScript er hurtigst?
Avatar billede nmh Nybegynder
10. oktober 2003 - 13:59 #8
Her er lidt mere:
http://www.15seconds.com/issue/010716.htm

Igen ser det ud til at VBscript er bedst.
(Og jeg er ikke ude på at promovere VBscript. Jeg vil blot have problemet belyst)
Avatar billede nmh Nybegynder
10. oktober 2003 - 14:26 #9
Jeg har i øvrigt nu lavet en VBscript løsning, der næsten lige så hurtig som oleboles metode fra www.eksperten.dk/spm/409861.
arrayet B indeholder en liste af ord. Der skal laves en ny uden dubletter:

n=Ubound(B)
for i=0 to n
  mail=B(i)
  if not D.exists(mail) then
    D.Add mail,""
  end if
next
C=D.keys
'Nu indeholder arrayet C de ønskede ord
oleboles metode: 0,093 sek (2000 ord)
min metode:      0,125 sek (2000 ord)

Her er det JavaScript, der vinder lidt.
Avatar billede nmh Nybegynder
10. oktober 2003 - 14:31 #10
Jeg skal måske lige tilføje, hvordan D bliver til:
set D=CreateObject("Scripting.Dictionary")
Avatar billede olebole Juniormester
10. oktober 2003 - 16:50 #11
Hvor har du fra, at VBS skulle være kendt for at være dårligt performende med hensyn til strenge? Strenge er _netop_ et af de få områder, hvor VBS out-performer JScript :)

Læg i øvrigt mærke til, at når du laver et eksempel, hvor du faktisk laver det samme i de to sprog, ender JScript som værende det hurtigste (10/10-2003 14:26:48).
Avatar billede nmh Nybegynder
10. oktober 2003 - 17:45 #12
Læs her om problemet, som er alment kendt:
http://www.attention-to-details.com/newslog/37o-performance-improvement-in-asp-vbscript.asp

Når man siger at VBscript er dårligt til at håndtere strenge, så er det ikke fordi man sammenligner med JS, men fordi man hurtigt får problemer, hvis store strenge skal concateneres.
Det er ikke en trøst, at JS er endnu ringere.

Når man skal lægge to strenge sammen, kan man dels gør det på den traditionelle måde st=st1 & st2 Det, vil man opdage, går utrolig langsomt, hvis strengenes længder er store. Så langsomt, at det kan være en helt ubrugelig metode.
I stedet gør man så sådan:
dim A(1)
A(0)=st1:A(1)=st2
st=join(A,"")
eksemplet (10/10-2003 14:26:48): JS vinder her, men det er ikke ret meget.
Jeg laver da også det samme i de 2 sprog i eksemplet (10/10-2003 12:46:29), og her vinder VBscript med en faktor 5.

Mon ikke vi snart kan konkludere, at der ikke er belæg for sige:
"VBS er håbløst ineffektivt til at behandle arrays - nok det langsomste sprog på markedet til netop den øvelse  :)"

Jeg er som sagt ikke ude på at promovere VBscript, men jeg vil da ikke lade det ovenfor citerede stå som værende en sandhed.

Kom nu med et eksempel, der virkelig viser en markant forskel i
JS's favør.

Indtil de er sket vil jeg stadig hævde at der ikke er den store forskel (med mindre man altså skal arbejde med strenge, hvor det ene sprog er dårligt, og det andet er værre).
Avatar billede olebole Juniormester
10. oktober 2003 - 18:10 #13
Jeg har lidt vanskeligt ved at finde hoved og hale i din argumentation ... men du må såmænd hævde, hvad du har lyst til. Jeg _er_ som sagt færdig med min 'undersøgelse' - men fortsæt endelig din egen  :)
/mvh
Avatar billede nmh Nybegynder
10. oktober 2003 - 18:25 #14
Du kan ikke finde ud af min argumentation?
Mon ikke du er for fastlåst i dine tidligere undersøgelser.
Min argumentation er da ellers krystalklar:
I alle de eksempler vi indtil nu har været igennem, er der enten kun en meget lille (forskel 0,093 sek mod 0,125 sek) eller en meget stor forskel i VBscript favør. På nettet
http://www.15seconds.com/issue/010716.htm igen et eksempel.
Jeg vil dog ikke sige andet, end at det ikke er et spørgsmål om performance, der skal bestemme, om man bruger det ene eller det andet af de to sprog.

Hvad kan du forlange mere? Hvorfor kommer du ikke med et eksempel, der viser noget andet?

Jeg er kun ude på at blive klogere, så hvis du ligger inde med sandheden, så skulle du da gøre andre den tjeneste at komme med et link eller et konkret eksempel.
Avatar billede olebole Juniormester
10. oktober 2003 - 19:01 #15
Nej ... jeg finder din argumentation usammenhængende. Så vidt jeg kan se, er JScript hurtigere på det, vi diskuterede.

"Jeg vil dog ikke sige andet, end at det ikke er et spørgsmål om performance, der skal bestemme, om man bruger det ene eller det andet af de to sprog."
Nææhhh ... man kan jo vælge så mange runde til at gøre det ene eller det andet - men hvis performance er dig ligegyldig, er diskussionen jo fuldstændig tåbelig  :)

Jeg har ingen links liggende i mine favorites - og jeg agter ikke at bruge tid på at søge info til dig. Der ligger bunker af info om emnet på nettet, som også du burde kunne finde.

Som sagt: Fortsæt endelig din undersøgelse - og hvis du mener VBS gør dig lykkelig, så fortsæt med at skrive i det  :)
/mvh
Avatar billede nmh Nybegynder
10. oktober 2003 - 19:22 #16
Nu misforstår du igen: Når jeg siger, at det ikke er et spørgsmål om performance, når man skal vælge i mellem de to sprog, så er det jo fordi, der netop ikke er tale om væsentlige forskelle i performance. Så når man skal vælge er det derfor andre ting, der er afgørende. Selvfølgelig skal man da ikke benytte et sprog, der performer dårligt. Prøv nu at være mere konstruktiv og positiv.

Det er vel ikke kun mig, der kunne have interesse i disse ting, og når du nu er så fast i din overbevisning, så kunne da i det mindste lægge et lille eksempel, der viser din påstand.

Du har faktisk endnu ikke kommet med et eneste eksempel (udover det ene med de 0,093 og 0,125, og her var det jo nok mere VBscripts dictionary-objekt, der blev testet), der styrker din påstand om den dårlige array-håndtering i VBscript.

VBS gør mig ikke lykkelig. Jeg er ikke missionær for VBscript, men jeg kan ikke lide, når nogle kommer med påstande, og så ikke vil komme med en ordentlig dokumentation.
Avatar billede olebole Juniormester
10. oktober 2003 - 19:44 #17
Jamen, hvis du ikke kan lide mine kommentarer, må du gerne lade være med det. Jeg har fortalt dig, du blot kan søge på Google ... det kan vel ikke være så svært - og jeg har faktisk adre og bedre ting at lave end at gøre det for dig  :)
EOD
Avatar billede nmh Nybegynder
10. oktober 2003 - 20:14 #18
Men det er da utroligt. Du skal sandelig ikke gøre noget for mig specielt. Du burde gøre noget for dig selv og for andre, der måske læser dette. Og jeg håber, du i det mindste af denne lange ordveksling har lært at være mindre vidtløftig, når du ytrer dig, og altid sørge for at have argumentationen i orden. Det var jo dine udokumenterede og voldsomme udtalelser, der startede alt dette.

Jeg er ked af, at jeg oprindelig brugte vendingerne "sludder" og "helt hen i vejret", for det er måske derfor du har været så negativ.

Jeg stopper også diskussionen nu med dig (med mindre du kommer med konstruktive indlæg). Det kan da være vi mødes igen her på eksperten på en forhåbentlig mere positiv måde.

mvh

nmh
Avatar billede =maddog= Nybegynder
14. oktober 2003 - 04:13 #19
JavaScript og VBScript er ikke direkte sammenlignelige mht performance af den simple grund at de to sprog er bygget forskelligt op. JavaScript kan programeres objekt-orienteret. Lad mig tage udgangspunkt i diskurtionen om strings og concatations.
"Rigtig" javascript, d.v.s. JavaScript 1.5 til gecko browsere anvender StringBuffers og konverterer dem kun til rene strings når de skal anvendes som sådanne. Der er altså ingen problemer her. JScript derimod halter gevaldigt i takt med en given streng variabel vokser. Derfor vil det være en fordel at anvende en buffer her. Til det formål kan vi kode vores egen Buffer konstruktor og anvende denne.
function Buffer() {
    this._buffer=new Array();
    this.add = function(str) {
        this._buffer[this._buffer.length] = str;
        return this;
    }
    this.toString = function() {
        return this._buffer.join('');
    }
    this.clear = function() {
        this._buffer.length = 0;
    }
}
// i anvendelse
buffer = new Buffer();
for (i=0;i!=200;i++) buffer.add("word ");
alert(buffer);

Jeg mener at de to største problemer med VBScript er
1) Det kan med min viden ikke kodes objekt-orienteret hvilket gør det svært at udbygge.
2) Det virker kun i IE.

Du bør nok teste fler-dimensionelle arrays også.
Jeg har ikke særlig meget viden om VBScript, da jeg ikke finder dette sprog specielt tiltalende af ovenstående grunde.
Avatar billede nmh Nybegynder
14. oktober 2003 - 09:35 #20
=maddog=>>Du har helt ret i dine punkter 1 og 2.
Tilsyneladende har begge sprog problemer med strenghåndteringen. I VBscript benyttes ofte arrays og join-funktionen når lange strenge skal concateneres (se kommentar 10/10-2003 17:45:36)
Du har også ret i, at de to sprog er så forskellige, at det ofte ikke vil være rimeligt at sammenligne dem mht performance. Men når det drejer sig om enkle opgaver, og simpel håndtering af tabeller (arrays) kan man vel godt. Hidtil har jeg ikke kunnet finde noget, der taler for at VBscript skulle være specielt dårligt i den henseende (snarere omvendt)
Avatar billede =maddog= Nybegynder
14. oktober 2003 - 10:45 #21
Det er ikke urimeligt at forestille sig at VBScript kan være mere effektivt end client JScript på visse punkter idét denne runtime kompiler er udviklet relativt sent og specifikt til IE.
I øvrigt også udviklet på bekostning af JavaScript, der ikke fuld ud støtter nedarvning i IE. F.x kan man ikke arve fra HTML elementer i IE, som man kan i JavaScript 1.5.
Avatar billede =maddog= Nybegynder
23. oktober 2003 - 15:31 #22
Der lader ikke til at være nogen opfølgning på min sidste kommentar. Måske man skulle runde af...?
Avatar billede nmh Nybegynder
12. november 2003 - 20:26 #23
Lukker nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester