webForumDet fria alternativet

uppdatera sida lätt

ASP

13 svar · 391 visningar · startad av whistler1

Medlem sedan apr. 20059 inlägg
Frågan#1

Hej

Jag har en databasdriven förstasida som tar lång tid att ladda. Jag funderar på om man skulle "cache'a" den lite smart. Tänkte så att varje gång jag ändrar nåt i databasen som påverkar sidan så går ett script in och plockar "view source" till sidan och sparar ner den i en textfil. Sen visar jag bara textfilen varje gång och får på så sätt en snabbare sida. Sen när databasen öppnas på nytt så skrivs textfilen över. Hoppas nån är med på vad jag menar.

Medlem sedan apr. 20059 inlägg
#2

<%
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile("default.asp", 1)

textinnehall = objTextStream.ReadAll

objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile( "defaulttest.txt", 2 )

objFile.Write textinnehall

Set objFile = Nothing
Set objFSO = Nothing
%>

jag har följande, men då öppnas ju filen direkt och exekveras inte från servern. Jag vill ha view-sourcekoden där all asp-kod har körts liksom. Jag antar att jag måste läsa in sidan på något sätt, men hur?

Medlem sedan apr. 20059 inlägg
#3

testade:

<%

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://www.minhemsida.com/default.asp",False
objHTTP.Send
strHTML = objHTTP.ResponseText
Set objHTTP = Nothing

textinnehall = strHTML

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile( "defaulttest.txt", 2 )

objFile.Write textinnehall

Set objFile = Nothing
Set objFSO = Nothing
%>

men det fungerade inte. tips?

Medlem sedan juni 200032 967 inlägg
#4

För att exekvera en kodfil:

Server.Execute("fil.asp")
Medlem sedan apr. 20059 inlägg
#5

tack, men hur får jag ner det i en textfil sen då?

Medlem sedan juni 200032 967 inlägg
#6

Jag tror jag missuppfattade dig. Jag trodde du hade den färdigcacheade informationen i textfilen?

På vilket sätt fungerade inte ditt senaste kodexempel?

Medlem sedan apr. 20059 inlägg
#7

Aha :)

Koden ger följande felmeddelande: "Invalid procedure call or argument " på rad objFile.Write textinnehall

Om man däremot lägger till htmlencode så fungerar det bra, förutom att alla taggar förstås försvinner, men jag vill ju ha dem :)

<%

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://www.minhemsida.com/default.asp",False
objHTTP.Send
strHTML = objHTTP.ResponseText
Set objHTTP = Nothing

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile( "defaulttest.txt", 2 )

objFile.Write (Server.HTMLEncode(strHTML))

Set objFile = Nothing
Set objFSO = Nothing
%>

Medlem sedan apr. 20031 660 inlägg
Medlem sedan apr. 20059 inlägg
#9

alltså problemet ligger ju i variabeln strHTML. Om man skriver
objFile.Write "hej" så fungerar det ju precis som jag vill. Måste jag omvandla strHTML för att
objFile.Write strHTML
ska fungera?

Medlem sedan mars 20031 inlägg
#10

prova cstr(strHTML)

Medlem sedan apr. 20059 inlägg
#11

fungerade inte heller tyvärr... samma fel "Invalid procedure call or argument"

Medlem sedan apr. 20059 inlägg
#12

det funkar när jag testar med en annan enkel asp-fil, men det tycks vara något i koden på den sida jag försöker hämta som strular.

Medlem sedan okt. 2002257 inlägg
#13

Har för mig jag hade liknande problem för nåt år sen. Och om jag inte minns helt fel körde jag resultatet genom denna funktion

Function Unicode(strResponseBody)
    Dim i, t
    t = String(LenB(strResponseBody), " ")
    t = ""
    For i = 1 To LenB(strResponseBody)
        t = t & Chr(AscB(MidB(strResponseBody, i, 1)))
    Next
    Unicode = t
End Function

'För att kalla på funktionen...

strHTML = Unicode(strHTML)
Medlem sedan apr. 20059 inlägg
#14

Tack Obbelix, det fungerade med din funktion förutom att jag inte fick ut å,ä och ö. Men jag letade lite här på webforum och fick ihop det till slut. Bifogar koden om någon annan behöver en sån här funktion i framtiden:

<%

function BinToText(varBinData, intDataSizeInBytes)
const adFldLong = 128
const adVarChar = 200
set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
objRS.Open

objRS.AddNew
objRS.Fields("txt").AppendChunk(varBinData)
tmp = objRS("txt").Value
objRS.Close
BinToText = tmp
end function

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://www.minhemsida.com/minsida.asp", False

objHTTP.setRequestHeader "Content-type","text/html"

objHTTP.Send

strHTML = BinToText(objHTTP.responseBody,35000)

Set objHTTP = Nothing
'response.write strHTML

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set testfile= objFSO.CreateTextFile("C:\minfil.txt", True)
testfile.Write strHTML
Set objFile = Nothing
testfile.close

%>

(Funktionen är skriven av solbulle, cred)

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)