Cache result of parsing macro calls which don't use text subsitution

optimising-macrocalls
jeremy@jermolene.com 2020-12-05 14:57:17 +00:00
rodzic ae5d78b4dd
commit b9ea49ad79
2 zmienionych plików z 17 dodań i 5 usunięć

Wyświetl plik

@ -55,9 +55,18 @@ MacroCallWidget.prototype.execute = function() {
// Are we rendering to HTML?
if(this.renderOutput === "text/html") {
// If so we'll return the parsed macro
var parser = this.wiki.parseText(this.parseType,text,
{parseAsInline: !this.parseTreeNode.isBlock});
parseTreeNodes = parser ? parser.tree : [];
// Check if we've already cached parsing this macro
var parser;
if(variableInfo.srcVariable && variableInfo.srcVariable.parser) {
parser = variableInfo.srcVariable.parser;
} else {
parser = this.wiki.parseText(this.parseType,text,
{parseAsInline: !this.parseTreeNode.isBlock});
if(variableInfo.isCacheable && variableInfo.srcVariable) {
// variableInfo.srcVariable.parser = parser;
}
}
var parseTreeNodes = parser ? parser.tree : [];
// Wrap the parse tree in a vars widget assigning the parameters to variables named "__paramname__"
var attributes = {};
$tw.utils.each(variableInfo.params,function(param) {

Wyświetl plik

@ -113,7 +113,8 @@ Widget.prototype.getVariableInfo = function(name,options) {
// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)
if(parentWidget && name in parentWidget.variables) {
var variable = parentWidget.variables[name],
value = variable.value,
originalValue = variable.value,
value = originalValue,
params = this.resolveVariableParameters(variable.params,actualParams);
// Substitute any parameters specified in the definition
$tw.utils.each(params,function(param) {
@ -125,7 +126,9 @@ Widget.prototype.getVariableInfo = function(name,options) {
}
return {
text: value,
params: params
params: params,
srcVariable: variable,
isCacheable: originalValue === value
};
}
// If the variable doesn't exist in the parent widget then look for a macro module