DEV: Re-use main app registry for raw HBS view lookups (#15456)
da6edc1
introduced the `lookupView` method, which initialized a fresh resolver, and used it to directly look up raw-views (with no caching). This worked well, but was not a clean solution. It required initializing an entirely new resolver, and did not have any caching.
This commit updates the `helperContext` to include access to the registry, and uses it to perform raw-view lookups. As well as re-using the registry, this also means we're making use of the resolver's built-in cache.
I haven't been able to measure any noticeable performance impact from this change, but there is certainly less work being done, so it may be beneficial on older devices.
Co-authored-by: Ayke Halder <rr-it@users.noreply.github.com>
This commit is contained in:
parent
920236fc78
commit
e6ab8f5b71
|
@ -169,6 +169,10 @@ export function buildResolver(baseName) {
|
||||||
return this.customResolve(parsedName) || this._super(parsedName);
|
return this.customResolve(parsedName) || this._super(parsedName);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
resolveRawView(parsedName) {
|
||||||
|
return this.customResolve(parsedName) || this._super(parsedName);
|
||||||
|
},
|
||||||
|
|
||||||
resolveRoute(parsedName) {
|
resolveRoute(parsedName) {
|
||||||
if (parsedName.fullNameWithoutType === "basic") {
|
if (parsedName.fullNameWithoutType === "basic") {
|
||||||
return requirejs("discourse/routes/discourse", null, null, true)
|
return requirejs("discourse/routes/discourse", null, null, true)
|
||||||
|
|
|
@ -2,20 +2,6 @@ import { helperContext, registerUnbound } from "discourse-common/lib/helpers";
|
||||||
import { findRawTemplate } from "discourse-common/lib/raw-templates";
|
import { findRawTemplate } from "discourse-common/lib/raw-templates";
|
||||||
import { htmlSafe } from "@ember/template";
|
import { htmlSafe } from "@ember/template";
|
||||||
import { RUNTIME_OPTIONS } from "discourse-common/lib/raw-handlebars-helpers";
|
import { RUNTIME_OPTIONS } from "discourse-common/lib/raw-handlebars-helpers";
|
||||||
import { buildResolver } from "discourse-common/resolver";
|
|
||||||
|
|
||||||
let resolver;
|
|
||||||
|
|
||||||
function lookupView(templateName) {
|
|
||||||
if (!resolver) {
|
|
||||||
resolver = buildResolver("discourse").create();
|
|
||||||
}
|
|
||||||
|
|
||||||
return resolver.customResolve({
|
|
||||||
type: "raw-view",
|
|
||||||
fullNameWithoutType: templateName,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderRaw(ctx, template, templateName, params) {
|
function renderRaw(ctx, template, templateName, params) {
|
||||||
params = Object.assign({}, params);
|
params = Object.assign({}, params);
|
||||||
|
@ -23,7 +9,7 @@ function renderRaw(ctx, template, templateName, params) {
|
||||||
|
|
||||||
let context = helperContext();
|
let context = helperContext();
|
||||||
if (!params.view) {
|
if (!params.view) {
|
||||||
const viewClass = lookupView(templateName);
|
const viewClass = context.registry.resolve(`raw-view:${templateName}`);
|
||||||
|
|
||||||
if (viewClass) {
|
if (viewClass) {
|
||||||
params.view = viewClass.create(params, context);
|
params.view = viewClass.create(params, context);
|
||||||
|
|
|
@ -25,6 +25,7 @@ export function autoLoadModules(container, registry) {
|
||||||
site: container.lookup("site:main"),
|
site: container.lookup("site:main"),
|
||||||
session: container.lookup("session:main"),
|
session: container.lookup("session:main"),
|
||||||
topicTrackingState: container.lookup("topic-tracking-state:main"),
|
topicTrackingState: container.lookup("topic-tracking-state:main"),
|
||||||
|
registry,
|
||||||
};
|
};
|
||||||
setOwner(context, container);
|
setOwner(context, container);
|
||||||
|
|
||||||
|
@ -35,5 +36,5 @@ export function autoLoadModules(container, registry) {
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "auto-load-modules",
|
name: "auto-load-modules",
|
||||||
initialize: autoLoadModules,
|
initialize: (container) => autoLoadModules(container, container.registry),
|
||||||
};
|
};
|
||||||
|
|
|
@ -293,6 +293,7 @@ function setupTestsCommon(application, container, config) {
|
||||||
siteSettings: settings,
|
siteSettings: settings,
|
||||||
capabilities: {},
|
capabilities: {},
|
||||||
site,
|
site,
|
||||||
|
registry: app.__registry__,
|
||||||
});
|
});
|
||||||
|
|
||||||
PreloadStore.reset();
|
PreloadStore.reset();
|
||||||
|
|
Loading…
Reference in New Issue