Skip to content

Add SocialNetwork-React experimental workload - #596

Merged
canova merged 6 commits into
WebKit:mainfrom
canova:social-network-workload
Nov 13, 2026
Merged

canova merged 6 commits into
WebKit:mainfrom
canova:social-network-workload

Conversation

@canova

@canova canova commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

This PR adds SocialNetwork-React, an experimental workload. It's an original React 19 + Tailwind app that models a social feed: a virtualized feed, a post dialog with threaded comments, profile navigation, search typeahead, and analytics running on every interaction.

Steps: refresh the feed, scroll and load more stories, expand truncated stories, open a post dialog, expand replies, change comment order, load more comments, type a comment, close the dialog, open own profile, go back to the home feed, search typeahead, open the header menus.

@netlify

netlify Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for webkit-speedometer-preview ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit 6409edd
🔍 Latest deploy log https://app.netlify.com/projects/webkit-speedometer-preview/deploys/6af74d29339d07c9c4666e67
😎 Deploy Preview https://deploy-preview-596--webkit-speedometer-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@canova
canova force-pushed the social-network-workload branch 2 times, most recently from 7fa6487 to 878fa4d Compare November 12, 2026 11:30
@camillobruni

Copy link
Copy Markdown
Contributor

[cbruni] Too fast numbers on m4
Firefox:

SocialNetwork-React/RefreshHomeFeed 	6.14 	± 	0.52 (8.5%) 	ms
SocialNetwork-React/LoadMoreStories 	33.71 	± 	4.12 (12.2%) 	ms
SocialNetwork-React/ExpandStoryTexts 	32.51 	± 	2.00 (6.2%) 	ms
SocialNetwork-React/OpenPostDialog 	9.67 	± 	4.41 (45.6%) 	ms
SocialNetwork-React/ExpandCommentReplies 	4.27 	± 	1.16 (27.1%) 	ms
SocialNetwork-React/ChangeCommentOrder 	5.56 	± 	0.28 (5.1%) 	ms
SocialNetwork-React/LoadMoreComments 	10.07 	± 	0.28 (2.8%) 	ms
SocialNetwork-React/TypeComment 	12.66 	± 	0.59 (4.6%) 	ms
SocialNetwork-React/ClosePostDialog 	3.58 	± 	0.16 (4.5%) 	ms
SocialNetwork-React/OpenOwnProfile 	11.76 	± 	0.75 (6.4%) 	ms
SocialNetwork-React/BackToHomeFeed 	8.06 	± 	1.50 (18.6%) 	ms
SocialNetwork-React/SearchTypeahead 	8.18 	± 	0.63 (7.7%) 	ms
SocialNetwork-React/OpenHeaderMenus 	14.59 	± 	2.09 (14.4%) 	ms

@canova
canova force-pushed the social-network-workload branch from eb944fa to 35a0178 Compare November 13, 2026 16:58
@camillobruni

Copy link
Copy Markdown
Contributor

OpenPostDialog and BackToHomeFeed are still below 10ms on the m4.

@canova
canova force-pushed the social-network-workload branch from 65df390 to 02cb5e8 Compare November 13, 2026 17:42
Models a social network's home feed and what readers do around it: a
virtualized feed that loads more stories as it scrolls, a post dialog with
threaded comments and a composer, a profile route and back, a search typeahead
and the header menus. It also runs the instrumentation such apps attach to every
interaction: error-guard wrappers, auto-tracked events that are batched,
compressed and checksummed for upload, impression tracking, interaction timing
and feature-gate exposures.

Original React 19 + Vite + Tailwind code with deterministic, server-free
fixtures (an in-page server streams chunked responses) and no third-party
assets. Experimental, so it is off by default and does not affect the official
score.

Steps wait on window events the app fires once an interaction has committed.
After clicks and keystrokes they also await a microtask, because React 19
commits discrete updates from a microtask, which a step-dispatched event only
reaches once the step yields.
Output of `npm run build` in suites-experimental/social-network. Build artifacts
only, so it can be dropped and regenerated whenever the source commit below it
changes.
WebKit allows 100 pushState/replaceState calls per 10 seconds and counts
them on the main frame, so suites that ran earlier in the harness can use
up the budget. The router's pushState then threw a SecurityError before
the state update, and OpenPostDialog waited forever for its event. The
steps never go back or forward, so drop the History API entirely.
Components now read the store through fragments with garbage collection,
the JSX runtime tracks renders and wraps handlers, strings go through
ICU-style formatting, and search uses a fuzzy index. Stories, comments
and the dialog are sized after the real site.

ClosePostDialog is folded into OpenOwnProfile, as closing stays cheap.
ExpandCommentReplies now expands each first-page thread fully.
Feature components now render through design-system primitives (box, text,
link, image, pressable) that read context, keep interaction state and register
with interaction and visual-completion trackers, matching a production app's
component density. The home page stays mounted in <Activity> while the profile
is shown.

BackToHomeFeed is folded into OpenOwnProfile as VisitOwnProfile, since
revealing the kept-alive home is cheap.
Leaving the profile unmounted its feed while the home feed restored its scroll
position in the same commit. The profile feed's scroll listener lived in a
passive effect, so it was still attached when that scroll fired, and it measured
a list that was already gone. Register it in a layout effect instead.
@canova
canova force-pushed the social-network-workload branch from 02cb5e8 to 6409edd Compare November 13, 2026 17:47
@canova
canova merged commit d00cdde into WebKit:main Nov 13, 2026
8 of 9 checks passed
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.

2 participants