On the topic of performace concerns in general I decided to code a python version of PHP's PEAR BenchMarkTimer class... does nothing complex at all and is just a wrapper for what you are already using in your code but puts it in an external method and gives it a more easy to type interface ... perhaps might be userfull... I simply found it very familiar and quick for marking my queries during development Usage: declare an external method to newBenchmarkTimer() with id BenchmarkTimer <dtml-let timer="BenchmarkTimer()"> <dtml-call "timer.start()"> <dtml-call expensiveCode> <dtml-call "timer.stop()"> <dtml-var "timer.timeElapsed()"> <dtml-call "timer.setMarker('my_start')"> <dtml-call expensiveCode> <dtml-call "timer.setMarker('my_stop')"> <dtml-var "timer.timeElapsed('my_start','my_stop')"> </dtml-let> can be used in python just the same ==== BEGIN benchmarktimer.py ==== from AccessControl import ClassSecurityInfo from Acquisition import Implicit import Globals import time def newBenchmarkTimer(): return BenchmarkTimer() class BenchmarkTimer(Implicit): def __init__(self): "constructor" self.markers = { 'Start' : 0, 'Stop' : 0 } security = ClassSecurityInfo() security.declareObjectPublic() security.declarePublic('start') def start(self): "set the marker 'Start'" self.setMarker('Start') security.declarePublic('stop') def stop(self): "set the marker 'Stop'" self.setMarker('Stop') security.declarePublic('setMarker') def setMarker(self,name): "set the specific marker" self.markers[name] = time.clock() security.declarePublic('timeElapsed') def timeElapsed(self, start='Start', end='Stop' ): "difference between two markers, order is important" return self.markers[end]-self.markers[start] security.declarePublic('getProfiling') def getProfiling(self): """ name -> name of marker time -> absolute time set in marker diff -> difference between this marker and last marker total -> difference between this marker and 'Start' marker """ i = 0 total = 0 profile = [] for ( marker, time ) in self.markers: if marker == 'Start': diff = 0 else: diff = time - temp; total = total + diff; profile[i]['name'] = marker profile[i]['time'] = time profile[i]['diff'] = diff profile[i]['total'] = total temp = time i = i+1 return result Globals.InitializeClass(BenchmarkTimer) ==== END benchamrktimer.py ====
<dtml-call "REQUEST.set('starttime',_.DateTime().millis())"> Start Time (ms): <dtml-var starttime><br> <dtml-call "REQUEST.set('testlist',['1','2','3','4','5','6','7','8','9','10'])"> <dtml-in "testlist"> <dtml-var sequence-item> </dtml-in> <br> <dtml-call "REQUEST.set('endtime',_.DateTime().millis())"> End Time (ms): <dtml-var endtime><br> <hr size=1> Delay (ms) = <dtml-var "endtime - starttime"><br> <dtml-var standard_html_footer>
Any help would be extremely welcome...as is, the site is too slow to demo to potential clients.