[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6M53VYVCZVPFNBYH18W8P":3,"skill-same:01M6F6M53VYVCZVPFNBYH18W8P":74},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6F6M53VYVCZVPFNBYH18W8P","alchemy-performance-tuning",null,"Optimize Alchemy SDK performance with caching, batching, and multi-chain parallelism.\nUse when reducing latency for blockchain queries, optimizing CU consumption,\nor scaling dApps for high request volumes.\nTrigger: \"alchemy performance\", \"alchemy slow\", \"alchemy optimization\",\n\"alchemy caching\", \"alchemy batch requests\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Falchemy-performance-tuning\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"alchemy performance tuning","performance tuning","tuning","alchemy","performance","optimize","chain","io","latency","scaling","multi-chain","caching","edit","write","read","Bash","web3","blockchain","batch","code","2026-11-10 10:12:30",false,"---\nname: alchemy-performance-tuning\ndescription: |\n  Optimize Alchemy SDK performance with caching, batching, and multi-chain parallelism.\n  Use when reducing latency for blockchain queries, optimizing CU consumption,\n  or scaling dApps for high request volumes.\n  Trigger: \"alchemy performance\", \"alchemy slow\", \"alchemy optimization\",\n  \"alchemy caching\", \"alchemy batch requests\".\nallowed-tools: Read, Write, Edit, Bash(npm:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, blockchain, web3, alchemy, performance]\ncompatible-with: claude-code\n---\n\n# Alchemy Performance Tuning\n\n## Performance Targets\n\n| Operation | Target Latency | CU Cost |\n|-----------|---------------|---------|\n| `getBlockNumber` | \u003C 50ms | 10 |\n| `getBalance` | \u003C 100ms | 19 |\n| `getTokenBalances` | \u003C 200ms | 50 |\n| `getNftsForOwner` | \u003C 300ms | 50 |\n| `getAssetTransfers` | \u003C 500ms | 150 |\n| Multi-chain portfolio | \u003C 2s | ~400 |\n\n## Instructions\n\n### Step 1: Response Caching with TTL\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fcache.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\n\nclass BlockchainCache {\n  private store = new Map\u003Cstring, { data: any; expiry: number }>();\n\n  \u002F\u002F Different TTLs for different data freshness needs\n  private TTL: Record\u003Cstring, number> = {\n    blockNumber: 12000,     \u002F\u002F 12s (~1 block)\n    balance: 30000,         \u002F\u002F 30s\n    tokenBalances: 60000,   \u002F\u002F 60s\n    nftOwnership: 300000,   \u002F\u002F 5 min (NFTs transfer less frequently)\n    contractMetadata: 3600000, \u002F\u002F 1 hour (rarely changes)\n    tokenMetadata: 86400000,   \u002F\u002F 24 hours (almost never changes)\n  };\n\n  async cached\u003CT>(category: string, key: string, fetcher: () => Promise\u003CT>): Promise\u003CT> {\n    const cacheKey = `${category}:${key}`;\n    const entry = this.store.get(cacheKey);\n    if (entry && entry.expiry > Date.now()) return entry.data;\n\n    const data = await fetcher();\n    this.store.set(cacheKey, { data, expiry: Date.now() + (this.TTL[category] || 30000) });\n    return data;\n  }\n\n  invalidate(category: string): void {\n    for (const key of this.store.keys()) {\n      if (key.startsWith(`${category}:`)) this.store.delete(key);\n    }\n  }\n}\n\nconst cache = new BlockchainCache();\nexport { cache };\n```\n\n### Step 2: Parallel Multi-Chain Fetching\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fparallel-fetch.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\nimport { cache } from '.\u002Fcache';\n\nconst CHAINS = [\n  { name: 'ethereum', network: Network.ETH_MAINNET },\n  { name: 'polygon', network: Network.MATIC_MAINNET },\n  { name: 'arbitrum', network: Network.ARB_MAINNET },\n  { name: 'base', network: Network.BASE_MAINNET },\n];\n\nasync function multiChainBalance(address: string) {\n  const results = await Promise.allSettled(\n    CHAINS.map(chain =>\n      cache.cached('balance', `${chain.name}:${address}`, async () => {\n        const client = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: chain.network });\n        const bal = await client.core.getBalance(address);\n        return { chain: chain.name, balance: (parseInt(bal.toString()) \u002F 1e18).toFixed(6) };\n      })\n    )\n  );\n\n  return results\n    .filter((r): r is PromiseFulfilledResult\u003Cany> => r.status === 'fulfilled')\n    .map(r => r.value);\n}\n```\n\n### Step 3: Batch NFT Metadata (Reduce CU)\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fbatch-nft.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\n\nconst alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_MAINNET });\n\n\u002F\u002F SLOW: Individual calls = 50 CU each\n\u002F\u002F async function slowGetMetadata(tokens) {\n\u002F\u002F   return Promise.all(tokens.map(t => alchemy.nft.getNftMetadata(t.contract, t.tokenId)));\n\u002F\u002F }\n\n\u002F\u002F FAST: Batch call = 50 CU total for up to 100 tokens\nasync function fastGetMetadata(tokens: Array\u003C{ contractAddress: string; tokenId: string }>) {\n  return alchemy.nft.getNftMetadataBatch(tokens);\n}\n```\n\n### Step 4: WebSocket for Real-Time Data\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Frealtime.ts\nimport { Alchemy, AlchemySubscription, Network } from 'alchemy-sdk';\n\nconst alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_MAINNET });\n\n\u002F\u002F Use WebSocket subscriptions instead of polling\nfunction watchAddress(address: string, onActivity: (tx: any) => void) {\n  alchemy.ws.on(\n    {\n      method: AlchemySubscription.PENDING_TRANSACTIONS,\n      toAddress: address,\n    },\n    (tx) => onActivity(tx)\n  );\n}\n\n\u002F\u002F Auto-reconnect on disconnect\nalchemy.ws.on('close', () => {\n  console.log('WebSocket disconnected — reconnecting in 5s');\n  setTimeout(() => alchemy.ws.connect(), 5000);\n});\n```\n\n## Output\n\n- TTL-based response cache matching data freshness requirements\n- Parallel multi-chain fetching (4 chains in \u003C 2s)\n- Batch NFT metadata (100x CU reduction)\n- WebSocket subscriptions replacing polling\n\n## Resources\n\n- [Alchemy Compute Units](https:\u002F\u002Fwww.alchemy.com\u002Fdocs\u002Freference\u002Fcompute-unit-costs)\n- [Alchemy WebSockets](https:\u002F\u002Fwww.alchemy.com\u002Fdocs\u002Freference\u002Fsdk-websockets)\n\n## Next Steps\n\nFor cost optimization, see `alchemy-cost-tuning`.\n\n","# Alchemy Performance Tuning\n\n## Performance Targets\n\n| Operation | Target Latency | CU Cost |\n|-----------|---------------|---------|\n| `getBlockNumber` | \u003C 50ms | 10 |\n| `getBalance` | \u003C 100ms | 19 |\n| `getTokenBalances` | \u003C 200ms | 50 |\n| `getNftsForOwner` | \u003C 300ms | 50 |\n| `getAssetTransfers` | \u003C 500ms | 150 |\n| Multi-chain portfolio | \u003C 2s | ~400 |\n\n## Instructions\n\n### Step 1: Response Caching with TTL\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fcache.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\n\nclass BlockchainCache {\n  private store = new Map\u003Cstring, { data: any; expiry: number }>();\n\n  \u002F\u002F Different TTLs for different data freshness needs\n  private TTL: Record\u003Cstring, number> = {\n    blockNumber: 12000,     \u002F\u002F 12s (~1 block)\n    balance: 30000,         \u002F\u002F 30s\n    tokenBalances: 60000,   \u002F\u002F 60s\n    nftOwnership: 300000,   \u002F\u002F 5 min (NFTs transfer less frequently)\n    contractMetadata: 3600000, \u002F\u002F 1 hour (rarely changes)\n    tokenMetadata: 86400000,   \u002F\u002F 24 hours (almost never changes)\n  };\n\n  async cached\u003CT>(category: string, key: string, fetcher: () => Promise\u003CT>): Promise\u003CT> {\n    const cacheKey = `${category}:${key}`;\n    const entry = this.store.get(cacheKey);\n    if (entry && entry.expiry > Date.now()) return entry.data;\n\n    const data = await fetcher();\n    this.store.set(cacheKey, { data, expiry: Date.now() + (this.TTL[category] || 30000) });\n    return data;\n  }\n\n  invalidate(category: string): void {\n    for (const key of this.store.keys()) {\n      if (key.startsWith(`${category}:`)) this.store.delete(key);\n    }\n  }\n}\n\nconst cache = new BlockchainCache();\nexport { cache };\n```\n\n### Step 2: Parallel Multi-Chain Fetching\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fparallel-fetch.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\nimport { cache } from '.\u002Fcache';\n\nconst CHAINS = [\n  { name: 'ethereum', network: Network.ETH_MAINNET },\n  { name: 'polygon', network: Network.MATIC_MAINNET },\n  { name: 'arbitrum', network: Network.ARB_MAINNET },\n  { name: 'base', network: Network.BASE_MAINNET },\n];\n\nasync function multiChainBalance(address: string) {\n  const results = await Promise.allSettled(\n    CHAINS.map(chain =>\n      cache.cached('balance', `${chain.name}:${address}`, async () => {\n        const client = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: chain.network });\n        const bal = await client.core.getBalance(address);\n        return { chain: chain.name, balance: (parseInt(bal.toString()) \u002F 1e18).toFixed(6) };\n      })\n    )\n  );\n\n  return results\n    .filter((r): r is PromiseFulfilledResult\u003Cany> => r.status === 'fulfilled')\n    .map(r => r.value);\n}\n```\n\n### Step 3: Batch NFT Metadata (Reduce CU)\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Fbatch-nft.ts\nimport { Alchemy, Network } from 'alchemy-sdk';\n\nconst alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_MAINNET });\n\n\u002F\u002F SLOW: Individual calls = 50 CU each\n\u002F\u002F async function slowGetMetadata(tokens) {\n\u002F\u002F   return Promise.all(tokens.map(t => alchemy.nft.getNftMetadata(t.contract, t.tokenId)));\n\u002F\u002F }\n\n\u002F\u002F FAST: Batch call = 50 CU total for up to 100 tokens\nasync function fastGetMetadata(tokens: Array\u003C{ contractAddress: string; tokenId: string }>) {\n  return alchemy.nft.getNftMetadataBatch(tokens);\n}\n```\n\n### Step 4: WebSocket for Real-Time Data\n\n```typescript\n\u002F\u002F src\u002Fperformance\u002Frealtime.ts\nimport { Alchemy, AlchemySubscription, Network } from 'alchemy-sdk';\n\nconst alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_MAINNET });\n\n\u002F\u002F Use WebSocket subscriptions instead of polling\nfunction watchAddress(address: string, onActivity: (tx: any) => void) {\n  alchemy.ws.on(\n    {\n      method: AlchemySubscription.PENDING_TRANSACTIONS,\n      toAddress: address,\n    },\n    (tx) => onActivity(tx)\n  );\n}\n\n\u002F\u002F Auto-reconnect on disconnect\nalchemy.ws.on('close', () => {\n  console.log('WebSocket disconnected — reconnecting in 5s');\n  setTimeout(() => alchemy.ws.connect(), 5000);\n});\n```\n\n## Output\n\n- TTL-based response cache matching data freshness requirements\n- Parallel multi-chain fetching (4 chains in \u003C 2s)\n- Batch NFT metadata (100x CU reduction)\n- WebSocket subscriptions replacing polling\n\n## Resources\n\n- [Alchemy Compute Units](https:\u002F\u002Fwww.alchemy.com\u002Fdocs\u002Freference\u002Fcompute-unit-costs)\n- [Alchemy WebSockets](https:\u002F\u002Fwww.alchemy.com\u002Fdocs\u002Freference\u002Fsdk-websockets)\n\n## Next Steps\n\nFor cost optimization, see `alchemy-cost-tuning`.\n\n",{"name":5,"tags":44,"author":46,"license":15,"version":47,"description":48,"allowed-tools":49,"compatible-with":50},[45,36,35,22,23],"saas","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Alchemy SDK performance with caching, batching, and multi-chain parallelism.\nUse when reducing latency for blockchain queries, optimizing CU consumption,\nor scaling dApps for high request volumes.\nTrigger: \"alchemy performance\", \"alchemy slow\", \"alchemy optimization\",\n\"alchemy caching\", \"alchemy batch requests\".\n","Read, Write, Edit, Bash(npm:*)","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Falchemy-performance-tuning",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill alchemy-performance-tuning",{"tool":66,"command":67},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill alchemy-performance-tuning",{"tool":69,"command":70},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill alchemy-performance-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Falchemy-performance-tuning\u002FSKILL.md",true,[],[75,89,99,108,114,121],{"skillNo":76,"name":77,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[86,87,88],"model","model hierarchy","model hierarchy skill",{"skillNo":90,"name":91,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[94],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[96,97,98],"MCP","zoom","zoom mcp",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[105,106,107,97],"sdk","zoom apps sdk","apps",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[110],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[119],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[116],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[123]]