royale-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harbs <harbs.li...@gmail.com>
Subject Re: Struggling with resource files
Date Mon, 02 Oct 2017 22:40:29 GMT
> IMO, it is just a database.

That statement triggered a thought: Why not use sessionStorage or localStorage as a “ResourceManager”
in JS?[1]

Alternatively IndexedDB.[2] (although sessionStorage is probably sufficient).

Using localStorage instead of sessionStorage might enable caching.

[1]https://developer.mozilla.org/en-US/docs/Web/API/Storage <https://developer.mozilla.org/en-US/docs/Web/API/Storage>
[2]https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API <https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API>
> On Oct 2, 2017, at 9:07 PM, Alex Harui <aharui@adobe.com.INVALID> wrote:
> 
> The Flash runtime doesn't know anything about resources.  In regular Flex,
> and Resource Module is a SWF full of compiled Resource Bundles which are
> classes that wrap the resource data.  IMO, that's too heavy for strings
> and I believe there are many apps where the only things that change per
> locale are strings, especially if images are not embedded and loaded via
> URLs.
> 
> So, for Royale, for only Strings, I would propose that we teach the
> compiler to take the same arguments, but maybe produce JSON or embedded
> .properties files.  Not sure which one or both until we see how it works.
> 
> ClassReference already works in CSS files, so I suspect we can make it
> work for Resources, but once you introduce ClassReference, JSON and or
> embedded strings aren't sufficient, so I think we'd have to produce a .js
> file instead.
> 
> A ResourceManager that is fully equivalent of the regular Flex
> ResourceManager is not PAYG.  That's why I earlier suggested different
> implementations that are PAYG.  The smallest would count on all resources
> being inlined.  A fancier one would support loadable resources.
> 
> Today, the CSS information in each SWC is collected at compile time.  Type
> Selectors are examined to make sure the class they represent is being
> linked into the app, and all of that information is encoded.  CSS
> implementations like SimpleCSSValuesImpl know how to find that encoded
> information and turn it into data structures.  I think that is PAYG,
> although we could experiment with it doing lazy loading or just-in-time
> parsing of the encoded data.
> 
> I think we'd do roughly the same thing for Resources.  Encode the data as
> embedded Strings and/or JSON.  Not sure we'd need to wrap a bead around
> each bundle or locale.  IMO, it is just a database.  And then
> SimpleCSSAndLocalesValuesImpl would know how to look for that data.
> 
> Of course, I could be wrong...
> -Alex
> 
> On 10/2/17, 12:24 AM, "Harbs" <harbs.lists@gmail.com <mailto:harbs.lists@gmail.com>>
wrote:
> 
>> Thanks for the links.
>> 
>> Some thoughts/questions:
>> 
>> The loading of the resource modules is something handled by the Flash
>> runtime, or is that internal to Flex?
>> 
>> Currently, do the compiler options do anything for the JS side of things?
>> 
>> If I understand correctly, the “inlining” option adds the resources to
>> the ResourceManager. I’m suggesting the ResourceManager is not
>> necessarily needed if locales are configured at compile time. A more PAYG
>> way would be to inline the resource directly into a variable of a bead
>> which knows what to do with the resource. I don’t see any current
>> annotation which could do that (either in MXML or AS).
>> 
>> I don’t see how class references (and image references) could work in
>> Royale (in JS). If we could get that working, it would be huge.
>> 
>> Harbs
>> 
>>> On Oct 2, 2017, at 9:57 AM, Alex Harui <aharui@adobe.com.INVALID> wrote:
>>> 
>>> See the Adobe docs: [1][2]
>>> 
>>> I think the functionality you are looking forward is supported by the
>>> compiler.  The compiler already has a set of options that dictate what
>>> bundles are "inline" in the app and I think they can be re-used to
>>> output
>>> different things.
>>> 
>>> [ResourceBundle] metadata tells the compiler which bundles to link.  The
>>> compiler's -locale option dictates which language bundles for the
>>> [ResourceBundles] it saw when linking the app need to be baked into the
>>> app.  Separately, the ResourceManager in regular Flex has a way to load
>>> a
>>> SWF of other bundles.  The compiler has options to build a SWF with
>>> certain bundles.
>>> 
>>> For JS, JSON might be a good format for a "ResourceModule".
>>> 
>>> I've seen the packages be accepted by Flash Builder on both Mac and
>>> Windows.  There's a separate thread about when to merge packaging into
>>> develop, and how to do the "big rename".
>>> 
>>> Later,
>>> -Alex
>>> 
>>> [1] 
>>> 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob>
>>> e.com <http://e.com/>%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data=
>>> 02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17
>>> 8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1
>>> uciPIthGxL%2FF5H8%3D&reserved=0
>>> -7f3a.html
>>> [2] 
>>> 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob>
>>> e.com <http://e.com/>%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data=
>>> 02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17
>>> 8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1
>>> uciPIthGxL%2FF5H8%3D&reserved=0
>>> -7f3c.html
>>> 
>>> On 10/1/17, 11:34 PM, "Harbs" <harbs.lists@gmail.com> wrote:
>>> 
>>>> I should probably spend some time to learn how resource bundles worked
>>>> in
>>>> Flex… ;-)
>>>> 
>>>> Metadata seems like a good solution, but it seems to me like there
>>>> needs
>>>> to be two sets of metadata tags. Some comments and questions I have:
>>>> 
>>>> 1. We’d need metadata tags which would just inline the resource into
>>>> the
>>>> compiled code for cases where a full-blown ResourceManager is overkill.
>>>> 2. We’d need the [ResourceBundle] tag for compiling downloadable
>>>> resource
>>>> bundles. What would that look like in Javascript? A JS file which
>>>> evaluates to the resources? A JSON file? Would default resources get
>>>> auto-included in the main JS?
>>>> 
>>>> BTW, if there’s something I can do to help you with the packaging
>>>> branch,
>>>> please let me know.
>>>> 
>>>> Harbs
>>>> 
>>>>> On Oct 2, 2017, at 2:28 AM, Alex Harui <aharui@adobe.com.INVALID>
>>>>> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>> On 10/1/17, 7:31 AM, "Harbs" <harbs.lists@gmail.com> wrote:
>>>>> 
>>>>>> I’d really like for the compiler to include resources as strings,
but
>>>>>> I’m
>>>>>> not sure what the best way to declare it is.
>>>>>> 
>>>>>> How can we declare a reference to the resource and have the compiler
>>>>>> include it?
>>>>> 
>>>>> Well, that depends...
>>>>> 
>>>>> The [ResourceBundle] metadata and the compiler's -locale option seemed
>>>>> to
>>>>> make people happy.  I don't remember any complaints about it, my only
>>>>> issue was that it didn't seem to be efficient for String-only
>>>>> resources.
>>>>> [ResourceBundle] allows the strings to be managed in separate
>>>>> .properties
>>>>> files that are packaged with a SWC.  That's probably important because
>>>>> you
>>>>> probably don't want to have to list out every component's resources as
>>>>> beads in your app.  It probably needs to be driven automatically by
>>>>> metadata.
>>>>> 
>>>>> So, if we decide to stick with it, the challenge will be to teach the
>>>>> compiler to do something different with the resource properties.
>>>>> 
>>>>> Thoughts?
>>>>> -Alex


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message