On Dec 20, 2014, at 2:02 PM, Caridy Patino wrote:

> John, think of <script defer src="mod.js"></script>.
> 
> For <script type=module>, async is implicit.

What if you have a series of modules that need to be evaluated in sequential 
order?  (Remember, that a module with no imports is the module worlds  
equivalent to a simple  sequential script.).  eg:

<script type="module">
   window.sequence = 10;
   console.log(window.sequence);
/script>
script type="module">
   console.log(" should be 11: " + ++window.sequence);
</script>
<script type="module">
   console.log(" shoud be 12: " + ++window.sequence);
</script>

Allen









> 
> Sent from my iPhone
> 
> On Dec 20, 2014, at 3:01 PM, John Barton <[email protected]> wrote:
> 
>> 
>> 
>> On Sat, Dec 20, 2014 at 10:54 AM, Matthew Robb <[email protected]> 
>> wrote:
>> 
>> On Sat, Dec 20, 2014 at 1:50 PM, Caridy Patino <[email protected]> wrote:
>> what make you think this proposal implies blocking?
>> 
>> ​I think he was reading your examples using "require()" and thinking you 
>> were suggesting that the semantics would match.​
>> 
>> Indeed that is what I was thinking.  
>> 
>> A non-blocking <module> tag is a poor match to HTML, a declarative language 
>> where order of tags means order of parsing and rendering. Giving up this 
>> fundamental characteristic of HTML, in the long-shot effort to improve the 
>> apparent load time for some amateur Web sites, has become dogmatic so I 
>> suppose there is no value in discussing it. 
>> 
>> A non-blocking <module> tag would also prevent experienced developers from 
>> controlling rendering through JS action. That means they will need to use 
>> <script> tags which we'd like to deprecate or we'd have to have a blocking 
>> form of <module>.  We'll probably end up with the latter choice.
>> 
>> On the node side, require() is curiously synchronous given node's heavy 
>> emphasis on asynchronous IO. As with the browser <script> tag, the 
>> synchronous require() is the best choice for simplicity.  But the 
>> synchronous semantics prevents optimizations on both platforms. An 
>> asynchronous root-module loading API in a next generation system opens new 
>> opportunities.  I hope and expect we'll end up with an async option on node.
>> 
>> On balance I think a non-blocking <module> tag with optional blocking is 
>> reasonable.   
>> 
>> However, the description of the browser loading as "require()" within a 
>> asynchronous <module> tag is really a complete departure from all the 
>> previous discussions.  A system based on require() is not statically 
>> analyzable. I could go on, but really a shift to this extreme seems so 
>> unlikely that there must be some misunderstanding.  Rather I assume that the 
>> content of the <module> tag will be ES6 code as we know it now and that we 
>> will have an additional dynamic loading API that will be asynchronous much 
>> like we had earlier this year.  Exactly the same solution would work in 
>> node. 
>> 
>> In other words, <script> and require() would not be used in future code, an 
>> async API would be available for root loading, and most developers most of 
>> the time would write synchronous code manipulating modules contents.  If we 
>> are not heading in this direction I hope there will be more discussions in 
>> public.
>> 
>> jjb
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to