Skip to content

Commit 719b470

Browse files
committed
MC-4014: PageBuilder Performance Is Bad With Minimal Content
- Update stage init to allow for model creation whilst Page Builder is hidden
1 parent d29c194 commit 719b470

File tree

10 files changed

+29
-39
lines changed

10 files changed

+29
-39
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/buttons/preview.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/drag-drop/sortable.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/master-format/render.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/stage.js

Lines changed: 4 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/template/content-type/preview.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
-->
77
<div class="pagebuilder-stage"
88
attr="id: id, 'data-role': 'pagebuilder-stage'"
9-
css="'pagebuilder-show-borders': showBorders, 'pagebuilder-no-user-select': !userSelect(), 'panel-collapsed': parent.panel.isCollapsed, 'interacting': interacting, 'focus-child': focusChild"
10-
data-bind="afterRender: onRender">
9+
css="'pagebuilder-show-borders': showBorders, 'pagebuilder-no-user-select': !userSelect(), 'panel-collapsed': parent.panel.isCollapsed, 'interacting': interacting, 'focus-child': focusChild">
1110
<div class="pagebuilder-stage-loading" visible="loading" >
1211
<p translate="stageLoadingMessage"></p>
1312
<span class="spinner">

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/buttons/preview.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ import events from "Magento_PageBuilder/js/events";
1010
import _ from "underscore";
1111
import {SortableOptionsInterface} from "../../binding/sortable-options";
1212
import Config from "../../config";
13-
import ContentTypeInterface from "../../content-type";
13+
import ContentTypeInterface from "../../content-type.d";
14+
import ContentTypeCollectionInterface from "../../content-type-collection.d";
1415
import createContentType from "../../content-type-factory";
1516
import Option from "../../content-type-menu/option";
1617
import {OptionsInterface} from "../../content-type-menu/option.d";
17-
import StageUpdateAfterParamsInterface from "../../stage-update-after-params.d";
1818
import ContentTypeAfterRenderEventParamsInterface from "../content-type-after-render-event-params.d";
1919
import ContentTypeDroppedCreateEventParamsInterface from "../content-type-dropped-create-event-params";
20-
import ContentTypeRedrawAfterEventParamsInterface from "../content-type-redraw-after-event-params";
2120
import PreviewCollection from "../preview-collection";
2221

2322
/**
@@ -51,23 +50,23 @@ export default class Preview extends PreviewCollection {
5150
}
5251
});
5352

54-
events.on("buttons:renderAfter", (eventData: ContentTypeAfterRenderEventParamsInterface) => {
55-
if (eventData.contentType.id === this.parent.id) {
53+
events.on("buttons:renderAfter", (args: ContentTypeAfterRenderEventParamsInterface) => {
54+
if (args.contentType.id === this.parent.id) {
5655
this.debouncedResizeHandler();
5756
}
5857
});
5958

60-
events.on("button-item:renderAfter", (eventData: ContentTypeAfterRenderEventParamsInterface) => {
61-
if (eventData.contentType.parent.id === this.parent.id) {
59+
events.on("button-item:renderAfter", (args: ContentTypeAfterRenderEventParamsInterface) => {
60+
if (args.contentType.parent.id === this.parent.id) {
6261
this.debouncedResizeHandler();
6362
}
6463
});
6564

66-
events.on("stage:updateAfter", (eventData: StageUpdateAfterParamsInterface) => {
65+
events.on("stage:updateAfter", () => {
6766
this.debouncedResizeHandler();
6867
});
6968

70-
events.on("contentType:redrawAfter", (eventData: ContentTypeRedrawAfterEventParamsInterface) => {
69+
events.on("contentType:redrawAfter", () => {
7170
this.debouncedResizeHandler();
7271
});
7372
}

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/preview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ import {OptionsInterface} from "../content-type-menu/option.d";
2323
import TitleOption from "../content-type-menu/title-option";
2424
import ContentTypeInterface from "../content-type.d";
2525
import {DataObject} from "../data-store";
26+
import {getDraggedContentTypeConfig} from "../drag-drop/registry";
2627
import {getSortableOptions} from "../drag-drop/sortable";
2728
import appearanceConfig from "./appearance-config";
2829
import ObservableObject from "./observable-object.d";
2930
import ObservableUpdater from "./observable-updater";
30-
import {getDraggedContentTypeConfig} from "../drag-drop/registry";
3131

3232
/**
3333
* @api

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/drag-drop/sortable.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,10 @@ function onSortStart(preview: Preview, event: Event, ui: JQueryUI.SortableUIPara
120120
ui.item.prev(".pagebuilder-drop-indicator").css("display", "none").addClass("hidden-drop-indicator");
121121
}
122122

123-
sortedContentType = contentTypeInstance;
124123
showDropIndicators(contentTypeInstance.config.name);
125124

125+
sortedContentType = contentTypeInstance;
126+
126127
// Dynamically change the connect with option to restrict content types
127128
$(this).sortable("option", "connectWith", getAllowedContainersClasses(contentTypeInstance.config.name));
128129
$(this).sortable("refresh");

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/master-format/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default class MasterFormatRenderer {
2121
*/
2222
public applyBindings(tree: KnockoutObservableArray<ContentTypeInterface>): Promise<string> {
2323
const element = $("<div>");
24-
return new Promise((resolve, reject) => {
24+
return new Promise((resolve) => {
2525
engine.waitForFinishRender().then(() => {
2626
ko.cleanNode(element[0]);
2727
const filtered: JQuery = filterHtml(element);

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/stage.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import PageBuilderInterface from "./page-builder.d";
2222
import buildStage from "./stage-builder";
2323
import deferred from "./utils/promise-deferred";
2424
import DeferredInterface from "./utils/promise-deferred.d";
25+
import StageUpdateAfterParamsInterface from "./stage-update-after-params";
2526

2627
export default class Stage {
2728
public parent: PageBuilderInterface;
@@ -64,12 +65,8 @@ export default class Stage {
6465
this.parent = parent;
6566
this.id = parent.id;
6667
generateAllowedParents();
67-
}
6868

69-
/**
70-
* On render build the stage and init any event listeners
71-
*/
72-
public onRender() {
69+
// Wait for the stage to be built alongside the stage being rendered
7370
Promise.all([
7471
buildStage(this, this.parent.initialValue),
7572
this.afterRenderDeferred.promise,
@@ -181,7 +178,7 @@ export default class Stage {
181178

182179
// Watch for stage update events & manipulations to the store, debounce for 50ms as multiple stage changes
183180
// can occur concurrently.
184-
events.on("stage:updateAfter", (args) => {
181+
events.on("stage:updateAfter", (args: StageUpdateAfterParamsInterface) => {
185182
if (args.stageId === this.id) {
186183
this.applyBindingsDebounce();
187184
}

0 commit comments

Comments
 (0)