Skip to content

PERF: Introduce lazyHash and update PluginOutlet calls to use it #32823

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .template-lintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ module.exports = {
"require-button-type": false,
"no-action": true,
"require-strict-mode": true,
"discourse/plugin-outlet-lazy-hash": false,
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Form from "discourse/components/form";
import PluginOutlet from "discourse/components/plugin-outlet";
import icon from "discourse/helpers/d-icon";
import iconOrImage from "discourse/helpers/icon-or-image";
import lazyHash from "discourse/helpers/lazy-hash";
import routeAction from "discourse/helpers/route-action";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
Expand Down Expand Up @@ -555,7 +556,7 @@ export default class AdminBadgesShow extends Component {

<PluginOutlet
@name="admin-above-badge-buttons"
@outletArgs={{hash badge=this.buffered form=form}}
@outletArgs={{lazyHash badge=this.buffered form=form}}
/>

<form.Actions>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Component from "@glimmer/component";
import { cached, tracked } from "@glimmer/tracking";
import { concat, hash } from "@ember/helper";
import { concat } from "@ember/helper";
import { action } from "@ember/object";
import { service } from "@ember/service";
import { eq } from "truth-helpers";
Expand All @@ -9,6 +9,7 @@ import ConditionalLoadingSection from "discourse/components/conditional-loading-
import Form from "discourse/components/form";
import GroupSelector from "discourse/components/group-selector";
import PluginOutlet from "discourse/components/plugin-outlet";
import lazyHash from "discourse/helpers/lazy-hash";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";
import WebhookEventChooser from "admin/components/webhook-event-chooser";
Expand Down Expand Up @@ -260,7 +261,7 @@ export default class AdminConfigAreasWebhookForm extends Component {
<PluginOutlet
@name="web-hook-fields"
@connectorTagName="div"
@outletArgs={{hash model=this.webhook}}
@outletArgs={{lazyHash model=this.webhook}}
/>

<form.Field
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { service } from "@ember/service";
import DToggleSwitch from "discourse/components/d-toggle-switch";
import PluginOutlet from "discourse/components/plugin-outlet";
import icon from "discourse/helpers/d-icon";
import lazyHash from "discourse/helpers/lazy-hash";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";
import SiteSetting from "admin/models/site-setting";
Expand Down Expand Up @@ -82,7 +83,7 @@ export default class AdminPluginsListItem extends Component {
<PluginOutlet
@name="admin-plugin-list-name-badge-after"
@connectorTagName="span"
@outletArgs={{hash plugin=@plugin}}
@outletArgs={{lazyHash plugin=@plugin}}
/>
</div>
<div class="d-admin-row__overview-author admin-plugins-list__author">
Expand All @@ -109,7 +110,7 @@ export default class AdminPluginsListItem extends Component {
<div class="plugin-version">
<PluginOutlet
@name="admin-plugin-list-item-version"
@outletArgs={{hash plugin=@plugin}}
@outletArgs={{lazyHash plugin=@plugin}}
>
{{@plugin.version}}<br />
<PluginCommitHash @plugin={{@plugin}} />
Expand All @@ -122,7 +123,7 @@ export default class AdminPluginsListItem extends Component {
</div>
<PluginOutlet
@name="admin-plugin-list-item-enabled"
@outletArgs={{hash plugin=@plugin}}
@outletArgs={{lazyHash plugin=@plugin}}
>
{{#if @plugin.enabledSetting}}
<DToggleSwitch
Expand All @@ -137,7 +138,7 @@ export default class AdminPluginsListItem extends Component {
<td class="d-admin-row__controls admin-plugins-list__settings">
<PluginOutlet
@name="admin-plugin-list-item-settings"
@outletArgs={{hash plugin=@plugin}}
@outletArgs={{lazyHash plugin=@plugin}}
>
{{#if this.showPluginSettingsButton}}
{{#if @plugin.useNewShowRoute}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import Component from "@glimmer/component";
import { cached, tracked } from "@glimmer/tracking";
import { hash } from "@ember/helper";
import { action } from "@ember/object";
import didInsert from "@ember/render-modifiers/modifiers/did-insert";
import { schedule } from "@ember/runloop";
import { service } from "@ember/service";
import { eq, or } from "truth-helpers";
import Form from "discourse/components/form";
import PluginOutlet from "discourse/components/plugin-outlet";
import lazyHash from "discourse/helpers/lazy-hash";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";
import ValueList from "admin/components/value-list";
Expand Down Expand Up @@ -250,7 +250,7 @@ export default class AdminUserFieldsForm extends Component {

<PluginOutlet
@name="after-admin-user-fields"
@outletArgs={{hash userField=@userField form=form}}
@outletArgs={{lazyHash userField=@userField form=form}}
/>

<form.Actions>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { Input } from "@ember/component";
import { hash } from "@ember/helper";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import { htmlSafe } from "@ember/template";
import PluginOutlet from "discourse/components/plugin-outlet";
import concatClass from "discourse/helpers/concat-class";
import icon from "discourse/helpers/d-icon";
import lazyHash from "discourse/helpers/lazy-hash";
import escape from "discourse/lib/escape";
import { iconHTML } from "discourse/lib/icon-library";
import { i18n } from "discourse-i18n";
Expand Down Expand Up @@ -88,7 +88,7 @@ export default class ThemesListItem extends Component {
<PluginOutlet
@name="admin-customize-themes-list-item"
@connectorTagName="span"
@outletArgs={{hash theme=@theme}}
@outletArgs={{lazyHash theme=@theme}}
/>
</span>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Component from "@ember/component";
import { hash } from "@ember/helper";
import CustomHtml from "discourse/components/custom-html";
import PluginOutlet from "discourse/components/plugin-outlet";
import icon from "discourse/helpers/d-icon";
import dashIfEmpty from "discourse/helpers/dash-if-empty";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";

export default class VersionChecks extends Component {
Expand Down Expand Up @@ -150,7 +150,7 @@ export default class VersionChecks extends Component {

<PluginOutlet
@name="admin-upgrade-header"
@outletArgs={{hash versionCheck=this.versionCheck}}
@outletArgs={{lazyHash versionCheck=this.versionCheck}}
/>
</div>
</template>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import icon from "discourse/helpers/d-icon";
import formatDate from "discourse/helpers/format-date";
import formatUsername from "discourse/helpers/format-username";
import htmlSafe from "discourse/helpers/html-safe";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import InlineEditCheckbox from "admin/components/inline-edit-checkbox";
import ThemeSettingEditor from "admin/components/theme-setting-editor";
Expand Down Expand Up @@ -55,7 +56,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-customize-themes-show-top"
@connectorTagName="div"
@outletArgs={{hash theme=@controller.model}}
@outletArgs={{lazyHash theme=@controller.model}}
/>
</span>

Expand Down Expand Up @@ -84,7 +85,7 @@ export default RouteTemplate(

<PluginOutlet
@name="admin-customize-theme-before-errors"
@outletArgs={{hash theme=@controller.model}}
@outletArgs={{lazyHash theme=@controller.model}}
/>

{{#each @controller.model.errors as |error|}}
Expand Down Expand Up @@ -564,7 +565,7 @@ export default RouteTemplate(

<PluginOutlet
@name="admin-customize-theme-before-controls"
@outletArgs={{hash theme=@controller.model}}
@outletArgs={{lazyHash theme=@controller.model}}
/>
<div class="theme-controls">
<a
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { hash } from "@ember/helper";
import { LinkTo } from "@ember/routing";
import RouteTemplate from "ember-route-template";
import ConditionalLoadingSection from "discourse/components/conditional-loading-section";
Expand All @@ -8,6 +7,7 @@ import basePath from "discourse/helpers/base-path";
import formatDate from "discourse/helpers/format-date";
import getUrl from "discourse/helpers/get-url";
import htmlSafe from "discourse/helpers/html-safe";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import AdminReport from "admin/components/admin-report";
import DashboardPeriodSelector from "admin/components/dashboard-period-selector";
Expand Down Expand Up @@ -223,7 +223,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-dashboard-general-bottom"
@connectorTagName="div"
@outletArgs={{hash filters=@controller.filters}}
@outletArgs={{lazyHash filters=@controller.filters}}
/>
</ConditionalLoadingSpinner>
</template>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { hash } from "@ember/helper";
import RouteTemplate from "ember-route-template";
import PluginOutlet from "discourse/components/plugin-outlet";
import getUrl from "discourse/helpers/get-url";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import AdminReport from "admin/components/admin-report";
import DashboardPeriodSelector from "admin/components/dashboard-period-selector";
Expand Down Expand Up @@ -63,7 +63,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-dashboard-moderation-bottom"
@connectorTagName="div"
@outletArgs={{hash filters=@controller.lastWeekFilters}}
@outletArgs={{lazyHash filters=@controller.lastWeekFilters}}
/>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { hash } from "@ember/helper";
import RouteTemplate from "ember-route-template";
import PluginOutlet from "discourse/components/plugin-outlet";
import htmlSafe from "discourse/helpers/html-safe";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import AdminConfigAreaCard from "admin/components/admin-config-area-card";
import AdminConfigAreaEmptyList from "admin/components/admin-config-area-empty-list";
Expand Down Expand Up @@ -60,7 +60,7 @@ export default RouteTemplate(

<PluginOutlet
@name="after-embeddable-hosts-table"
@outletArgs={{hash embedding=@controller.embedding}}
@outletArgs={{lazyHash embedding=@controller.embedding}}
/>
</template>
);
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { hash } from "@ember/helper";
import RouteTemplate from "ember-route-template";
import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item";
import DPageHeader from "discourse/components/d-page-header";
import NavItem from "discourse/components/nav-item";
import PluginOutlet from "discourse/components/plugin-outlet";
import icon from "discourse/helpers/d-icon";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import AdminPluginsList from "admin/components/admin-plugins-list";

Expand Down Expand Up @@ -64,7 +64,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-below-plugins-index"
@connectorTagName="div"
@outletArgs={{hash model=@controller.model}}
@outletArgs={{lazyHash model=@controller.model}}
/>
</span>
</div>
Expand Down
5 changes: 3 additions & 2 deletions app/assets/javascripts/admin/addon/templates/user-badges.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import UserBadge from "discourse/components/user-badge";
import ageWithTooltip from "discourse/helpers/age-with-tooltip";
import avatar from "discourse/helpers/avatar";
import icon from "discourse/helpers/d-icon";
import lazyHash from "discourse/helpers/lazy-hash";
import { i18n } from "discourse-i18n";
import ComboBox from "select-kit/components/combo-box";

Expand All @@ -34,7 +35,7 @@ export default RouteTemplate(
{{else}}
<PluginOutlet
@name="badge-granter-form"
@outletArgs={{hash
@outletArgs={{lazyHash
availableBadges=@controller.availableBadges
userBadges=@controller.userBadges
user=@controller.user
Expand Down Expand Up @@ -67,7 +68,7 @@ export default RouteTemplate(

<PluginOutlet
@name="badge-granter-table"
@outletArgs={{hash
@outletArgs={{lazyHash
groupedBadges=@controller.groupedBadges
revokeBadge=@controller.revokeBadge
expandGroup=@controller.expandGroup
Expand Down
9 changes: 5 additions & 4 deletions app/assets/javascripts/admin/addon/templates/user-index.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import formatDate from "discourse/helpers/format-date";
import formatDuration from "discourse/helpers/format-duration";
import htmlSafe from "discourse/helpers/html-safe";
import i18nYesNo from "discourse/helpers/i18n-yes-no";
import lazyHash from "discourse/helpers/lazy-hash";
import routeAction from "discourse/helpers/route-action";
import { i18n } from "discourse-i18n";
import AdminEditableField from "admin/components/admin-editable-field";
Expand Down Expand Up @@ -56,7 +57,7 @@ export default RouteTemplate(
{{/if}}
<PluginOutlet
@name="admin-user-controls-after"
@outletArgs={{hash model=@controller.model}}
@outletArgs={{lazyHash model=@controller.model}}
/>
</div>

Expand All @@ -80,7 +81,7 @@ export default RouteTemplate(

<PluginOutlet
@name="admin-user-below-names"
@outletArgs={{hash user=@controller.model}}
@outletArgs={{lazyHash user=@controller.model}}
/>

{{#if @controller.canCheckEmails}}
Expand Down Expand Up @@ -319,7 +320,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-user-details"
@connectorTagName="div"
@outletArgs={{hash model=@controller.model}}
@outletArgs={{lazyHash model=@controller.model}}
/>
</span>

Expand Down Expand Up @@ -940,7 +941,7 @@ export default RouteTemplate(
<PluginOutlet
@name="after-user-details"
@connectorTagName="div"
@outletArgs={{hash model=@controller.model}}
@outletArgs={{lazyHash model=@controller.model}}
/>
</span>

Expand Down
12 changes: 8 additions & 4 deletions app/assets/javascripts/admin/addon/templates/users-list-show.gjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { concat, fn, get, hash } from "@ember/helper";
import { concat, fn, get } from "@ember/helper";
import { on } from "@ember/modifier";
import { LinkTo } from "@ember/routing";
import RouteTemplate from "ember-route-template";
Expand All @@ -17,6 +17,7 @@ import icon from "discourse/helpers/d-icon";
import formatDuration from "discourse/helpers/format-duration";
import htmlSafe from "discourse/helpers/html-safe";
import i18nYesNo from "discourse/helpers/i18n-yes-no";
import lazyHash from "discourse/helpers/lazy-hash";
import number from "discourse/helpers/number";
import rawDate from "discourse/helpers/raw-date";
import { i18n } from "discourse-i18n";
Expand Down Expand Up @@ -195,7 +196,10 @@ export default RouteTemplate(
{{/if}}
<PluginOutlet
@name="admin-users-list-thead-after"
@outletArgs={{hash order=@controller.order asc=@controller.asc}}
@outletArgs={{lazyHash
order=@controller.order
asc=@controller.asc
}}
/>

{{#if @controller.siteSettings.must_approve_users}}
Expand Down Expand Up @@ -370,7 +374,7 @@ export default RouteTemplate(

<PluginOutlet
@name="admin-users-list-td-after"
@outletArgs={{hash user=user query=@controller.query}}
@outletArgs={{lazyHash user=user query=@controller.query}}
/>

{{#if @controller.siteSettings.must_approve_users}}
Expand Down Expand Up @@ -415,7 +419,7 @@ export default RouteTemplate(
<PluginOutlet
@name="admin-users-list-icon"
@connectorTagName="div"
@outletArgs={{hash user=user query=@controller.query}}
@outletArgs={{lazyHash user=user query=@controller.query}}
/>
</div>
</div>
Expand Down
Loading
Loading