[IMP] ir.qweb: cache the asset filename to improve speed

gain: 50% time per asset
This commit is contained in:
Christophe Matthieu
2016-06-14 13:12:16 +02:00
parent f336c9efdc
commit 5db7fa65fd
2 changed files with 18 additions and 8 deletions
@@ -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:
+11 -2
View File
@@ -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: