[Zope-CMF] RFC: browser views and memoization
yuppie
y.2006_ at wcm-solutions.de
Sun Jan 15 15:25:25 EST 2006
Hi!
The skin scripts for complex forms in CMF like folder_contents are
currently big monolithic blocks of code. All the values needed in the
template are computed in a predefined order that makes sure expensive
tasks like querying the catalog or listing folder contents are performed
only once (per request).
Trying to convert this into a browser view and to split the code in
several methods I stumbled other the following issue:
If globally needed values are returned by their own method they have to
be computed again and again, although during the short live of a view
class they can be considered static.
One option would be to pre-compute those values in the __call__ method
and to store them in the view object. An other option is to cache the
results.
I ended up using this method as decorator for most methods:
def memoize(func):
memo = {}
def memoized_func(*args):
if args not in memo:
memo[args] = func(*args)
return memo[args]
return memoized_func
Are there better ways to resolve this?
Will those memo dicts be removed together with the view object or does
this create a potential memory leak? (I'm not very familiar with
decorators.)
Cheers,
Yuppie
More information about the Zope-CMF
mailing list