[whatwg] Global Script proposal
Sigbjorn Finne
sigbjorn.finne at gmail.com
Fri Aug 21 13:13:52 PDT 2009
Hi,
a general comment on the interesting GlobalScript proposal for helping
to structure client-side portions of a web application - have people looked
in detail at existing work & experiences made there? Like .NET's AppDomains.
cheers
--sigbjorn (sof at opera.com)
On 8/21/2009 21:47, Michael Nordman wrote:
> I'm confused about the manual loading of the script into the context? The
> original proposal called for providing a script url when creating/connecting
> to an instance of a global-script... in which case each client page
> expresses something more like...
> globalScript = new GlobalScript(scriptUrl);
> globalScript.onload = myFunctionThatGetsCalledWhenTheScriptIsLoaded;
> // some time later onload fires, if the script was already loaded, its
> called on the next time thru the message loop
>
>
> ... the system (not the client pages) keep track of how many client pages
> are concurrently accessing the same GlobalScript.
>
> On Fri, Aug 21, 2009 at 6:37 AM, Patrick Mueller <pmuellr at muellerware.org>wrote:
>
>
>> Patrick Mueller wrote:
>>
>>
>>> Time to work on some examples. This would relatively easy to prototype in
>>> something like Rhino (or my nitro_pie python wrapper for JavaScriptCore), at
>>> least API wise, so we could see what the user-land code would look like, and
>>> see it run.
>>>
>>>
>> I developed a simulator for this yesterday. My big take away is that the
>> current shape leaves users in a batteries-not-included state.
>>
>> Here's the kind of code I had to write to arrange to create a new scope and
>> load a single script in it from multiple windows. Each window would run
>> this code in it's own context.
>>
>> function loadLibrary(scopeName, script, callback) {
>> var scope = getSharedScope(scopeName);
>>
>> // script already loaded in the scope
>> if (scope.__loaded) {
>> callback(scope, scope.__callback_data);
>> }
>>
>> // script not yet done loading
>> else if (scope.__loading) {
>> scope.__onLoadedListeners.push(callback);
>> }
>>
>> // first one in! much work to do ...
>> else {
>> scope.__loading = true;
>> scope.__onLoadedListeners = [];
>>
>> function handler(callback_data) {
>>
>> scope.__loaded = true;
>> scope.__loading = false;
>> scope.__callback_data = callback_data;
>>
>> callback(scope, callback_data);
>> for (var i=0; i<scope.__onLoadedListeners.length; i++) {
>> scope.__onLoadedListeners[i](scope, callback_data);
>> }
>> }
>>
>> scope.runScript(script, {handler: handler});
>> }
>>
>> return scope;
>> }
>>
>> I changed the GlobalScript() constructor to a getSharedScope() function (at
>> the top), and the load() function to a runScript() function which takes
>> parameters including a callback function.
>>
>> I'm of two minds here.
>>
>> One is that the SharedScope proposal is really only appropriate for pages
>> with lots of JavaScript that could be shared, or special use cases where you
>> want (eventually) easy sharing between windows. As such, s smallish amount
>> of JS framework-y-ness like this isn't a show stopper. In fact, as spec'd,
>> separating out the scope and script loading, will let folks build
>> mini-frameworks for themselves fairly easily, customized to their own needs.
>>
>> On the other hand, I wonder about the potential benefits of letting more
>> people play in the space easier. The securable module work in the serverjs
>> projects it a bit easier to use out of the box. I'm not sure they have an
>> async story though, and async loading of scripts is where this stuff quickly
>> gets complicated.
>>
>> --
>> Patrick Mueller - http://muellerware.org
>>
>>
>>
>
>
More information about the whatwg
mailing list