⚡ Bolt: [performance improvement] Replace Array.includes with Set in filters for O(N) lookups#145
⚡ Bolt: [performance improvement] Replace Array.includes with Set in filters for O(N) lookups#145xb1g wants to merge 1 commit into
Conversation
Co-authored-by: xb1g <70068561+xb1g@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
00dd20d to
ef0a5de
Compare
|
Unable to deploy a commit from a private repository on your GitHub organization to the wachaa1319's projects team on Vercel, which is currently on the Hobby plan. In order to deploy, you can:
To read more about collaboration on Vercel, click here. |
There was a problem hiding this comment.
Pull request overview
This PR applies a small performance optimization by replacing repeated Array.includes(...) membership checks inside .filter() loops with precomputed Set lookups (Set.has(...)). This reduces the time complexity of “difference” style filters from O(N·M) to O(N+M) in a few potentially hot paths (API routes and a dashboard component).
Changes:
components/teams/StudentTeamDashboard.tsx: Precompute aSetof the user’s team IDs for faster “available teams” filtering.app/api/classrooms/[id]/grading/route.ts: Use aSetof submission user IDs to efficiently find classroom members missing from submissions.app/api/assignments/[id]/nodes/route.ts: Use aSetof existing node IDs to efficiently detect missing node IDs.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| components/teams/StudentTeamDashboard.tsx | Uses a Set for faster team membership checks when filtering available teams. |
| app/api/classrooms/[id]/grading/route.ts | Uses a Set to speed up finding missing user IDs between classroom members and submission users. |
| app/api/assignments/[id]/nodes/route.ts | Uses a Set to speed up detecting missing node IDs before inserting assignment nodes. |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
web | 7723b06 | May 11 2026, 06:36 PM |
54a7112 to
7723b06
Compare
💡 What: Replaced
Array.prototype.includeswithSet.prototype.haswithin.filter()loops across three files (app/api/classrooms/[id]/grading/route.ts,app/api/assignments/[id]/nodes/route.ts, andcomponents/teams/StudentTeamDashboard.tsx).🎯 Why: Using
.includes()inside a.filter()loop results in an O(N * M) time complexity because for every item in the filtered array, the code scans the entire target array. By pre-computing aSet, the lookup becomes O(1), improving the overall operation to O(N + M). This is a classic Bolt optimization pattern.📊 Impact: Reduces time complexity of array differences from O(N^2) to O(N). The exact real-world impact depends on the array size, but this avoids potentially severe bottlenecks as the application scales and classrooms/teams/assignments grow larger.
🔬 Measurement: Run
pnpm testandESLINT_USE_FLAT_CONFIG=false npx eslintto verify no regressions were introduced.PR created automatically by Jules for task 18138056828062593602 started by @xb1g