]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Store title of pages in memcache
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 May 2019 09:56:17 +0000 (10:56 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 May 2019 09:56:17 +0000 (10:56 +0100)
This allows us to render pages a lot quicker

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py

index a390ce37d5622516481f6c3bcdb72202a47008aa..b98dcd802740eb01d894e964c6a76a9fbe01550c 100644 (file)
@@ -28,11 +28,23 @@ class Wiki(misc.Object):
                        return Page(self.backend, res.id, data=res)
 
        def get_page_title(self, page, default=None):
+               # Try to retrieve title from cache
+               title = self.memcache.get("wiki:title:%s" % page)
+               if title:
+                       return title
+
+               # If the title has not been in the cache, we will
+               # have to look it up
                doc = self.get_page(page)
                if doc:
-                       return doc.title
+                       title = doc.title
+               else:
+                       title = os.path.basename(page)
 
-               return default or os.path.basename(page)
+               # Save in cache for forever
+               self.memcache.set("wiki:title:%s" % page, title)
+
+               return title
 
        def get_page(self, page, revision=None):
                page = Page.sanitise_page_name(page)
@@ -67,6 +79,9 @@ class Wiki(misc.Object):
                page = self._get_page("INSERT INTO wiki(page, author_uid, markdown, changes, address) \
                        VALUES(%s, %s, %s, %s, %s) RETURNING *", page, author.uid, content or None, changes, address)
 
+               # Update cache
+               self.memcache.set("wiki:title:%s" % page.path, page.title)
+
                # Send email to all watchers
                page._send_watcher_emails(excludes=[author])