[ASB/VB] String vullen traag, alternafief/ander manier?

Pagina: 1
Acties:

  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Topicstarter
Hallo,

Ik heb een template engine die een html file inleest en daar bepaalde dingen vervangt die door ASP worden gegenereerd en vervolgens spuugt ASP de gehele pagina uit .

Nu wordt de uit de database opgehaalde info eerste netjes vormgegeven en in een string gegooit. En dat is het probleem, dit is traag, zie ook: http://www.asp101.com/articles/john/outputperf/default.asp

Nu ben ik opzoek naar een object waar je data (zoals hierboven) in kan gooien zonder dat je erg veel snelheids verlies krijgt of een nettere manier om een zelfde soort template te gebruiken zonder extra componenten.

Wat voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Set objTemplate = Server.CreateObject("Scripting.FileSystemObject")
Set objText = objTemplate.OpenTextFile(Server.MapPath(templateFile),1,false)
template = objText.ReadAll
objText.Close
Set objText = Nothing
Set objTemplate = Nothing

[data uit db]

do while not rs.EOF
     'dit is dus erg traag
     item = item & rs("datauidb")
rs.movenext
loop

template = replace(template,"{%item%}",item)

Huur mij in als freelance SEO consultant!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Afaik blijft het traag; je kan kijken om zelf een eigen cachemanager te schrijven en de pagina op te slaan in een application var. Evt. kan je verder ook de items niet in een string plaatsen, maar in een array; je gaat de onderdelen toch replacen in je template.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-05 23:39

mulder

ik spuug op het trottoir

Het gebruik van Mid zou toch ook sneller zijn?

Hier:
http://support.microsoft....0/9/64.ASP&NoWebContent=1

[ Voor 60% gewijzigd door mulder op 02-03-2004 10:51 ]

oogjes open, snaveltjes dicht


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Don Facundo schreef op 02 maart 2004 @ 10:50:
Het gebruik van Mid zou toch ook sneller zijn?
Een template is niet per definitie vast; als ik een enter ram in de template, wordt de boel omgegooid.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-05 23:39

mulder

ik spuug op het trottoir

Het gaat toch om het concaten van de string?

oogjes open, snaveltjes dicht


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Don Facundo schreef op 02 maart 2004 @ 10:54:
Het gaat toch om het concaten van de string?
Ow dat concaten.. :P Tsja... dat heb ik nooit uitgeprobeerd... :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-05 23:39

mulder

ik spuug op het trottoir

* mulder eigenlijk ook niet

oogjes open, snaveltjes dicht


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Topicstarter
Het gaat idd om het concaten, die link is wel intressant maar bied helaas geen oplossing voor vbscript. In asp.net zou gebruik kunnen maken van de stringBuilder class (zie: http://support.microsoft....aspx?scid=kb;EN-US;306821 )

Ik kwam net dit tegen wat wel intressant lijkt (probeer het voorbeeld maar eens, IE only -> clientside)

Huur mij in als freelance SEO consultant!


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Deze meneer heeft er wat opgevonden.
http://www.eggheadcafe.com/articles/20011227.asp

Ik heb het zelf toegepast bij een applicatie die een aantal seconden deed over het laten van een rij met 400 facturen, met dit object is het enkele tientallen ms geworden.

[edit]
Mja, dat krijg je als je de telefoon opneemt tijdens het schrijven van een post :O

[ Voor 16% gewijzigd door Gert op 02-03-2004 11:17 ]


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Topicstarter
Voor iedereen die straks misschien het zelfde probleem heeft en de links hierboven niet meer werken, hier de class:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Class FastString

    Dim stringArray,growthRate,numItems
    
    Private Sub Class_Initialize()
        growthRate = 50: numItems = 0
        ReDim stringArray(growthRate)
    End Sub
    
    Public Sub Append(ByVal strValue)
        strValue = strValue & ""
        If numItems > UBound(stringArray) Then ReDim Preserve stringArray(UBound(stringArray) + growthRate)
        stringArray(numItems) = strValue:numItems = numItems + 1
    End Sub
    
    Public Sub Reset
        Erase stringArray
        Class_Initialize
    End Sub
    
    Public Function Concat()
        Redim Preserve stringArray(numItems)
        concat = Join(stringArray, "")
    End Function
    
End Class


zo te gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
dim fastStringObj
Set fastStringObj = New FastString

fastStringObj.Reset

[db gegevens]

do while not rs.EOF
     fastStringObj.Append rs("dataUitDb")
rs.movenext
loop

str = fastStringObj.Concat


De snelheids winst is erg groot (denk aan factor 10 to 20) als je grotere hoeveelheden data wilt concaten (rs > 1000). Bij kleinere hoeveelheden is het verschil amper meetbaar.

[ Voor 3% gewijzigd door CrashOne op 02-03-2004 12:17 . Reden: tik fout ]

Huur mij in als freelance SEO consultant!

Pagina: 1