[whatwg] Proposal for separating script downloads and execution

Kyle Simpson getify at gmail.com
Thu Feb 17 11:38:45 PST 2011


>> Do you have any example where hundreds of megabytes of JavaScript is
>> being loaded onto pages? Even "tens of megabytes" seems quite
>> extraordinary.
>
> Think 10,000 <script> elements all pointing to the same 25KB script.  If 
> you're forced to preload the script at src-set time, that's 25MB of data.
>
> And if the argument is that the scripts can share the data, I don't see 
> what guarantees that.

I don't know of any browsers which are set to download more than 8 parallel 
connections. I can't imagine that you'd have 10,000 separate downloads of 
the same resource. Depending on race conditions, you might get a few extra 
requests in before the item was cached (if it caches). But, once the item is 
in the cache, any additional identical requests for that element should be 
pulling from the cache (from a network-request-level, that is), right? If 
they request a script 10,000 times and the script doesn't cache, or its 
contents are all different, than yeah, that page's resource utilization is 
going to already be crazy abnormally high... and will potentially be 
exacerbated (memory-wise) by the preloading functionality in question.

The question becomes, can the browser create a unique in-memory "cache" 
entry for each distinct script contents' processing, such that each script 
element has a pointer to its appropriate copy of the ready-to-execute script 
contents, without duplication? I can't imagine the browser would need 
separate copies for identical script contents, but perhaps I'm missing 
something that prevents it from doing the uniqueness caching. I know very 
little about the inner workings of the browser, so I won't go any further in 
guessing there.

Even if they can't , what it means is, these edge cases with 10,000 script 
requests might get exponentially bad. But it still seems like the normal 
majority cases will perform roughly the same, if not better. Or am I missing 
something?


> Doing that while obeying HTTP semantics might be pretty difficult if you 
> don't have very low-level control over your network layer.

I'm not sure what you mean by "HTTP semantics" if it isn't about caching. 
But I don't think there'd be any reason that this proposal would be 
suggesting any different handling of resources (from a HTTP semantics, 
network-request-layer perspective) than is already true of script tags. Can 
you elaborate on how the current network-resource handling semantics of 
script tags would create HTTP related issues if preloading were happening?

I wonder how IE is handling this, seemingly without too many issues (since 
they've been doing it forever).

In other words... if I loop through and create 10,000 script elements (no 
DOM append), and that causes 10,000 (or so) requests for that resource... 
how is that different/worse than if I loop through and create 10,000 script 
elements that I append to the DOM? Won't they have roughly the same impact 
on HTTP-layer loading, caching, etc?


> Sure.  That doesn't mean we shouldn't worry about the edge cases.  It 
> might be we decide to ignore them, after careful consideration.  But we 
> should consider them.

OK, fair enough. I agree it's worthwhile to consider them. Sorry if I 
overreacted too strongly to you bringing it up.


> Yes, and I'm on record saying that I need to think about my users and 
> protecting them from the minority of incompetent or malicious web 
> developers.  We just have slightly different goals here.

Also a fair statement.


>> To my knowledge, that process worked ok, and I think it's a decent model 
>> for going forward.
>
> Just to be clear, that process, on our end, was a huge engineering-time 
> sink.  Several man-months were wasted on it.  We would very much like to 
> avoid having to repeat that experience if at all possible.

It's a shame that it's being viewed as "wasted". With respect to 
"async=false", there was already going to be some site breakage that cropped 
up with Firefox's script-ordering change, regardless of if I had jumped in 
to complain about the LABjs breakage and the proposal for "async=false". 
And, while "async=false" took a lot of extra time to discuss and agree on, 
it sure seemed like it ended up being the solution to all those other sites 
problems. I'm obviously not on the Mozilla team, so perhaps I'm unaware of 
additional burdens that process placed on the team.

I do think it's fair to say that the magnitude of impact for changing script 
ordering semantics and changing script network-loading semantics are not 
really the same. But yes, I'm sure there would be a few sites who broke in 
some random way -- there always is.

Is it better to break a few sites so that many other sites can start 
improving performance? I dunno, but I tend to think it's worth considering 
that tradeoff. I've heard a similar argument made earlier in this thread.


> Does IE obey HTTP semantics for the preloads?  Has anyone does some really 
> careful testing of IE's actual behavior here?

I've done a lot of careful testing of IE's actual behavior here. But I'm not 
sure I know exactly what HTTP semantics I should be looking for. If you 
would be able to share some specific questions to probe about IE's 
implementation/behavior, I'm more than happy to extend my existing tests to 
figure out the answers.

To be clear, if we find a significant flaw in IE's implementation, and that 
sheds new light on this whole proposal process, I'm all for finding it. But 
in my testing thus far, using this feature as prescribed (in a script loader 
use-case), the functionality IE has seems quite sane and useful.


--Kyle

 




More information about the whatwg mailing list