From 5db7fa65fda229a47f875b6d1cf0882497e107a0 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 24 May 2016 14:41:51 +0200 Subject: [PATCH] [IMP] ir.qweb: cache the asset filename to improve speed gain: 50% time per asset --- openerp/addons/base/ir/ir_qweb/assetsbundle.py | 13 +++++++------ openerp/addons/base/ir/ir_qweb/ir_qweb.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb/assetsbundle.py b/openerp/addons/base/ir/ir_qweb/assetsbundle.py index 22cc0690095..23a274a70ff 100644 --- a/openerp/addons/base/ir/ir_qweb/assetsbundle.py +++ b/openerp/addons/base/ir/ir_qweb/assetsbundle.py @@ -92,16 +92,16 @@ class AssetsBundle(object): self.remains = remains for f in files: if f['atype'] == 'text/sass': - self.stylesheets.append(SassStylesheetAsset(self, url=f['url'], inline=f['content'], media=f['media'])) + self.stylesheets.append(SassStylesheetAsset(self, url=f['url'], filename=f['filename'], inline=f['content'], media=f['media'])) elif f['atype'] == 'text/less': - self.stylesheets.append(LessStylesheetAsset(self, url=f['url'], inline=f['content'], media=f['media'])) + self.stylesheets.append(LessStylesheetAsset(self, url=f['url'], filename=f['filename'], inline=f['content'], media=f['media'])) elif f['atype'] == 'text/css': - self.stylesheets.append(StylesheetAsset(self, url=f['url'], inline=f['content'], media=f['media'])) + self.stylesheets.append(StylesheetAsset(self, url=f['url'], filename=f['filename'], inline=f['content'], media=f['media'])) elif f['atype'] == 'text/javascript': - self.javascripts.append(JavascriptAsset(self, url=f['url'], inline=f['content'])) + self.javascripts.append(JavascriptAsset(self, url=f['url'], filename=f['filename'], inline=f['content'])) def to_html(self, sep=None, css=True, js=True, debug=False, async=False, values=None): - url_for = values and values.get('url_for', lambda url: url) or (lambda url: url) + url_for = values and values.get('url_for') or (lambda url: url) if sep is None: sep = '\n ' response = [] @@ -390,9 +390,10 @@ class WebAsset(object): _ir_attach = None _id = None - def __init__(self, bundle, inline=None, url=None): + def __init__(self, bundle, inline=None, url=None, filename=None): self.bundle = bundle self.inline = inline + self._filename = filename self.url = url self.html_url_args = url if not inline and not url: diff --git a/openerp/addons/base/ir/ir_qweb/ir_qweb.py b/openerp/addons/base/ir/ir_qweb/ir_qweb.py index 7b59425684a..dfe422f79a5 100644 --- a/openerp/addons/base/ir/ir_qweb/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb/ir_qweb.py @@ -11,6 +11,7 @@ from lxml import etree from openerp import api, models, tools from openerp.tools import safe_eval from openerp.addons.web.http import request +from odoo.modules.module import get_resource_path import json import logging @@ -175,6 +176,7 @@ class ir_QWeb(models.AbstractModel, QWeb): remains.append(el) elif isinstance(el, html.HtmlElement): href = el.get('href', '') + src = el.get('src', '') atype = el.get('type') media = el.get('media') @@ -186,10 +188,17 @@ class ir_QWeb(models.AbstractModel, QWeb): atype = 'text/less' if atype not in ('text/less', 'text/sass'): atype = 'text/css' - files.append({'atype': atype, 'url': href, 'content': el.text, 'media': media}) + path = filter(None, href.split('/')) + filename = get_resource_path(*path) + files.append({'atype': atype, 'url': href, 'filename': filename, 'content': el.text, 'media': media}) elif el.tag == 'script': atype = 'text/javascript' - files.append({'atype': atype, 'url': el.get('src', ''), 'content': el.text, 'media': media}) + if src: + path = filter(None, src.split('/')) + filename = get_resource_path(*path) + else: + filename = None + files.append({'atype': atype, 'url': src, 'filename': filename, 'content': el.text, 'media': media}) else: remains.append(html.tostring(el)) else: