Am 10.02.2009 um 10:16 schrieb Charlie Clark: > Now the profile results: > 1) View > 4499 function calls (4476 primitive calls) in 0.110 CPU seconds > > 2) PythonScript > 12830 function calls (12786 primitive calls) in 0.154 CPU seconds
I've added an interator which reduces the number of calls: 2370 function calls (2362 primitive calls) in 0.041 CPU seconds But this reduces data transfer still further to between 10 and 20 MB/s! While I'm convinced that the code is probably better I'm at a loss about the slowdown. This is the code for comments: class FilesIterator(object): size = 0 files = [] def __init__(self, files): for f, size in files: self.files.append(f) self.size += size def next(self): while self.files: f = open(self.files.pop(), "rb") data = f.read() f.close() return data class Javascript(ViewBase): """Return all Javascript from the skin as a single string""" folder_name = 'js' content_type = 'application/x-javascript' @memoize def contents(self): skin_tool = getToolByName(self.context, 'portal_skins') layer = skin_tool.getDefaultSkin() skin = skin_tool.getSkinByName(layer) folder = getattr(skin, self.folder_name) obs = [(ob._filepath, ob.get_size()) for ob in folder.objectValues() if ob.meta_type == "Filesystem File"] fs = FilesIterator(obs) return fs def __call__(self): bundle = self.contents() self.request.response.setHeader("Content-Type", self.content_type) self.request.response.setHeader("Content-Length", bundle.size) data = bundle.next() while data: self.request.response.write(data) data = bundle.next() I did look at the file_iterator in ZPublisher.Iterators but I couldn't see a way to combine that with a list of files. Charlie -- Charlie Clark Helmholtzstr. 20 Düsseldorf D- 40215 Tel: +49-211-938-5360 GSM: +49-178-782-6226 _______________________________________________ Zope-CMF maillist - Zope-CMF@lists.zope.org http://mail.zope.org/mailman/listinfo/zope-cmf See https://bugs.launchpad.net/zope-cmf/ for bug reports and feature requests