| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
Review requested:
|
Sorry, something went wrong.
Codecov ReportAttention: Patch coverage is 68.42105% with 18 lines in your changes missing coverage. Please review.
@@ Coverage Diff @@
## main #57286 +/- ##
==========================================
- Coverage 90.28% 90.26% -0.02%
==========================================
Files 630 630
Lines 186158 186208 +50
Branches 36484 36488 +4
==========================================
+ Hits 168067 168077 +10
- Misses 10974 10987 +13
- Partials 7117 7144 +27
... and 29 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Sorry, something went wrong.
There was a problem hiding this comment.
I'm not great with cpp, but it looks fine AFAICT, and conceptually checks out 🙂
Sorry, something went wrong.
There was a problem hiding this comment.
I think the original implementation is much easier to understand and maintain.
Sorry, something went wrong.
Do you have any suggestions on how to improve it? |
Sorry, something went wrong.
Not with it all being in C++. The original was plain JavaScript that only required JavaScript domain knowledge. This PR shifts it all in to C++, thus requiring the reader to know that language along with all of the underlying APIs used to implement the feature. |
Sorry, something went wrong.
|
CI: https://ci.nodejs.org/job/node-test-pull-request/65676/ esm/cjs-parse.js n=100 -0.20 % ±0.89%
esm/detect-esm-syntax.js n=10000 type='with-package-json' 0.41 % ±0.99%
esm/detect-esm-syntax.js n=10000 type='without-package-json' 0.25 % ±0.79%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 0.12 % ±0.76%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.44 % ±0.66%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.35 % ±0.56%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 ** 0.59 % ±0.43%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 0.76 % ±0.86%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 0.57 % ±0.58%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.node' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 ** 0.89 % ±0.52%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.node' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.25 % ±0.71%
esm/esm-loader-defaultResolve.js specifier='./relative-existing.js' n=1000 1.15 % ±2.06%
esm/esm-loader-defaultResolve.js specifier='./relative-nonexistent.js' n=1000 0.02 % ±1.16%
esm/esm-loader-defaultResolve.js specifier='node:os' n=1000 -0.80 % ±3.99%
esm/esm-loader-defaultResolve.js specifier='node:prefixed-nonexistent' n=1000 -1.62 % ±4.91%
esm/esm-loader-defaultResolve.js specifier='unprefixed-existing' n=1000 0.47 % ±1.24%
esm/esm-loader-defaultResolve.js specifier='unprefixed-nonexistent' n=1000 ** 1.11 % ±0.68%
esm/esm-loader-import.js specifier='./relative-existing.js' n=1000 1.86 % ±4.63%
esm/esm-loader-import.js specifier='./relative-nonexistent.js' n=1000 0.82 % ±1.10%
esm/esm-loader-import.js specifier='data:text/javascript,{i}' n=1000 -1.30 % ±1.70%
esm/esm-loader-import.js specifier='node:os' n=1000 -1.84 % ±3.60%
esm/esm-loader-import.js specifier='node:prefixed-nonexistent' n=1000 1.61 % ±4.81%
esm/import-meta.js n=1000 *** -5.10 % ±0.61%
esm/require-esm.js n=1000 exports='default' type='access' -1.44 % ±1.49%
esm/require-esm.js n=1000 exports='default' type='all' *** -1.72 % ±0.62%
esm/require-esm.js n=1000 exports='default' type='load' * -0.64 % ±0.51%
esm/require-esm.js n=1000 exports='named' type='access' 1.15 % ±1.81%
esm/require-esm.js n=1000 exports='named' type='all' *** -1.53 % ±0.57%
esm/require-esm.js n=1000 exports='named' type='load' ** -0.91 % ±0.58%
|
Sorry, something went wrong.
|
Banchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1680/ Resultsconfidence improvement accuracy (*)
esm/esm-loader-defaultResolve.js specifier='node:os' n=1000 * -3.36 % ±2.64%
esm/esm-loader-defaultResolve.js specifier='node:prefixed-nonexistent' n=1000 * -4.92 % ±3.88%
esm/esm-loader-defaultResolve.js specifier='unprefixed-existing' n=1000 ** -1.88 % ±1.37%
esm/esm-loader-import.js specifier='data:text/javascript,{i}' n=1000 * 1.51 % ±1.27%
esm/import-meta.js n=1000 *** -4.65 % ±0.53%
esm/require-esm.js n=1000 exports='default' type='access' * -1.65 % ±1.50%
esm/require-esm.js n=1000 exports='default' type='load' *** -1.86 % ±0.62%
esm/require-esm.js n=1000 exports='named' type='all' *** -1.59 % ±0.59%
esm/require-esm.js n=1000 exports='named' type='load' *** -1.29 % ±0.51%
|
Sorry, something went wrong.
|
Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1682/ Resultsconfidence improvement accuracy (*)
esm/cjs-parse.js n=100 1.09 % ±1.13%
esm/detect-esm-syntax.js n=10000 type='with-package-json' -0.44 % ±0.85%
esm/detect-esm-syntax.js n=10000 type='without-package-json' 0.63 % ±0.74%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 ** 1.05 % ±0.68%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 0.31 % ±0.72%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 0.62 % ±0.64%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 0.45 % ±0.46%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 0.39 % ±0.76%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 0.37 % ±0.64%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.node' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 0.65 % ±0.72%
esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.node' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.02 % ±0.46%
esm/esm-loader-defaultResolve.js specifier='./relative-existing.js' n=1000 * -1.57 % ±1.42%
esm/esm-loader-defaultResolve.js specifier='./relative-nonexistent.js' n=1000 -0.08 % ±1.70%
esm/esm-loader-defaultResolve.js specifier='node:os' n=1000 -0.26 % ±2.28%
esm/esm-loader-defaultResolve.js specifier='node:prefixed-nonexistent' n=1000 -1.75 % ±3.87%
esm/esm-loader-defaultResolve.js specifier='unprefixed-existing' n=1000 1.20 % ±1.25%
esm/esm-loader-defaultResolve.js specifier='unprefixed-nonexistent' n=1000 0.48 % ±0.87%
esm/esm-loader-import.js specifier='./relative-existing.js' n=1000 -1.16 % ±3.86%
esm/esm-loader-import.js specifier='./relative-nonexistent.js' n=1000 -0.48 % ±0.72%
esm/esm-loader-import.js specifier='data:text/javascript,{i}' n=1000 -0.41 % ±1.82%
esm/esm-loader-import.js specifier='node:os' n=1000 -1.91 % ±3.28%
esm/esm-loader-import.js specifier='node:prefixed-nonexistent' n=1000 0.33 % ±3.81%
esm/import-meta.js n=1000 *** -5.62 % ±0.69%
esm/require-esm.js n=1000 exports='default' type='access' ** -2.03 % ±1.45%
esm/require-esm.js n=1000 exports='default' type='all' *** -1.31 % ±0.62%
esm/require-esm.js n=1000 exports='default' type='load' *** -1.50 % ±0.70%
esm/require-esm.js n=1000 exports='named' type='access' -0.42 % ±1.68%
esm/require-esm.js n=1000 exports='named' type='all' *** -1.19 % ±0.49%
esm/require-esm.js n=1000 exports='named' type='load' *** -1.06 % ±0.46%
It's not any better, reverting |
Sorry, something went wrong.
Sorry, something went wrong.
There was a problem hiding this comment.
Nit: remove the v8:: qualifier and add v8::PropertyCallbackInfo to the using section at the top if it is not already there.
Sorry, something went wrong.
There was a problem hiding this comment.
Setting Data to a single internal object that has both dirname and filename set on it the first time either is accessed on it should work, yes?
Sorry, something went wrong.
There was a problem hiding this comment.
Nit: can these please avoid the use of Check() and propagate errors up correctly?
Sorry, something went wrong.
The actual benchmarks site is asking for a login. How do we interpret this snippet? |
Sorry, something went wrong.
|
hmm... looking at the benchmark results there it's just not clear to me that moving the init to native code has enough realized benefit. Moving into native does make the code a bit more difficult to maintain while also being slight slower. A lazy getter defined in JavaScript could likely achieve the same result while being easier for more people to help maintain. Not going to block on it tho... just not seeing the full benefit. |
Sorry, something went wrong.
It's unclear whether a JS getter would be spec compliant, see the discussion in #57003 – that being said, I'm also a bit puzzled by the benchmark results |
Sorry, something went wrong.
|
What you've done here is pretty cool. But if the c++ implementation isn't faster, and we can stay spec compliant (which that discussion seemed to end that it is), I think the JS implementation would be better because it's more maintainable. |
Sorry, something went wrong.
|
Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1697/ Resultsconfidence improvement accuracy (*) esm/detect-esm-syntax.js n=10000 type='without-package-json' *** -1.43 % ±0.76% esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 ** 0.70 % ±0.42% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 0.80 % ±0.33% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 ** 1.02 % ±0.60% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.json' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.08 % ±0.60% esm/esm-loader-defaultResolve.js specifier='node:os' n=1000 * 3.20 % ±3.07% esm/import-meta.js n=1000 *** -7.21 % ±0.71% esm/require-esm.js n=1000 exports='default' type='access' ** 2.28 % ±1.57% esm/require-esm.js n=1000 exports='default' type='all' * -0.78 % ±0.62% esm/require-esm.js n=1000 exports='default' type='load' * -0.74 % ±0.60% esm/require-esm.js n=1000 exports='named' type='access' * -2.11 % ±1.64% esm/require-esm.js n=1000 exports='named' type='load' *** -1.22 % ±0.54% |
Sorry, something went wrong.
|
Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1698/ Resultsconfidence improvement accuracy (*) esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 *** 1.06 % ±0.49% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 * 0.80 % ±0.64% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 * 0.65 % ±0.50% esm/import-meta.js valuesToRead='dirname-and-filename' n=1000 *** -6.91 % ±0.63% esm/import-meta.js valuesToRead='dirname' n=1000 *** -6.04 % ±0.67% esm/import-meta.js valuesToRead='filename' n=1000 *** -6.25 % ±0.75% esm/require-esm.js n=1000 exports='default' type='all' * -0.82 % ±0.69% esm/require-esm.js n=1000 exports='named' type='all' * -0.64 % ±0.54% esm/require-esm.js n=1000 exports='named' type='load' * -0.56 % ±0.51% |
Sorry, something went wrong.
|
Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1699/ Resultsconfidence improvement accuracy (*) esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='./index.js' packageJsonUrl='node_modules/test/package.json' n=10000 * 0.67 % ±0.55% esm/esm-legacyMainResolve.js resolvedFile='node_modules/non-exist' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 ** 0.77 % ±0.54% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.js' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 * 0.43 % ±0.37% esm/esm-legacyMainResolve.js resolvedFile='node_modules/test/index.node' packageConfigMain='' packageJsonUrl='node_modules/test/package.json' n=10000 * 0.68 % ±0.56% esm/esm-loader-defaultResolve.js specifier='node:os' n=1000 * 2.12 % ±1.99% esm/import-meta.js valuesToRead='dirname-and-filename' n=1000 *** -6.39 % ±0.70% esm/import-meta.js valuesToRead='dirname' n=1000 *** -5.30 % ±0.70% esm/import-meta.js valuesToRead='filename' n=1000 *** -4.77 % ±0.75% |
Sorry, something went wrong.
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
PR-URL: #57286 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
| Back | FazBrowse Home | New Git URL |
Supersedes #57003.
We should probably avoid translating the URL to a path twice when the user needs both dirname and filename, but I'm not sure if there's an elegant way to do it without crossing the C++/JS bundary.