The problem is that some output might look like this:
bar.Foo.prototype.ROYALE_CLASS_INFO = { name: “Foo”. qName: “bar.Foo” };
And the minifier will rename qName in the output differently in the main app vs
the module:
In the main app:
bar.Foo..prototype.ROYALE_CLASS_INFO = { name: “Foo”. a: “bar.Foo” };
In a module:
bar.Baz..prototype.ROYALE_CLASS_INFO = { name: “Baz”. c: “bar.Baz” };
Code that accesses someObj.ROYALE_CLASS_INFO.qName in the main app will do:
Var qName = someObj.ROYALE_CLASS_INFO.a;
And that won’t work for objects in the module that are using ‘c’ for QName.
If you turn on -js-dynamic-access-unknown-members when building the SWCs, then
these patterns in the SWC will look like:
bar.Foo.prototype.ROYALE_CLASS_INFO = { name: “Foo”. ‘qName’: “bar.Foo” };
But then every user of the SWC will never get qName renamed, which wastes
bytes. So I think we want to not use -js-dynamic-access-unknown-members when
building SWCs.
So the -prevent-rename-object-keys option I added is only turned on for certain
keys when building a module or a main app that loads a module. For the simple
Module example, we only needed to prevent renaming of the following keys:
cssData, _bindings, ROYALE_CLASS_INFO, superClass_, qName
The Royale compiler copies JS files from the SWCs to bin/js-debug. What this
option does is filter each file as it is copied, modifying the code for the
keys. We’re already scanning every line in those files anyway in
GoogDepsWriter. That way folks not building apps with modules get maximum
renaming and only those needing to prevent renaming in their output can prevent
that renaming.
We’ll see if that holds up well for Roman. There was some additional hacking
in the compiler since superclass_ is in base.js and not in our SWCs, so that
file and key was special cased. Will there be more? Also I special cased
Language.is/as/closure as they are not unknown members but are not exported and
can be renamed in most apps but need to not be renamed for module and apps
loading modules.
You might find it useful to shave off a few bytes in your app where you don’t
really want ALL unknown members to not be renamed. This option can let you
specify just the list of members that matter.
HTH,
-Alex
From: Harbs <[email protected]>
Reply-To: "[email protected]" <[email protected]>
Date: Wednesday, January 12, 2022 at 2:13 PM
To: "[email protected]" <[email protected]>
Subject: Re: Compiling Modules (was Re: Load time is very slow)
Didn’t totally grok what you said.
Can you give a practical difference in when it would be used?
On Jan 12, 2022, at 7:39 PM, Alex Harui
<[email protected]<mailto:[email protected]>> wrote:
The option I added takes a list of members and post-processes. I think all
other options change what is output during the compilation and
-js-dynamic-access-unknown-members doesn’t take a list of members.
-Alex
From: Harbs <[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Date: Wednesday, January 12, 2022 at 2:30 AM
To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Subject: Re: Compiling Modules (was Re: Load time is very slow)
How is this different than -js-dynamic-access-unknown-members?
On Jan 12, 2022, at 10:04 AM, Alex Harui
<[email protected]<mailto:[email protected]>> wrote:
I added a -prevent-rename-object-keys compiler option that works as a
post-processor. It scans the js files being copied into bin/js-debug and adds
quotes around things.