|
Mark,
When you read the templates in, they'll get converted into whatever codepage
your program is using and then out to ASCII when you write your output so
you're not very like to see a performance boost just from that. One place that
you can see a decent boost is by reading the files in with a large enough
buffer to get the entire file in memory in one shot which reduces your I/O. One
thing you'll have to watch out for with this is when your template is bigger
than your buffer, you have to make sure that you don't write incomplete lines
out or you'll mess up your HTML.
I typically store my page templates in the root file system just because it's
easier for me to maintain them. I was long past using libraries for HTML when I
started doing this so I don't know first hand what difference there is.
Anyway, here's the code I use to spit out my templates (in my case, I don't do
any additional parsing, I just write them out):
*//////////////////////////////////////////////////////////////*
* (GetSection) Get dynamic sections from HTML files *
*//////////////////////////////////////////////////////////////*
PGetSection B export
*--------------------------------------------------------------*
DGetSection PI 10I 0
D SiteID 10A value
D SectionName 20A value
D Printable 1A value
D UseAltTemplate 1A value
DRC S 10I 0
DFileNam S 1000A
DFileNamP S * INZ(%ADDR(FileNam))
DFileDescr S 10I 0
DO_CREAT S 10I 0 INZ(8)
DO_RDWR S 10I 0 INZ(4)
DO_RDONLY S 10I 0 INZ(1)
DO_TEXTDATA S 10I 0 INZ(16777216)
DO_CODEPAGE S 10I 0 INZ(8388608)
Doflag S 10I 0 INZ(0)
Domode S 10U 0 INZ(438)
Dcp S 10U 0 INZ(819)
DBuf S 1024A
DBufP S * INZ(%ADDR(Buf))
DBufLen S 10U 0 INZ(1024)
DZeroBin S 50A INZ(*ALLX'00')
DRezult S 10I 0
DHoldStr S 1024A
DCrLfPos S 10I 0
DLastCrLfPos S 10I 0
* Determine if we are using alternate templates
C If UseAltTemplate<>'Y'
C eval FileNam='/tltswebs/b2bstore/custom/'
C else
C eval FileNam='/tltswebs/b2bstore/custom/alt/'
C EndIf
* Build remaining path name
C If Printable<>'Y'
C eval FileNam=%trim(FileNam)
C + %trim(SiteID) + '/' + %trim(SectionName)
C + '.html' + ZeroBin
C Else
C eval FileNam=%trim(FileNam)
C + %trim(SiteID) + '/printable.'
C + %trim(SectionName)
C + '.html' + ZeroBin
C EndIf
* Open the file for read only
C Z-ADD O_RDONLY oflag
C ADD O_TEXTDATA oflag
C EVAL FileDescr=open(FileNamP:oflag)
*
C If FileDescr <> -1
C eval HoldStr=*blanks
* Read until EOF (RC=0)
C eval RC=-2
C dow RC <> 0
C eval Buf=' '
C EVAL RC=read(FileDescr: BufP: BufLen)
C Select
* If an error is detected
C When RC=-1
C eval RC = perror(FileNamP)
* If less than 1024 bytes were read
C When (RC > 0) and (RC < 1024)
C eval CrLfPos=%scan(x'00':HoldStr)
C If CrLfPos > 0
C eval Rezult=WrtOut(%subst(HoldStr:1:CrLfPos-1)
C +%trim(Buf))
C Else
C eval Rezult=WrtOut(%trim(HoldStr)+%trim(Buf))
C EndIf
C eval HoldStr=*blanks
* If 1024 bytes were read, only write up to the last CR/LF to ensure
* proper parsing by the client. The remaining data will be written
* when the next chunk of data is read.
C When RC = 1024
C eval CrLfPos=%scan(x'0D25':Buf)
C DoW CrLfPos <> 0
C eval LastCrLfPos=CrLfPos
C If (CrLfPos+2) < 1024
C eval CrLfPos=%scan(x'0D25':Buf:CrLfPos+2)
C Else
C eval CrLfPos=0
C EndIf
C EndDo
C If LastCrLfPos<>1023
C eval CrLfPos=%scan(x'00':HoldStr)
C If CrLfPos > 0
C eval Rezult=WrtOut(%subst(HoldStr:1:CrLfPos-1)
C +%subst(Buf:1:LastCrLfPos-1))
C Else
C eval Rezult=WrtOut(%trim(HoldStr)
C +%subst(Buf:1:LastCrLfPos-1))
C EndIf
C eval HoldStr=%subst(Buf:LastCrLfPos+2)+x'00'
C Else
C eval CrLfPos=%scan(x'00':HoldStr)
C If CrLfPos > 0
C eval Rezult=WrtOut(%subst(HoldStr:1:CrLfPos-1)
C +%trim(Buf))
C Else
C eval Rezult=WrtOut(%trim(HoldStr)+%trim(Buf))
C EndIf
C eval HoldStr=*blanks
C EndIf
C EndSl
C enddo
* If there is any data in HoldStr, write it now.
C If %len(%trim(HoldStr)) > 0
C eval CrLfPos=%scan(x'00':HoldStr)
C If CrLfPos > 0
C eval Rezult=WrtOut(%subst(HoldStr:1:CrLfPos-1))
C Else
C eval Rezult=WrtOut(%trim(HoldStr))
C EndIf
C EndIf
* Close the file
C EVAL RC=close(FileDescr)
C IF RC=-1
C EVAL RC = perror(FileNamP)
C ENDIF
C EndIf
C return FileDescr
PGetSection E
*//////////////////////////////////////////////////////////////*
* (WrtOut) Write to STDOUT *
*//////////////////////////////////////////////////////////////*
P WrtOut B export
*--------------------------------------------------------------*
D WrtOut PI 10I 0
D StdOutDta 2048A VALUE
DQUSEC DS
D QUSBPRV 1 4B 0 INZ(16)
D QUSBAVL 5 8B 0
D QUSEI 9 15
D QUSERVED 16 16
DStdOutLn S 9B 0
* Parameter list for the QtmhWrStout API:
C STDOUT PLIST
C PARM StdOutDta
C PARM StdOutLn
C PARM QUSEC
* Add CRLF charecter to end of data:
C CAT x'0D25':0 StdOutDta
* Find the position of the last non-blank charecter:
C ' ' CHECKR StdOutDta StdOutLn
* Write it to standard output:
C CALLB 'QtmhWrStout' StdOut 80
C return 0
P WrtOut E
Matt
-----Original Message-----
From: MWalter@xxxxxxxxxxxxxxx [mailto:MWalter@xxxxxxxxxxxxxxx]
Sent: Monday, January 31, 2005 2:35 PM
To: Web Enabling the AS400 / iSeries
Subject: RE: [WEB400] CSS
Matt,
Thanks for the tip. Would the same overhead be involved in translating the
html template members? In other words, would I get a performance increase
by storing these templates in the IFS, instead of the qsys.lib file system?
I'd like to keep it consistent.
Thanks,
Mark
Mark D. Walter
Senior Programmer/Analyst
CCX, Inc.
mwalter@xxxxxxxxxx
http://www.ccxinc.com
"Haas, Matt"
<Matt.Haas@thomso
n.com> To
Sent by: "Web Enabling the AS400 / iSeries"
web400-bounces@mi <web400@xxxxxxxxxxxx>
drange.com cc
Subject
01/31/2005 02:15 RE: [WEB400] CSS
PM
Please respond to
Web Enabling the
AS400 / iSeries
<web400@midrange.
com>
Mark,
Can you access your CSS files by URL in you browser? The fact that you're
using CGIDEV2 doesn't matter since it's the browser that actually requests
them (unless you're embedding the files in the HTML which just slows
everything down). If you're using the Apache based server, the error log
will tell you the location where it's looking for the CSS file.
Generally speaking, you'll get better performance if this file is in the
root file system and is stored as an ASCII text file. Under this condition,
OS/400 is able to send the file right from disk (or memory if you have
caching turned on and this file's in the cache) and out over the network
(this works under both HTTP servers). When you store in the libraries, the
file has to be read in a record at a time, converted to ASCII (unless your
file's there already), and then sent out over the network. There's a lot
more system code involved in this (not not mention CPU usage) and a lot
more disk IO (especially if the file isn't cached already). I don't know
how noticeable this is on newer hardware but the difference between the
libraries and root file system was dramatic when we were using a 50S for a
web server.
Matt
-----Original Message-----
From: MWalter@xxxxxxxxxxxxxxx [mailto:MWalter@xxxxxxxxxxxxxxx]
Sent: Monday, January 31, 2005 1:55 PM
To: Web Enabling the AS400 / iSeries
Subject: [WEB400] CSS
Has anyone been able to use CSS sheets that are stored as Qsys.lib members
with CGIDEV2?
Thanks,
Mark
Mark D. Walter
Senior Programmer/Analyst
CCX, Inc.
mwalter@xxxxxxxxxx
http://www.ccxinc.com
_______________________________________________
This is the Web Enabling the AS400 / iSeries (WEB400) mailing list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/web400.
_______________________________________________
This is the Web Enabling the AS400 / iSeries (WEB400) mailing list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/web400.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.