[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXG1CWZ42S8R6S8WS66623":3,"skill-same:01M6GXG1CWZ42S8R6S8WS66623":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6GXG1CWZ42S8R6S8WS66623","Performance Review",null,"Performance review checklist covering N+1 queries, unnecessary allocations, cache opportunities, async patterns, and bundle size.","malayvuong\u002Fagent-orchestra","malayvuong","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13240975?v=4","01M6GXCDVPB2VPZMDZK1KF98M0","Nguyen Minh Vuong","01M6GXCE176VDX3XV4Z4KNR33J",1,"MIT","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fperf-review\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"review","performance","performance review","review checklist","cache","bundle size","async","queries","checklist","patterns","bundle","size","2026-11-10 10:12:30",false,"---\nname: Performance Review\ndescription: Performance review checklist covering N+1 queries, unnecessary allocations, cache opportunities, async patterns, and bundle size.\nversion: 2026.3.1\nlicense: MIT\ntriggers:\n  lenses:\n    - performance\n---\n\nWhen reviewing code from a performance perspective, apply the following checks.\n\n## N+1 Query Detection\n\nIdentify loops that execute database queries or API calls per iteration. Flag any query inside a `for`, `while`, or `map`\u002F`forEach` call. The fix is almost always to batch the operation: use `WHERE id IN (...)`, `DataLoader`, or a single join. Check ORM relationships for lazy-loading traps — accessing a relational property inside a loop without eager loading is a classic N+1 source.\n\n## Unnecessary Allocations\n\nFlag large object or array creation inside hot loops. Intermediate arrays created by chained `.map().filter().map()` calls can often be replaced with a single `.reduce()` or `for` loop. Check for repeated string concatenation in loops — use array join or template literals built outside the loop. Flag closure creation inside render functions or tight loops where stable references would suffice.\n\n## Caching Opportunities\n\nIdentify expensive computations (regex compilation, JSON parsing, cryptographic operations, external fetches) that produce the same result for the same inputs. Flag these as candidates for memoization or module-level caching. Check that cache invalidation logic exists and is correct. Verify time-based caches include TTL and that stale data cannot cause correctness issues.\n\n## Async and Concurrency Patterns\n\nFlag sequential `await` calls that could run concurrently with `Promise.all`. Check for async operations inside loops where `Promise.all(items.map(...))` would be more efficient. Verify that concurrent operations have bounded parallelism to avoid overwhelming downstream services. Flag blocking synchronous operations (fs.readFileSync, crypto operations) on hot paths in async code.\n\n## Bundle Size\n\nFor front-end code, flag whole-library imports where tree-shakeable named imports are available (e.g., `import _ from 'lodash'` vs `import { debounce } from 'lodash'`). Identify large dependencies added for small utility functions. Flag synchronous dynamic imports in critical rendering paths.\n\n## Memory and Resource Leaks\n\nCheck that event listeners, timers, and observers are cleaned up when components unmount or objects are disposed. Flag unbounded caches or queues that can grow without limit. Verify streams are closed after use and that database connections are returned to the pool.\n","When reviewing code from a performance perspective, apply the following checks.\n\n## N+1 Query Detection\n\nIdentify loops that execute database queries or API calls per iteration. Flag any query inside a `for`, `while`, or `map`\u002F`forEach` call. The fix is almost always to batch the operation: use `WHERE id IN (...)`, `DataLoader`, or a single join. Check ORM relationships for lazy-loading traps — accessing a relational property inside a loop without eager loading is a classic N+1 source.\n\n## Unnecessary Allocations\n\nFlag large object or array creation inside hot loops. Intermediate arrays created by chained `.map().filter().map()` calls can often be replaced with a single `.reduce()` or `for` loop. Check for repeated string concatenation in loops — use array join or template literals built outside the loop. Flag closure creation inside render functions or tight loops where stable references would suffice.\n\n## Caching Opportunities\n\nIdentify expensive computations (regex compilation, JSON parsing, cryptographic operations, external fetches) that produce the same result for the same inputs. Flag these as candidates for memoization or module-level caching. Check that cache invalidation logic exists and is correct. Verify time-based caches include TTL and that stale data cannot cause correctness issues.\n\n## Async and Concurrency Patterns\n\nFlag sequential `await` calls that could run concurrently with `Promise.all`. Check for async operations inside loops where `Promise.all(items.map(...))` would be more efficient. Verify that concurrent operations have bounded parallelism to avoid overwhelming downstream services. Flag blocking synchronous operations (fs.readFileSync, crypto operations) on hot paths in async code.\n\n## Bundle Size\n\nFor front-end code, flag whole-library imports where tree-shakeable named imports are available (e.g., `import _ from 'lodash'` vs `import { debounce } from 'lodash'`). Identify large dependencies added for small utility functions. Flag synchronous dynamic imports in critical rendering paths.\n\n## Memory and Resource Leaks\n\nCheck that event listeners, timers, and observers are cleaned up when components unmount or objects are disposed. Flag unbounded caches or queues that can grow without limit. Verify streams are closed after use and that database connections are returned to the pool.\n",{"name":5,"license":15,"version":36,"triggers":37,"description":7},"2026.3.1",{"lenses":38},[20],"main","eac6069a8690d89fd23f08d2d14e4874ed376a77",".agent-orchestra\u002Fskills\u002Fperf-review",0,"https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra","https:\u002F\u002Fgithub.com\u002Fmalayvuong","www.malayvuong.com","Just a newbie at everything","2026-10-09 12:52:45",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add malayvuong\u002Fagent-orchestra --skill \"Performance Review\"",{"tool":54,"command":55},"bunx","bunx skills add malayvuong\u002Fagent-orchestra --skill \"Performance Review\"",{"tool":57,"command":58},"pnpm","pnpm dlx skills add malayvuong\u002Fagent-orchestra --skill \"Performance Review\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fperf-review\u002FSKILL.md",true,[],[63,104,123,141,165,185],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":85,"publishedAt":31},"01M6GXHYPRJ43SHFPFJTF87GS8","Vue.js Review","Deep review of Vue.js applications — Composition API patterns, reactivity traps, component design, Pinia state management, and performance pitfalls.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fvue-review\u002FSKILL.md",[69,74,77,80],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":75,"categoryName":76,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":78,"categoryName":79,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[19,86,87,88,89,20,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"vue","js","Vue js Review","design","component","state management","state","deep review","api patterns","applications","api","Composition","pinia","management","deep","logic","pitfalls","pinia state",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":31},"01M6GXHSPDDH1PQEN61ENMCEF5","Unity Review","Deep review of Unity C# code — object pooling, Update allocation, physics patterns, UI performance, serialization, and mobile optimization.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Funity-review\u002FSKILL.md",[],[19,111,106,20,112,113,93,114,115,116,117,28,118,100,101,119,120,121,122],"unity","update","code","ui","serialization","Optimization","mobile","physics","C#","mobile optimization","object","allocation",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":31},"01M6GXHNKTH12CGSRWDGF2H1Q9","TypeScript Review","Deep review of TypeScript code — type safety, generics patterns, strict mode compliance, type narrowing, module boundaries, and common escape hatches.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftypescript-review\u002FSKILL.md",[],[19,130,131,113,93,132,133,134,135,28,100,101,136,137,138,139,140],"typescript","typescript review","compliance","Type Safety","Safety","common","module","type","interface","consistency","mode",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":153,"publishedAt":31},"01M6GXHH3DMZD272RVH4800C67","Test Conventions","Testing patterns and conventions for code review. Covers naming, AAA structure, boundary testing, mock vs real dependencies, and coverage expectations.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftest-conventions\u002FSKILL.md",[147,150],{"categoryNo":148,"categoryName":149,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":151,"categoryName":152,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000008","测试与质量",[154,155,143,156,157,19,113,158,159,160,28,161,162,163,164],"test","conventions","code review","testing","testing patterns","boundary","coverage","dependencies","structure","mock","naming",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":175,"publishedAt":31},"01M6GXHCAQSJDVNVRFFD1HJWTN","Terraform Review","Deep review of Terraform\u002FOpenTofu configuration — state management, module design, security hardening, drift prevention, and production safety patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fterraform-review\u002FSKILL.md",[171,174],{"categoryNo":172,"categoryName":173,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":78,"categoryName":79,"taxonomyType":72,"taxonomyTypeDesc":73},[19,176,167,89,177,91,92,93,178,179,180,181,134,182,99,183,184,100,101,136],"terraform","security","cloud","aws","hardening","Production","opentofu","iac","drift",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":31},"01M6GXH83F11CK4BQEAJPN6HDE","Swift Review","Deep review of Swift code — memory management, concurrency patterns, optionals, protocol design, SwiftUI lifecycle, and iOS platform patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fswift-review\u002FSKILL.md",[191],{"categoryNo":78,"categoryName":79,"taxonomyType":72,"taxonomyTypeDesc":73},[193,19,187,89,194,20,113,195,93,196,197,198,199,200,99,100,101,201,202,203],"swift","memory","protocol","ios","concurrency","lifecycle","swiftui","uikit","xcode","apple","platform"]