mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
imp: qweb compiler now condenses whitespaces
This is a pretty big breaking change: the html output by qweb is now different. The main goal is to optimize the compiled templates: - condense all consecutive whitespaces into a single spaces - if possible, drop completely some text nodes, based on the following heuristic: if a text node is only composed of whitespaces, and contains at least one linebreak, then it can be dropped. This leads in my benchmark test to an improvement of about 10%, in rendering speed and in memory consuption. Note: whitespace here means anything that matches the \s regexp: newlines, tabs, ... close #8
This commit is contained in:
@@ -921,3 +921,48 @@ describe("special cases for some boolean html attributes/properties", () => {
|
||||
renderToString(qweb, "test", { flag: true });
|
||||
});
|
||||
});
|
||||
|
||||
describe("whitespace handling", () => {
|
||||
test("white space only text nodes are condensed into a single space", () => {
|
||||
qweb.addTemplate("test", `<div> </div>`);
|
||||
const result = renderToString(qweb, "test");
|
||||
expect(result).toBe(`<div> </div>`);
|
||||
});
|
||||
|
||||
test("consecutives whitespaces are condensed into a single space", () => {
|
||||
qweb.addTemplate("test", `<div> abc </div>`);
|
||||
const result = renderToString(qweb, "test");
|
||||
expect(result).toBe(`<div> abc </div>`);
|
||||
});
|
||||
|
||||
test("whitespace only text nodes with newlines are removed", () => {
|
||||
qweb.addTemplate(
|
||||
"test",
|
||||
`<div>
|
||||
<span>abc</span>
|
||||
</div>`
|
||||
);
|
||||
const result = renderToString(qweb, "test");
|
||||
expect(result).toBe(`<div><span>abc</span></div>`);
|
||||
});
|
||||
|
||||
test("nothing is done in pre tags", () => {
|
||||
qweb.addTemplate("test", `<pre> </pre>`);
|
||||
const result = renderToString(qweb, "test");
|
||||
expect(result).toBe(`<pre> </pre>`);
|
||||
|
||||
const pretagtext = `<pre>
|
||||
some text
|
||||
</pre>`;
|
||||
qweb.addTemplate("test2", pretagtext);
|
||||
const result2 = renderToString(qweb, "test2");
|
||||
expect(result2).toBe(pretagtext);
|
||||
|
||||
const pretagwithonlywhitespace = `<pre>
|
||||
|
||||
</pre>`;
|
||||
qweb.addTemplate("test3", pretagwithonlywhitespace);
|
||||
const result3 = renderToString(qweb, "test3");
|
||||
expect(result3).toBe(pretagwithonlywhitespace);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user