From f7fddc05dd6e61ea98571655d62d3eb1389516a6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 5 Mar 2020 13:09:42 +0100 Subject: [PATCH] Improve caching of widget.js --- src/pretix/presale/management/commands/updatestyles.py | 1 + src/pretix/presale/views/widget.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/pretix/presale/management/commands/updatestyles.py b/src/pretix/presale/management/commands/updatestyles.py index 0ca099fb2..7aa99f72c 100644 --- a/src/pretix/presale/management/commands/updatestyles.py +++ b/src/pretix/presale/management/commands/updatestyles.py @@ -53,6 +53,7 @@ class Command(BaseCommand): ) gs.settings.set('widget_file_{}'.format(lc), 'file://' + newname) gs.settings.set('widget_checksum_{}'.format(lc), checksum) + cache.delete('widget_js_data_{}'.format(lc)) if fname: if isinstance(fname, File): default_storage.delete(fname.name) diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index 063680a9a..5d88849db 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -130,11 +130,14 @@ def generate_widget_js(lang): @gzip_page @condition(etag_func=widget_js_etag) -@cache_page(1 if settings.DEBUG else 60) def widget_js(request, lang, **kwargs): if lang not in [lc for lc, ll in settings.LANGUAGES]: raise Http404() + cached_js = cache.get('widget_js_data_{}'.format(lang)) + if cached_js and not settings.DEBUG: + return HttpResponse(cached_js, content_type='text/javascript') + gs = GlobalSettingsObject() fname = gs.settings.get('widget_file_{}'.format(lang)) resp = None @@ -142,7 +145,9 @@ def widget_js(request, lang, **kwargs): if isinstance(fname, File): fname = fname.name try: - resp = HttpResponse(default_storage.open(fname).read(), content_type='text/javascript') + data = default_storage.open(fname).read() + resp = HttpResponse(data, content_type='text/javascript') + cache.set('widget_js_data_{}'.format(lang), data, 3600 * 4) except: logger.exception('Failed to open widget.js') @@ -156,6 +161,7 @@ def widget_js(request, lang, **kwargs): ) gs.settings.set('widget_file_{}'.format(lang), 'file://' + newname) gs.settings.set('widget_checksum_{}'.format(lang), checksum) + cache.set('widget_js_data_{}'.format(lang), data, 3600 * 4) resp = HttpResponse(data, content_type='text/javascript') return resp