On 6/4/13 9:52 AM, Jason Orendorff wrote:
On Tue, Jun 4, 2013 at 11:44 AM, Jeff Morrison <lbljef...@gmail.com <mailto:lbljef...@gmail.com>> wrote:

    FWIW this is what we have been doing at Facebook for a while now
    (over a year), and it's worked pretty well for us.

    We use a require() function for pulling in dependencies. We then
    statically extract all require() callsites for a given module
    during our build step, and use that to identify the
    dependency-graph of a file (for packaging, etc).


Thanks, this is a useful data point. Does your require() execute stuff lazily, on demand? How much time does that save on startup (and are there other benefits)?
require() is a synchronous call in to our module system, and we don't execute a given module until all of its require() dependencies have been downloaded.

90% of the time we place all of our require()s at the top of the file (for grokkability/style reasons mostly), but we have done several experiments that show that evaluation time of JS in certain critical scenarios is a measurable bottleneck at scale. We've also shown engagement wins from optimizing said scenarios by deferring execution of 'less' important dependencies until they are needed. Contrived example:

var importantDep = require('importantDep');

class Foo extends importantDep {
  bar() {
    var lazyDep = require('lazyDep');
    lazyDep.baz();
  }
}

exports.Foo = Foo;

Here, the loader understands that this module has two dependencies "importantDep" and "lazyDep" and it downloads both before executing the module. However, we don't "force execution" of the lazyDep module until someone comes along and calls the Foo.prototype.bar function.

More realistic scenarios where we have employed this kind of optimization include initial page loads (especially on slower devices such as older mobile phones), our platform widgets such as the like button, etc.

In general, it is true that it should not be the common case to optimize these kinds things, but the language should still allow for such optimizations when they arise.

-j

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to