Skip to content

perf: optimize GetPropertiesAsync property iteration (upstream #15094) - #3497

Merged
kblok merged 1 commit into
masterfrom
implement-upstream-change-15094
Jun 24, 2026
Merged

kblok merged 1 commit into
masterfrom
implement-upstream-change-15094

Conversation

@kblok

@kblok kblok commented Jun 24, 2026

Copy link
Copy Markdown
Member

GetPropertiesAsync was using a for...in loop over Object.getOwnPropertyDescriptors() to collect enumerable properties. Upstream replaced this with Object.keys(), which returns own enumerable properties directly and avoids traversing the prototype chain. Upstream measured ~38% faster execution for this path in browser benchmarks.

Upstream: puppeteer/puppeteer#15094

Replace the for...in loop over Object.getOwnPropertyDescriptors with
Object.keys(), which returns only own enumerable properties directly and
is measurably faster (~38% in upstream benchmarks).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@kblok
kblok merged commit d68ee3f into master Jun 24, 2026
27 of 30 checks passed
@kblok
kblok deleted the implement-upstream-change-15094 branch June 24, 2026 18:29
sondresjolyst pushed a commit to sondresjolyst/garge-api that referenced this pull request Jul 6, 2026
Updated [PuppeteerSharp](https://github.com/hardkoded/puppeteer-sharp)
from 25.1.2 to 25.2.1.

<details>
<summary>Release notes</summary>

_Sourced from [PuppeteerSharp's
releases](https://github.com/hardkoded/puppeteer-sharp/releases)._

## 25.2.1

## What's New
* feat: add WaitForFunctionAsync to WebWorker (upstream #​15100) by
@​kblok in hardkoded/puppeteer-sharp#3484
* feat: roll to Firefox 152.0 (upstream #​15125) by @​kblok in
hardkoded/puppeteer-sharp#3486
* feat: add page locale emulation (upstream #​15075) by @​kblok in
hardkoded/puppeteer-sharp#3485
* feat: roll to Chrome 150.0.7871.24 (upstream #​15126) by @​kblok in
hardkoded/puppeteer-sharp#3488

## What's Changed
* fix: await Worker script execution before evaluate (upstream #​15099)
by @​kblok in hardkoded/puppeteer-sharp#3489
* fix: apply network allowlist/blocklist to non-auto-attach sessions and
workers (upstream #​15136) by @​kblok in
hardkoded/puppeteer-sharp#3491
* fix: roll to Firefox 152.0.1 (upstream #​15134) by @​kblok in
hardkoded/puppeteer-sharp#3493
* fix(webmcp): invalidate webmcp tools on context destruction (upstream
#​15068) by @​kblok in
hardkoded/puppeteer-sharp#3496
* perf: optimize GetPropertiesAsync property iteration (upstream
#​15094) by @​kblok in
hardkoded/puppeteer-sharp#3497
* perf(cdp): parallelize extension workers fetching (upstream #​15057)
by @​kblok in hardkoded/puppeteer-sharp#3495
* perf: parallelize iframe population in accessibility snapshots
(upstream #​15083) by @​kblok in
hardkoded/puppeteer-sharp#3499
* Fix #​3501: pin Microsoft.Extensions.Logging to the v8 floor by
@​kblok in hardkoded/puppeteer-sharp#3502
* feat: allow extensions to run over websockets (upstream #​15059) by
@​kblok in hardkoded/puppeteer-sharp#3487
* fix: block service worker registrations for blocked URLs (upstream
#​15135) by @​kblok in
hardkoded/puppeteer-sharp#3490
* fix: correct screencast frame timing so playback matches real time
(upstream #​15112) by @​kblok in
hardkoded/puppeteer-sharp#3494
* chore: roll Firefox to 152.0.2 (upstream #​15153) by @​kblok in
hardkoded/puppeteer-sharp#3503
* chore: bump version to 25.2.1 by @​kblok in
hardkoded/puppeteer-sharp#3504
* fix: cache Browser.getVersion for untrusted sessions (upstream
#​15150) by @​kblok in
hardkoded/puppeteer-sharp#3505
* fix: unblock service-worker registration block after worker-buffer
change by @​kblok in
hardkoded/puppeteer-sharp#3506


**Full Changelog**:
hardkoded/puppeteer-sharp@v25.1.2...v25.2.1

Commits viewable in [compare
view](hardkoded/puppeteer-sharp@v25.1.2...v25.2.1).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=PuppeteerSharp&package-manager=nuget&previous-version=25.1.2&new-version=25.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant