<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 19, 2014 at 4:25 PM, Ian Hickson <span dir="ltr"><<a href="mailto:ian@hixie.ch" target="_blank">ian@hixie.ch</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On Mon, 18 Aug 2014, John Barton wrote:<br>
> ><br>
</div><div>> > (For example, a graphical game might need some sprite assets to be<br>
> > loaded before it can start up. So its <script> might be marked as<br>
> > depending on an <img> element that loads that image. Or the script<br>
> > contents might have an import statement that refers to that image.)<br>
><br>
> Supporting this case seems straight-forward and can be done entirely by<br>
> the browser Loader implementation using hooks.<br>
<br>
</div>That is my hope, yes.<br>
<div><br>
<br>
> The reverse case, where a img depends on a script, is not a use case.<br>
<br>
</div>Why not? What if the image has an onmouseover handler that calls an API<br>
function defined in a module, for instance?<br></blockquote><div><br></div><div>Then the page depends on the onmouseover handler code and it has a dependency on the module. Images are leaf nodes in the dependency tree. </div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div><br>
<br>
> > > > Or indeed even when scripting is enabled, how would you use it to<br>
> > > > mark one non-loaded script as dependent on another non-loaded<br>
> > > > script such that when you later ask for the former, the latter<br>
> > > > loads automatically?<br>
> > ><br>
> > > import './latter';<br>
> > ><br>
> > > It's a solved problem for scripts.<br>
> ><br>
> > The key part of my question was "non-loaded". The "import" bit is in<br>
> > the script. The script isn't loaded yet, so we can't rely on it.<br>
><br>
> <script><br>
> System.import('./former').then((former) => {<br>
>   // do stuff with former, knowing './former' imported './latter'.<br>
> });<br>
> </script><br>
<br>
</div>This results in multiple RTTs. </blockquote><div><br></div><div>If you don't want multiple round trips, import from a "bundle". Then the first fetch gets all of the modules needed by ./former.</div><div>
<br></div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Also, this doesn't wait until former is<br>
needed before loading it.<br></blockquote><div><br></div><div>But the mechanisms for knowing "need" are not available to any one at this point. The problem is we don't know when to trigger the load, not what is in the load.</div>
<div><br></div><div><div>I think you are imagining a magical trigger that does not exist. This magical trigger would know "we are moving below the fold now".   If we had that trigger we could delay the load of all of the modules below the fold.  But we don't have that trigger, so there is no reason to delay sending all of the modules for the page.</div>
</div><div><br></div><div>This is a critical issue. Excluding JS what means do we have for expressing "needed"? As far as I know the list is ["Parsed"]. That is, if the resource is needed by the page we  know that when the page is parsed. When we parse a tag that specifies a resource load, we can block or not, but we have to load it because there is no other future trigger to cause the load at another time. If we had such a trigger then we could make use of it to improve loading.</div>
<div><br></div><div>There are JS events that we can handle to control loading. JS can load a bundle of modules given the root request. We might be able to express some of these declaratively and that might lead to new requirements on the JS Loader. This approach gives us the context we need to judge tradeoffs.  But we are a long way from such need at this point: we don't have the triggers nor a standard for bundling.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>
<br>
> Here we are expressing the dependency of the HTML file on the non-loaded<br>
</div>> file './former' and it depends on the non-loaded file './latter'.<br>
<br>
But you don't know that it depends on ./latter until you've fetched<br>
./former, by which time it's too late.<br></blockquote><div><br></div><div>Maybe I mis-interpreted your scenario. Sounds like you want 'bundle' or package loading. That subject should be part of the ES spec in my opinion but so far we can only do ad-hoc implementations.  I'm unsure why you seem to be against this solution to your use case.</div>
<div><br></div><div>jjb</div></div></div></div>