SuperAPI AI 工具集

apify-performance-tuning

数据与分析

查看项目

更新于 10-16 09:08

技能介绍

用途

Apify Performance Tuning 是一个用于优化 Apify Actor 性能的技能,目标是在速度、成本与可靠性之间取得平衡。它适用于 Actor 运行缓慢、内存占用过高或被目标网站拦截的情况。技能覆盖 Crawlee 并发设置、内存分析、代理轮换策略、请求批处理,以及针对不同工作负载的爬虫选择。

主要能力

该技能围绕一个可重复的优化循环展开:测量基线、应用一项调整、重新测量。它提供六个步骤的完整流程,每一步都配有可直接复制的代码,详见 references/implementation.md。

  1. 测量基线:在改动前从运行统计中提取 runTimeSecs、requestsFinished、memAvgBytes 和 usageTotalUsd。没有改动前的数字就无法判断优化效果。
  2. 选择合适的爬虫:静态 HTML 或 JSON 使用 HttpCrawler/CheerioCrawler(低内存、速度快);仅在页面确实需要 JavaScript 渲染时使用 PlaywrightCrawler/PuppeteerCrawler。
  3. 调整并发:Cheerio 可将 maxConcurrency 提高到约 50;浏览器爬虫应保持较低(约 3-5),因为每个页面约消耗 200MB。通过 autoscaledPoolOptions 在该区间内自动调整。
  4. 优化内存:立即推送数据而非累积数组;对浏览器爬虫,在 preNavigationHooks 中屏蔽图片、CSS 和字体,并限制并发浏览器数量。
  5. 合理配置内存分配:计算单元按内存乘以时长计费,从低值开始(Cheerio 为 512 MB),仅在 Actor 内存不足时提高。
  6. 轮换代理并调整请求:从数据中心代理开始,遇到 403 或被拦截时回退到住宅代理;使用会话池进行 IP 轮换和封禁检测。

使用方式

技能提供最小起步骨架代码,将浏览器爬虫替换为 Cheerio 并立即推送数据:

import { CheerioCrawler } from 'crawlee';
import { Actor } from 'apify';

const crawler = new CheerioCrawler({
  maxConcurrency: 50,             // Cheerio is cheap — parallelize hard
  maxRequestsPerMinute: 300,      // But cap the rate to protect the target
  requestHandler: async ({ $, request }) => {
    await Actor.pushData({ url: request.url, title: $('title').text().trim() });
  },
});

前置条件包括:已有可测量基线性能的 Actor、理解 apify-sdk-patterns、可访问 Apify Console 中的 Actor 运行统计,以及环境中设置 APIFY_TOKEN 以便通过 ApifyClient 读取运行统计。

输出

应用该技能后会产生:基线对比调优后的指标(每分钟页面数、平均/最大内存、计算单元、每次运行成本);根据目标页面是否需要 JS 渲染给出的爬虫与并发建议;与工作负载匹配的内存分配值,并明确计算单元成本权衡;代理与会话策略(数据中心优先,住宅回退)以应对反爬拦截。可通过 references/monitoring.md 中的吞吐量日志器和前后影响表在爬取过程中实时确认收益。

适用场景

  • 静态页面上的缓慢 Playwright 爬取:页面为服务端渲染 HTML,改用 CheerioCrawler 并提高 maxConcurrency,可从 3 页/分钟提升到约 30 页/分钟(10 倍)。
  • 高负载下的内存溢出崩溃:PlaywrightCrawler 在 maxConcurrency: 20 时 OOM,将并发降至 3,在 preNavigationHooks 中屏蔽图片/CSS/字体,并在导航后调用 window.stop()。
  • 爬取中途被拦截(403):从数据中心代理开始,遇到 403 时用住宅代理重新入队请求并淘汰会话以强制更换 IP。
  • 运行成本过高:4GB 分配对 HTML 解析而言计费是所需的 8 倍,调整为 512 MB 并重新测量每次运行成本。

限制

技能本身不提供具体价格、平台支持范围或效果保证;所有优化效果取决于实际工作负载与目标站点。错误处理表列出了常见问题及解决方案:内存溢出崩溃(并发浏览器过多,降低 maxConcurrency)、爬取速度慢(并发过低,提高 maxConcurrency)、失败率高(反爬拦截,添加代理并降低并发)、运行成本高(内存过度配置,分析并降低分配)、爬取停滞(请求处理器超时,设置 requestHandlerTimeoutSecs)。

资源

  • references/implementation.md:完整六步流程及所有代码块
  • references/monitoring.md:爬取中吞吐量日志器与前后影响表
  • Crawlee Performance Guide
  • Actor Memory & Performance
  • Proxy Management

如需性能调优之外的成本优化,可参考同一包中的 apify-cost-tuning 技能,它涵盖计算单元预算、存储成本和调度策略。