6
6
import $ from "jquery" ;
7
7
import ko from "knockout" ;
8
8
import engine from "Magento_Ui/js/lib/knockout/template/engine" ;
9
+ import mageUtils from "mageUtils" ;
9
10
import _ from "underscore" ;
10
11
import Config from "../../config" ;
11
12
import ConfigInterface from "../../config.types" ;
@@ -19,6 +20,24 @@ import { TreeItem } from "./serialize";
19
20
let port : MessagePort = null ;
20
21
const portDeferred : JQueryDeferred < MessagePort > = $ . Deferred ( ) ;
21
22
const deferredTemplates : { [ key : string ] : JQueryDeferred < string > } = { } ;
23
+ let lastRenderId : string ;
24
+
25
+ /**
26
+ * Debounce the render call, so we don't render until the final request
27
+ */
28
+ const debounceRender = _ . debounce ( ( message : { stageId : string , tree : TreeItem } ) => {
29
+ const renderId = mageUtils . uniqueid ( ) ;
30
+ lastRenderId = renderId ;
31
+ render ( message ) . then ( ( output ) => {
32
+ // Only post the most recent render back to the parent
33
+ if ( lastRenderId === renderId ) {
34
+ port . postMessage ( {
35
+ type : "render" ,
36
+ message : output ,
37
+ } ) ;
38
+ }
39
+ } ) ;
40
+ } , 50 ) ;
22
41
23
42
/**
24
43
* Listen for requests from the parent window for a render
@@ -39,12 +58,7 @@ export default function listen(config: ConfigInterface) {
39
58
portDeferred . resolve ( port ) ;
40
59
port . onmessage = ( messageEvent ) => {
41
60
if ( messageEvent . data . type === "render" ) {
42
- render ( messageEvent . data . message ) . then ( ( output ) => {
43
- port . postMessage ( {
44
- type : "render" ,
45
- message : output ,
46
- } ) ;
47
- } ) ;
61
+ debounceRender ( messageEvent . data . message ) ;
48
62
}
49
63
if ( messageEvent . data . type === "template" ) {
50
64
const message = messageEvent . data . message ;
@@ -141,6 +155,7 @@ function render(message: {stageId: string, tree: TreeItem}) {
141
155
142
156
// Combine this event with our engine waitForRenderFinish to ensure rendering is completed
143
157
$ . when ( engine . waitForFinishRender ( ) , renderFinished ) . then ( ( ) => {
158
+ console . log ( "count " + countContentTypes ( rootContainer ) ) ;
144
159
observer . disconnect ( ) ;
145
160
ko . cleanNode ( element ) ;
146
161
const filtered : JQuery = filterHtml ( $ ( element ) ) ;
0 commit comments