Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Will it double-fetch? Browser behavior with `module` / `nomodule` scripts

Testing double-fetching of module/nomodule JS code (including the Safari hack)

<script type="module" src="module.js"></script>
<script nomodule src="nomodule.js"></script>

Test page: https://jg-testpage.github.io/es-modules/module-nomodule/

IE/Edge Firefox Chrome Safari fetches module fetches nomodule executes
15- 59- 55- 10.0- v v nomodule
16 10.1/3 v v module
17-18 double! v module
56-60 v nomodule
60+ 61+ 11.0+* v module

Summary:

  • no browser does double execution (provided the Safari hack)
  • modern Chrome and Firefox never fetch more than necessary
  • ⚠ Safari <11 may or may not double fetch (even with the hack); it does not on small test pages, but in real complex pages it does (it seems deterministic, but not clear what's the exact trigger)
  • ⚠ Safari 11+ may still double fetch in some cases (see https://bugs.webkit.org/show_bug.cgi?id=194337)
  • pre-2018 browsers do double fetches
  • latest Edge does triple fetch (2x module + 1x nomodule)
@AndrewGibson27

This comment has been minimized.

Copy link

AndrewGibson27 commented Jan 23, 2020

Webkit has patched the Safari 11+ double-fetch bug: https://bugs.webkit.org/show_bug.cgi?id=194337

@jakub-g

This comment has been minimized.

Copy link
Owner Author

jakub-g commented Jan 31, 2020

👍 thx for the comment @AndrewGibson27. Hopefully this makes it into Safari 13.1 (for now it's in Technical Preview only)

@indexzero

This comment has been minimized.

Copy link

indexzero commented Feb 7, 2020

Was your PR to caniuse (awesome btw – super helpful for me) supposed to show green for Safari 11-13 @jakub-g? Based on the Webkit comment above it seems like caniuse for es6 modules should be showing Yellow:

Screen Shot 2020-02-07 at 6 01 00 AM

My gut is saying regression in caniuse, but I wanted surface it your way since it was your contribution originally.

@jakub-g

This comment has been minimized.

Copy link
Owner Author

jakub-g commented Feb 20, 2020

@indexzero I think I made PR to caniuse before I found out Safari 11+ double fetching, not sure. My PR touches only Edge.

Agree there's inconsistency - Edge 16-18 and Safari 10.1 should be marked with same color on caniuse (whether or yellow or green, I can't tell; not sure what is the meaning; probably yellow up to Edge 18 and Safari 13/ ios 13.2 inclusive, due to double fetching?)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.