{"push_id":2132832233,"size":15,"distinct_size":1,"ref":"refs/heads/devel","head":"981fb3c88dd42870382242a964d8db0717f24aa5","before":"27ed9bc2e8a71df0263bcf811ddb183d19d41ba1","commits":[{"sha":"80e8b26506051931c37ebdc2b0b4d1f6a04cf61e","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Allow Meteor.startup to work in isopackets and build plugins.\n\nSince global.__meteor_bootstrap__ is not defined in plugins, the callback\nwill simply be called immediately.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/80e8b26506051931c37ebdc2b0b4d1f6a04cf61e"},{"sha":"21275011bdb76d28db4ccd9556d9507e78d94f1d","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Remove underscore from http package, and use modules.\n\nI replaced the ecmascript package with just the modules package so that\necmascript and its dependencies can depend on http without creating\npackage dependency cycles.\n\nI also took this opportunity to upgrade the `request` npm dependency to\nits latest version (2.83.0), and removed the `deprecated.js` file, which\nused to define `Meteor.http`.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/21275011bdb76d28db4ccd9556d9507e78d94f1d"},{"sha":"80e564e9c31fa819905c7cfe5bc64a93446259da","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Remove underscore from url package, and use modules.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/80e564e9c31fa819905c7cfe5bc64a93446259da"},{"sha":"e24eec2084ee37e2a27f75057b5ae596fdaf72b6","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Support fetching dynamic modules via HTTP POST requests.\n\nEver since Meteor 1.5 first shipped, dynamic modules have been fetched\nover a WebSocket, which is appealing because sockets have very little\nlatency and metadata overhead per round-trip.\n\nHowever, using a WebSocket requires first establishing a socket connection\nto the server, which takes time and may require a WebSocket polyfill.\n\nAn even more subtle problem is that we cannot use dynamic imports in any\nof the code that implements the ddp-client package, as long as the\ndynamic-import package depends on ddp-client.\n\nBy switching from WebSockets to HTTP POST requests, this commit radically\nreduces the dependencies of the dynamic-import package, while preserving\n(or even exceeding) the benefits of socket-based dynamic module fetching:\n\n1. The client makes a single HTTP POST request for the exact set of\n   dynamic modules that it needs, which is much cheaper/faster than making\n   several/many HTTP requests in parallel, with or without HTTP/2.\n\n2. Because the client uses a permanent cache (IndexedDB) to avoid\n   requesting any modules it has ever previously received, the lack of\n   HTTP caching for POST requests is not a problem.\n\n3. Because the HTTP response contains all the requested dynamic modules in\n   a single JSON payload, gzip compression works across modules, which\n   produces a smaller total response size than if each individual module\n   was compressed by itself.\n\n4. Although HTTP requests have more latency than WebSocket messages, the\n   ability to make HTTP requests begins much sooner than a WebSocket\n   connection can be established, which more than makes up for the latency\n   disadvantage.\n\n5. HTTP requests are a little easier to inspect and debug in the dev tools\n   than WebSocket frames.\n\n6. The new /__dynamicImport HTTP endpoint is a raw Connect/Express-style\n   endpoint, so it bypasses the Meteor method-calling system altogether,\n   which eliminates some additional overhead.\n\n7. Fetching dynamic modules no longer competes with other WebSocket\n   traffic such as DDP and Livedata.\n\n8. Although the implementation of the /__dynamicImport endpoint is a bit\n   too complicated to allow serving dynamic modules from a CDN, that\n   remains a possibility for future experimentation. In other words, how\n   modules are fetched is still just an implementation detail of the\n   `meteorInstall.fetch` callback.\n\n9. As with the WebSocket implementation, the module server is totally\n   stateless, so it should be easy to scale up if necessary.\n\nI wish I had appreciated the advantages of an HTTP-based implementation\nsooner, but I think the transition will be pretty seamless, since the new\nimplementation is completely backwards compatible with the old.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/e24eec2084ee37e2a27f75057b5ae596fdaf72b6"},{"sha":"d073990a3afd4f532b1d09692df9ccf8bcc0ea52","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Prune dynamic imports result tree rather than failing on error.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/d073990a3afd4f532b1d09692df9ccf8bcc0ea52"},{"sha":"a7a63cd743dc78492a374afc046d197eaa41ae3b","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Allow only server-side code to fetch dynamic server modules.\n\nEach time the server starts, the dynamic-import/server.js module creates a\nsecret key for accessing dynamic server modules, then exposes that key to\nthe server-side dynamic-import/client.js module, and no one else.\n\nIf client.setSecretKey has been called, that key will be included as a\nquery parameter in each /__dynamicImport POST request. If it matches the\nactual secret key, access is granted to the corresponding dynamic modules;\notherwise, only web.browser dynamic modules are made available.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/a7a63cd743dc78492a374afc046d197eaa41ae3b"},{"sha":"088432410c997ddb9d199cf96915eea3ab318c85","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Remove webapp and random dependencies from dynamic-import.\n\nLetting dynamic-import depend on packages that depend on ecmascript means\necmascript and its dependencies can't depend on dynamic-import. This\ncommit gives us back that flexibility.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/088432410c997ddb9d199cf96915eea3ab318c85"},{"sha":"305abbefb8e357a8512f4b062078093318e8a3ad","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Upgrade `install` to allow batching of dynamic import() requests.\n\nNow that we're using HTTP POST requests to fetch dynamic modules, it's\nmore important to make fewer requests when possible, given the higher\nlatency of HTTP requests compared to WebSocket messages.\n\nThe trick is to wait until the next tick of the event loop before actually\nsending the request, so that multiple dynamic import() calls in quick\nsuccession are treated as a single request, and all the modules they\nrequire can be returned in a single response object.\n\nFor example, we want code like this\n\n  const [\n    React,\n    ReactDOM\n  ] = await Promise.all([\n    import(\"react\"),\n    import(\"react-dom\")\n  ]);\n\nto result in one HTTP POST request for both `react` and `react-dom`, as\nwell as all their dependencies, rather than two separate requests.\nIndeed, that is what happens, since both import() calls take place in the\nsame tick of the event loop.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/305abbefb8e357a8512f4b062078093318e8a3ad"},{"sha":"bdab67274b14f2377e49f1fa20d3813c74722c67","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Talk about dynamic imports over HTTP in History.md.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/bdab67274b14f2377e49f1fa20d3813c74722c67"},{"sha":"2f3bbcde703c56376c036e8648249d2b397d2bef","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Bump dynamic-import package version to 0.3.0.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/2f3bbcde703c56376c036e8648249d2b397d2bef"},{"sha":"a80af7e064b305e1a473e9d62555cfcde7118981","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Move dynamic-import dependency from meteor-base to ecmascript.\n\nNow that dynamic-import no longer depends indirectly on ecmascript, the\necmascript package can finally guarantee support for dynamic `import()`,\nas it rightfully should.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/a80af7e064b305e1a473e9d62555cfcde7118981"},{"sha":"d0566bbb186a1559b7079033fb4eea218c58847b","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Make bundle-visualizer use HTTP instead of Meteor.call.\n\nIf you're trying to visualize the bundle of an application that does not\nuse ddp-client, it's annoying if bundle-visualizer pulls in all those\ndependencies just to support itself.\n\ncc @abernix","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/d0566bbb186a1559b7079033fb4eea218c58847b"},{"sha":"b81872b01a223f1f3b5c2c94be01072da32b4d09","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Remove weak dependency on browser-policy-common from dynamic-import.\n\nEven a weak dependency affects the load order of packages by forcing the\ndepended-on package to load before the dependent package. Waiting until\nMeteor.startup to check for Package[\"browser-policy-common\"] dynamically\ndoes not have this problem.","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/b81872b01a223f1f3b5c2c94be01072da32b4d09"},{"sha":"1c2d6c6382723e7b9fa1fb465cbc386ad7cf80b7","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@meteor.com"},"message":"Improve readability of dynamic-import helper function.\n\nPer feedback from @abernix:\nhttps://github.com/meteor/meteor/pull/9384#discussion_r151743041","distinct":false,"url":"https://api.github.com/repos/meteor/meteor/commits/1c2d6c6382723e7b9fa1fb465cbc386ad7cf80b7"},{"sha":"981fb3c88dd42870382242a964d8db0717f24aa5","author":{"name":"Ben Newman","email":"9c85637c38b80821c7bd8a03bde7b59da81ab77d@benjamn.com"},"message":"Merge pull request #9384 from meteor/dynamic-import-via-http-post\n\nSupport fetching dynamic modules via HTTP POST requests.","distinct":true,"url":"https://api.github.com/repos/meteor/meteor/commits/981fb3c88dd42870382242a964d8db0717f24aa5"}]}
{"actor":{"display_login":"benjamn"}}