Commit d8ec503
committed
Fix module loading
When V8 calls the ResolveModuleCallback that we give it, it passes the specifier
which is essentially the string given to `from`:
```
import {x} from './blah.js';
```
We were taking that specifier and giving it to the page. The page knew the
currently executing script, an thus could resolve the full URL. Given the full
URL, it could either return the JS content from its module cache or fetch
the source.
At best though, this isn't efficient. If two files import the same module, yes
we cache the src, but we still ask v8 to re-compile it. At worse, it crashes
due to resource exhaustion in the case of cyclical dependencies.
ResolveModuleCallback should instead detect that it has already loaded the
module and return the previously loaded module. Essentially, we shouldn't be
caching the JavaScript source, we should be caching the v8 module.
However, in order to do this, we need more than the specifier, which might only
be a relative path (and thus isn't unique). So, in addition to a module cache,
we now also maintain an module identifier lookup. Given a module, we can get
its full path. Thankfully ResolveModuleCallback gives us the referring module,
so we can look up that modules URL, stitch it to the specifier, and get the
full url (the unique identifier) within the JS runtime.
Need more real world testing, and a fully working example before I celebrate,
but for sites with many import, this appears to improve performance by many
orders of magnitude.1 parent 5dcc3db commit d8ec503
2 files changed
+115
-114
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | 90 | | |
98 | 91 | | |
99 | 92 | | |
| |||
119 | 112 | | |
120 | 113 | | |
121 | 114 | | |
122 | | - | |
123 | 115 | | |
124 | 116 | | |
125 | 117 | | |
| |||
147 | 139 | | |
148 | 140 | | |
149 | 141 | | |
150 | | - | |
| 142 | + | |
151 | 143 | | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
| 144 | + | |
178 | 145 | | |
179 | 146 | | |
180 | 147 | | |
| |||
473 | 440 | | |
474 | 441 | | |
475 | 442 | | |
476 | | - | |
477 | | - | |
478 | | - | |
479 | | - | |
480 | | - | |
481 | | - | |
482 | | - | |
483 | | - | |
484 | | - | |
485 | | - | |
486 | | - | |
487 | | - | |
| 443 | + | |
488 | 444 | | |
489 | 445 | | |
490 | | - | |
491 | | - | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
492 | 449 | | |
493 | | - | |
494 | | - | |
495 | | - | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
496 | 457 | | |
497 | 458 | | |
498 | 459 | | |
| |||
502 | 463 | | |
503 | 464 | | |
504 | 465 | | |
505 | | - | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
506 | 471 | | |
507 | 472 | | |
508 | 473 | | |
509 | 474 | | |
510 | 475 | | |
511 | 476 | | |
512 | 477 | | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | 478 | | |
521 | | - | |
| 479 | + | |
522 | 480 | | |
523 | 481 | | |
524 | 482 | | |
525 | 483 | | |
526 | 484 | | |
527 | | - | |
| 485 | + | |
528 | 486 | | |
529 | 487 | | |
530 | 488 | | |
531 | 489 | | |
532 | 490 | | |
| 491 | + | |
533 | 492 | | |
534 | 493 | | |
535 | 494 | | |
| |||
563 | 522 | | |
564 | 523 | | |
565 | 524 | | |
| 525 | + | |
566 | 526 | | |
567 | 527 | | |
568 | 528 | | |
| |||
1025 | 985 | | |
1026 | 986 | | |
1027 | 987 | | |
1028 | | - | |
| 988 | + | |
1029 | 989 | | |
1030 | 990 | | |
1031 | 991 | | |
1032 | | - | |
1033 | | - | |
1034 | | - | |
1035 | | - | |
1036 | | - | |
1037 | | - | |
1038 | | - | |
1039 | | - | |
1040 | | - | |
1041 | | - | |
1042 | | - | |
1043 | | - | |
1044 | | - | |
1045 | | - | |
1046 | | - | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
1047 | 998 | | |
1048 | 999 | | |
1049 | 1000 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
515 | 515 | | |
516 | 516 | | |
517 | 517 | | |
| 518 | + | |
518 | 519 | | |
519 | 520 | | |
520 | 521 | | |
| |||
572 | 573 | | |
573 | 574 | | |
574 | 575 | | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
575 | 586 | | |
576 | 587 | | |
577 | 588 | | |
| |||
605 | 616 | | |
606 | 617 | | |
607 | 618 | | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
608 | 626 | | |
609 | 627 | | |
610 | 628 | | |
| |||
646 | 664 | | |
647 | 665 | | |
648 | 666 | | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
649 | 671 | | |
650 | 672 | | |
651 | 673 | | |
| |||
669 | 691 | | |
670 | 692 | | |
671 | 693 | | |
672 | | - | |
673 | | - | |
674 | | - | |
| 694 | + | |
| 695 | + | |
675 | 696 | | |
676 | | - | |
677 | | - | |
678 | | - | |
679 | | - | |
680 | | - | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
681 | 711 | | |
682 | | - | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
683 | 715 | | |
684 | 716 | | |
685 | 717 | | |
686 | | - | |
687 | | - | |
688 | | - | |
689 | | - | |
690 | | - | |
| 718 | + | |
691 | 719 | | |
692 | 720 | | |
693 | 721 | | |
| |||
1234 | 1262 | | |
1235 | 1263 | | |
1236 | 1264 | | |
1237 | | - | |
| 1265 | + | |
1238 | 1266 | | |
1239 | 1267 | | |
1240 | | - | |
1241 | 1268 | | |
1242 | | - | |
1243 | 1269 | | |
1244 | | - | |
1245 | 1270 | | |
1246 | 1271 | | |
1247 | | - | |
1248 | | - | |
1249 | | - | |
1250 | | - | |
1251 | | - | |
1252 | | - | |
1253 | | - | |
1254 | | - | |
| 1272 | + | |
| 1273 | + | |
1255 | 1274 | | |
1256 | 1275 | | |
| 1276 | + | |
1257 | 1277 | | |
1258 | | - | |
1259 | | - | |
1260 | | - | |
1261 | | - | |
1262 | | - | |
| 1278 | + | |
| 1279 | + | |
1263 | 1280 | | |
1264 | 1281 | | |
1265 | 1282 | | |
1266 | 1283 | | |
1267 | | - | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
1268 | 1310 | | |
1269 | 1311 | | |
1270 | 1312 | | |
1271 | 1313 | | |
1272 | 1314 | | |
1273 | 1315 | | |
1274 | | - | |
| 1316 | + | |
1275 | 1317 | | |
1276 | | - | |
1277 | | - | |
| 1318 | + | |
| 1319 | + | |
1278 | 1320 | | |
1279 | | - | |
| 1321 | + | |
1280 | 1322 | | |
1281 | 1323 | | |
1282 | 1324 | | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
1283 | 1333 | | |
1284 | 1334 | | |
1285 | 1335 | | |
| |||
0 commit comments