From 906fbbd4639b4706e96188f646fd51bb191a51df Mon Sep 17 00:00:00 2001 From: Matthew Tretter Date: Fri, 10 May 2013 02:56:44 -0400 Subject: [PATCH] Reduce calls to backend Reading from an `ImageCacheFile`, will result in accessing its `file` attribute repeatedly which would result in the `before_access` signal being dispatched, which in turn would result in many unnecessary calls to the image cache backend. With this change, we don't send `before_access` if the file has already been created. Similarly, we don't need to try to generate the image if we know for certain that it's already been generated (because we have a reference to it). --- imagekit/cachefiles/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/imagekit/cachefiles/__init__.py b/imagekit/cachefiles/__init__.py index ad8359a..5d58edc 100644 --- a/imagekit/cachefiles/__init__.py +++ b/imagekit/cachefiles/__init__.py @@ -56,7 +56,8 @@ class ImageCacheFile(BaseIKFile, ImageFile): super(ImageCacheFile, self).__init__(storage=storage) def _require_file(self): - before_access.send(sender=self, file=self) + if not getattr(self, '_file', None): + before_access.send(sender=self, file=self) def generate(self, force=False): """ @@ -64,7 +65,8 @@ class ImageCacheFile(BaseIKFile, ImageFile): whether the file already exists or not. """ - self.cachefile_backend.generate(self, force) + if force or not getattr(self, '_file', None): + self.cachefile_backend.generate(self, force) def _generate(self): # Generate the file