Skip to content

perf: add fast path to OrdinaryGet#5413

Open
Serdnad wants to merge 1 commit into
boa-dev:mainfrom
Serdnad:perf/ordinary-get-data-fast-path
Open

perf: add fast path to OrdinaryGet#5413
Serdnad wants to merge 1 commit into
boa-dev:mainfrom
Serdnad:perf/ordinary-get-data-fast-path

Conversation

@Serdnad

@Serdnad Serdnad commented Jun 23, 2026

Copy link
Copy Markdown

Adds a fast path to OrdinaryGet that reads a plain data property's value directly from object storage, skipping PropertyDescriptor construction.

Benchmarks on local machine:

Benchmark Δ
strings/slice −21.4%
intl/numberformat-different-options −14.2%
strings/split −12.4%
strings/concat −12.3%
intl/segmenter-segment −12.2%
strings/replace −11.9%
properties/access −10.4%
prototypes/chain −9.7%
intl/listformat-format −8.8%
intl/datetimeformat-format −7.7%
v8-benches/splay −7.0%
v8-benches/regexp −5.9%
basic/nested-loop −4.8%
intl/collator-construction −4.5%
intl/pluralrules-construction −4.0%
intl/numberformat-construction −3.9%
intl/segmenter-construction −3.8%
v8-benches/earley-boyer −3.7%
intl/listformat-construction −3.4%
v8-benches/raytrace −3.2%
json/stringify_circular −2.9%
closures/invoke −1.6%
closures/create −1.3%
intl/datetimeformat-with-options −0.9%
v8-benches/navier-stokes −0.3%
intl/pluralrules-select −0.1%
basic/call-loop −0.0%
json/stringify_deep +0.0%
v8-benches/deltablue +0.1%
v8-benches/crypto +0.1%
v8-benches/richards +1.5%
intl/collator-compare +3.1%
intl/datetimeformat_resolved_options +3.2%

Avoid constructing a PropertyDescriptor for the common case of reading a
plain data property. `ordinary_get` now resolves named own-property
lookups on ordinary objects in a single shape probe via
`PropertyMap::get_own_data_named`, reading the value directly from
storage and going straight to the prototype walk on a miss (no redundant
second lookup).

Gated on the object using the ordinary `__get_own_property__`, so
accessors, indexed keys and exotic objects fall back to the spec path.

Benchmarks vs baseline: regexp -5.9%, earley-boyer -3.7%, raytrace -3.2%;
properties/access -10%, prototypes/chain -10%, strings -12..-23%.
@Serdnad Serdnad requested a review from a team as a code owner June 23, 2026 05:57
@github-actions github-actions Bot added the Waiting On Review Waiting on reviews from the maintainers label Jun 23, 2026
@github-actions github-actions Bot added this to the v1.0.0 milestone Jun 23, 2026
@github-actions

Copy link
Copy Markdown

Test262 conformance changes

Test result main count PR count difference
Total 53,125 53,125 0
Passed 51,072 51,072 0
Ignored 1,482 1,482 0
Failed 571 571 0
Panics 0 0 0
Conformance 96.14% 96.14% 0.00%

Tested main commit: 7ce9cae84ac9bf54fe528bb05b997ac24af808a4
Tested PR commit: 65418072af1cf8be1743cbe657f8adf4ce082eea
Compare commits: 7ce9cae...6541807

@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 60.27%. Comparing base (6ddc2b4) to head (6541807).
⚠️ Report is 982 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main    #5413       +/-   ##
===========================================
+ Coverage   47.24%   60.27%   +13.02%     
===========================================
  Files         476      567       +91     
  Lines       46892    63175    +16283     
===========================================
+ Hits        22154    38078    +15924     
- Misses      24738    25097      +359     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Waiting On Review Waiting on reviews from the maintainers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants