diff --git a/web/lib/template.ssjs b/web/lib/template.ssjs index 3119a4a8a6b8d67824f3bd005520c7a0fd94fde2..a845681448aa8a8a8bd6f4b148b450f2c05ae373 100644 --- a/web/lib/template.ssjs +++ b/web/lib/template.ssjs @@ -46,25 +46,24 @@ function write_template(filename) { if(!inc.open("r",true,1024)) { horrible_error("!Error " + inc.error + " opening template file: "+ fname); } - var file=''; - while(! inc.eof) { - file=file += inc.read(1024); - } + var file=inc.read(); inc.close(); - file=file.replace(/([\x00-\xff]*?)<<REPEAT (.*?)>>([\x00-\xff]*?)<<END REPEAT \2>>/g, - function(matched, start, objname, bit, offset, s) { - var ret=''; - start=parse_regular_bit(start,"",template); - start=start.replace(/\<\!-- Magical Synchronet ([\^%@])-code --\>/g,'$1'); - write(start); - for(obj in template[objname]) { - var thisbit=parse_regular_bit(bit,objname,template[objname][obj]); - thisbit=parse_regular_bit(thisbit,"",template); - thisbit=thisbit.replace(/\<\!-- Magical Synchronet ([\^%@])-code --\>/g,'$1'); - write(thisbit); - } - return(""); - }); + /* The following 'if' statement fixes performance problem with pages *not* containing REPEAT clauses */ + if(file.search(/<<REPEAT .*>>/)>0) + file=file.replace(/([\x00-\xff]*?)<<REPEAT (.*?)>>([\x00-\xff]*?)<<END REPEAT \2>>/g, + function(matched, start, objname, bit, offset, s) { + var ret=''; + start=parse_regular_bit(start,"",template); + start=start.replace(/\<\!-- Magical Synchronet ([\^%@])-code --\>/g,'$1'); + write(start); + for(obj in template[objname]) { + var thisbit=parse_regular_bit(bit,objname,template[objname][obj]); + thisbit=parse_regular_bit(thisbit,"",template); + thisbit=thisbit.replace(/\<\!-- Magical Synchronet ([\^%@])-code --\>/g,'$1'); + write(thisbit); + } + return(""); + }); file=parse_regular_bit(file, "", template); file=file.replace(/\<\!-- Magical Synchronet ([\^%@])-code --\>/g,'$1'); write(file);