上一篇 下一篇 分享链接 返回 返回顶部

用 Coze 做个网站测速助手:自动找出拖慢页面的元凶,附源码

发布人:慈云数据-客服中心 发布时间:19小时前 阅读量:4

Coze 如何提高网站速度|附源码

网站速度不仅影响用户体验,也直接影响 SEO、转化率和服务器成本。一个加载缓慢的网站,往往会让用户在首屏还没出现之前就离开;而一个响应迅速的网站,则更容易获得搜索引擎青睐,并提升用户停留时间。

本文将围绕 “如何借助 Coze 提高网站速度” 展开,介绍一种实用方案:使用 Coze 搭建一个「网站性能分析助手」,自动分析网页速度问题,并结合前端优化手段生成可执行建议。同时,文章会提供一套可运行的源码示例,包括:

  • 前端页面性能检测;
  • 调用接口收集性能数据;
  • 将性能数据发送给 Coze;
  • 让 Coze 返回优化建议;
  • 常见网站速度优化方案;
  • Node.js 示例源码。

说明:Coze 本身并不是 CDN、缓存服务器或构建工具,它不能直接让你的网站“自动变快”。但 Coze 可以作为 AI 自动化分析工具,帮助你快速定位性能瓶颈、生成优化建议、辅助代码改造,从而间接提升网站速度。


一、为什么网站速度很重要?

网站速度通常会影响以下几个方面:

1. 用户体验

用户打开网站时,如果页面超过 3 秒还没有明显内容展示,跳出率会显著提升。尤其是移动端网络环境复杂,页面速度更容易成为用户流失的关键因素。

2. SEO 排名

Google、百度等搜索引擎都越来越重视页面体验。网站加载速度、首屏渲染时间、交互延迟等指标,都会影响搜索排名。

3. 转化率

对于电商、工具站、SaaS 产品而言,页面速度每提升一点,都可能带来转化率提升。比如商品页加载变快,用户更容易完成下单;表单页面响应更快,用户更愿意提交信息。

4. 服务器资源成本

页面资源过大、接口响应慢、重复请求过多,都会增加服务器压力。优化速度不仅是用户侧体验优化,也能降低带宽和服务器成本。


二、网站速度常见指标

在优化网站速度之前,需要先明确应该关注哪些指标。

1. FCP:首次内容绘制

FCP,全称 First Contentful Paint,表示浏览器首次渲染出文本、图片、SVG 等内容的时间。

如果 FCP 过慢,用户会感觉页面一直是空白。

2. LCP:最大内容绘制

LCP,全称 Largest Contentful Paint,表示页面中最大内容元素完成渲染的时间。它通常和首屏大图、标题、主内容区域相关。

LCP 是非常重要的用户体验指标。

3. CLS:累计布局偏移

CLS,全称 Cumulative Layout Shift,表示页面加载过程中元素位置发生意外移动的程度。

例如用户准备点击按钮时,突然广告加载出来把按钮挤走,这就是糟糕的 CLS。

4. TTFB:首字节时间

TTFB,全称 Time To First Byte,表示浏览器发出请求后收到服务器第一个字节的时间。

TTFB 慢通常意味着服务器响应慢、后端处理耗时、数据库查询慢或网络链路不佳。

5. INP:交互到下一次绘制

INP,全称 Interaction to Next Paint,用于衡量用户交互后的页面响应速度。

如果按钮点击后页面卡住,或者输入框输入时明显延迟,通常 INP 会比较差。


三、Coze 在网站速度优化中的作用

Coze 可以帮助我们做什么?

1. 自动分析性能数据

我们可以在网页中收集性能指标,例如 FCP、LCP、CLS、TTFB 等,然后将这些数据发送给后端,再由后端转发给 Coze。

Coze 根据这些数据返回分析结果,比如:

  • 首屏加载过慢;
  • 图片资源过大;
  • JS 文件阻塞渲染;
  • CSS 文件未压缩;
  • 后端接口响应慢;
  • 页面存在布局偏移问题;
  • 缓存策略不合理。

2. 自动生成优化建议

Coze 可以根据页面类型返回更具体的建议,例如:

  • 首页:优先优化首屏图片、字体加载、关键 CSS;
  • 商品详情页:优化商品图片、评论接口、推荐商品接口;
  • 博客文章页:优化静态资源缓存、图片懒加载、代码高亮库;
  • 后台管理页:优化表格渲染、组件按需加载、大数据分页。

3. 辅助生成代码

你可以让 Coze 根据检测结果生成优化代码,例如:

  • 图片懒加载代码;
  • Nginx 缓存配置;
  • Vite 构建优化配置;
  • Next.js 图片优化配置;
  • Express 静态资源缓存代码;
  • 前端性能埋点代码。

4. 形成自动化巡检流程

你还可以定时检测网站速度,把检测结果交给 Coze 分析,然后生成日报或周报。

例如每天凌晨自动检测:

  • 首页;
  • 登录页;
  • 商品详情页;
  • 搜索结果页;
  • 用户中心页。

然后将结果发送到飞书、企业微信或邮件中。


四、整体实现思路

本文实现一个简单的「网站速度分析助手」,整体流程如下:

用户访问网页
   ↓
前端 Performance API 收集性能指标
   ↓
发送到 Node.js 后端
   ↓
后端调用 Coze API
   ↓
Coze 返回网站速度分析建议
   ↓
前端展示优化报告

我们会实现以下功能:

  1. 前端收集页面加载性能数据;
  2. 后端接收性能数据;
  3. 后端调用 Coze;
  4. 返回 AI 分析报告;
  5. 页面展示分析结果。

五、准备工作

在开始之前,你需要准备:

  • Node.js 环境;
  • 一个 Coze 账号;
  • 一个已经创建好的 Coze Bot;
  • Coze API Token;
  • Bot ID;
  • 前端页面或测试站点。

项目目录结构如下:

coze-speed-demo
├── package.json
├── server.js
├── .env
└── public
    ├── index.html
    └── speed.js

六、创建 Coze Bot

进入 Coze 平台后,新建一个 Bot,例如命名为:

网站性能分析助手

你可以给 Bot 设置如下提示词。

Bot 提示词示例

你是一个资深 Web 性能优化专家,擅长分析网站速度问题。
用户会给你一组网站性能数据,包括 FCP、LCP、CLS、TTFB、页面资源数量、JS 体积、CSS 体积、图片体积等。

请你完成以下任务:

1. 判断当前网站性能是否健康;
2. 找出最可能影响速度的瓶颈;
3. 按优先级给出优化建议;
4. 给出具体可执行方案;
5. 如果需要,请给出代码示例;
6. 输出内容使用中文 Markdown 格式;
7. 结论要清晰,不要泛泛而谈。

这样配置之后,Coze 就能围绕网站速度优化进行更稳定的回答。


七、前端性能采集源码

public/index.html 中写一个简单页面:




  
  
  Coze 网站速度分析 Demo
  


  

Coze 网站速度分析 Demo

点击下面按钮,采集当前页面性能数据,并发送给 Coze 生成优化建议。

性能数据

等待采集...

Coze 优化建议

等待分析...

接着在 public/speed.js 中编写采集逻辑。

function getNavigationTiming() {
  const navEntries = performance.getEntriesByType("navigation");

  if (!navEntries || !navEntries.length) {
    return {};
  }

  const nav = navEntries[0];

  return {
    dnsLookup: nav.domainLookupEnd - nav.domainLookupStart,
    tcpConnect: nav.connectEnd - nav.connectStart,
    tls: nav.secureConnectionStart > 0
      ? nav.connectEnd - nav.secureConnectionStart
      : 0,
    ttfb: nav.responseStart - nav.requestStart,
    responseDownload: nav.responseEnd - nav.responseStart,
    domParse: nav.domInteractive - nav.responseEnd,
    domContentLoaded: nav.domContentLoadedEventEnd - nav.startTime,
    load: nav.loadEventEnd - nav.startTime
  };
}

function getResourceTiming() {
  const resources = performance.getEntriesByType("resource");

  const result = {
    total: resources.length,
    jsCount: 0,
    cssCount: 0,
    imgCount: 0,
    fontCount: 0,
    otherCount: 0,
    totalTransferSize: 0,
    jsTransferSize: 0,
    cssTransferSize: 0,
    imgTransferSize: 0
  };

  resources.forEach((item) => {
    const name = item.name || "";
    const size = item.transferSize || 0;

    result.totalTransferSize += size;

    if (name.endsWith(".js")) {
      result.jsCount += 1;
      result.jsTransferSize += size;
    } else if (name.endsWith(".css")) {
      result.cssCount += 1;
      result.cssTransferSize += size;
    } else if (
      name.endsWith(".png") ||
      name.endsWith(".jpg") ||
      name.endsWith(".jpeg") ||
      name.endsWith(".webp") ||
      name.endsWith(".gif") ||
      name.endsWith(".svg")
    ) {
      result.imgCount += 1;
      result.imgTransferSize += size;
    } else if (
      name.endsWith(".woff") ||
      name.endsWith(".woff2") ||
      name.endsWith(".ttf")
    ) {
      result.fontCount += 1;
    } else {
      result.otherCount += 1;
    }
  });

  return result;
}

function observeWebVitals() {
  return new Promise((resolve) => {
    const metrics = {
      fcp: 0,
      lcp: 0,
      cls: 0
    };

    try {
      const paintEntries = performance.getEntriesByType("paint");
      const fcpEntry = paintEntries.find((item) => item.name === "first-contentful-paint");

      if (fcpEntry) {
        metrics.fcp = fcpEntry.startTime;
      }

      const lcpObserver = new PerformanceObserver((entryList) => {
        const entries = entryList.getEntries();
        const lastEntry = entries[entries.length - 1];

        if (lastEntry) {
          metrics.lcp = lastEntry.startTime;
        }
      });

      lcpObserver.observe({
        type: "largest-contentful-paint",
        buffered: true
      });

      const clsObserver = new PerformanceObserver((entryList) => {
        for (const entry of entryList.getEntries()) {
          if (!entry.hadRecentInput) {
            metrics.cls += entry.value;
          }
        }
      });

      clsObserver.observe({
        type: "layout-shift",
        buffered: true
      });

      setTimeout(() => {
        lcpObserver.disconnect();
        clsObserver.disconnect();
        resolve(metrics);
      }, 1500);
    } catch (error) {
      resolve(metrics);
    }
  });
}

async function collectMetrics() {
  const navigation = getNavigationTiming();
  const resources = getResourceTiming();
  const vitals = await observeWebVitals();

  return {
    url: location.href,
    userAgent: navigator.userAgent,
    timestamp: new Date().toISOString(),
    navigation,
    resources,
    vitals
  };
}

async function analyzeSpeed() {
  const metricsBox = document.getElementById("metrics");
  const reportBox = document.getElementById("report");

  metricsBox.textContent = "正在采集性能数据...";
  reportBox.textContent = "正在请求 Coze 分析...";

  const metrics = await collectMetrics();

  metricsBox.textContent = JSON.stringify(metrics, null, 2);

  const response = await fetch("/api/analyze-speed", {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify(metrics)
  });

  const data = await response.json();

  reportBox.textContent = data.report || "没有返回分析结果";
}

document.getElementById("analyzeBtn").addEventListener("click", analyzeSpeed);

这段代码主要完成三件事:

  1. 使用 performance.getEntriesByType("navigation") 获取页面加载阶段耗时;
  2. 使用 performance.getEntriesByType("resource") 统计 JS、CSS、图片等资源情况;
  3. 使用 PerformanceObserver 获取 FCP、LCP、CLS 等关键指标。

八、Node.js 后端源码

先创建 package.json

{
  "name": "coze-speed-demo",
  "version": "1.0.0",
  "description": "Use Coze to analyze website speed",
  "main": "server.js",
  "scripts": {
    "dev": "node server.js"
  },
  "dependencies": {
    "axios": "^1.7.0",
    "dotenv": "^16.4.5",
    "express": "^4.18.3"
  }
}

安装依赖:

npm install

创建 .env 文件:

COZE_API_TOKEN=你的_Coze_API_Token
COZE_BOT_ID=你的_Bot_ID
COZE_USER_ID=website-speed-user
PORT=3000

然后创建 server.js

require("dotenv").config();

const express = require("express");
const axios = require("axios");
const path = require("path");

const app = express();

app.use(express.json({
  limit: "1mb"
}));

app.use(express.static(path.join(__dirname, "public")));

const COZE_API_TOKEN = process.env.COZE_API_TOKEN;
const COZE_BOT_ID = process.env.COZE_BOT_ID;
const COZE_USER_ID = process.env.COZE_USER_ID || "default-user";

function formatBytes(bytes) {
  if (!bytes) return "0 KB";

  const kb = bytes / 1024;
  if (kb < 1024) {
    return `${kb.toFixed(2)} KB`;
  }

  return `${(kb / 1024).toFixed(2)} MB`;
}

function buildPrompt(metrics) {
  const navigation = metrics.navigation || {};
  const resources = metrics.resources || {};
  const vitals = metrics.vitals || {};

  return `
请分析以下网站性能数据,并给出网站速度优化建议。

页面地址:
${metrics.url}

采集时间:
${metrics.timestamp}

浏览器信息:
${metrics.userAgent}

核心 Web 指标:
- FCP:${Number(vitals.fcp || 0).toFixed(2)} ms
- LCP:${Number(vitals.lcp || 0).toFixed(2)} ms
- CLS:${Number(vitals.cls || 0).toFixed(4)}

导航加载指标:
- DNS 查询:${Number(navigation.dnsLookup || 0).toFixed(2)} ms
- TCP 连接:${Number(navigation.tcpConnect || 0).toFixed(2)} ms
- TLS 握手:${Number(navigation.tls || 0).toFixed(2)} ms
- TTFB:${Number(navigation.ttfb || 0).toFixed(2)} ms
- 响应下载:${Number(navigation.responseDownload || 0).toFixed(2)} ms
- DOM 解析:${Number(navigation.domParse || 0).toFixed(2)} ms
- DOMContentLoaded:${Number(navigation.domContentLoaded || 0).toFixed(2)} ms
- Load:${Number(navigation.load || 0).toFixed(2)} ms

资源统计:
- 资源总数:${resources.total || 0}
- JS 文件数量:${resources.jsCount || 0}
- CSS 文件数量:${resources.cssCount || 0}
- 图片数量:${resources.imgCount || 0}
- 字体文件数量:${resources.fontCount || 0}
- 其他资源数量:${resources.otherCount || 0}
- 总传输体积:${formatBytes(resources.totalTransferSize || 0)}
- JS 传输体积:${formatBytes(resources.jsTransferSize || 0)}
- CSS 传输体积:${formatBytes(resources.cssTransferSize || 0)}
- 图片传输体积:${formatBytes(resources.imgTransferSize || 0)}

请按照以下格式输出:

## 1. 总体结论

## 2. 主要性能瓶颈

## 3. 优先级最高的优化建议

## 4. 可直接落地的代码或配置示例

## 5. 后续监控建议

要求:
- 使用中文;
- 具体分析,不要空泛;
- 如果指标异常,请明确指出;
- 建议按照高、中、低优先级排序。
`;
}

async function callCoze(prompt) {
  const url = "https://api.coze.com/open_api/v2/chat";

  const response = await axios.post(
    url,
    {
      bot_id: COZE_BOT_ID,
      user: COZE_USER_ID,
      query: prompt,
      stream: false
    },
    {
      headers: {
        Authorization: `Bearer ${COZE_API_TOKEN}`,
        "Content-Type": "application/json"
      },
      timeout: 30000
    }
  );

  const messages = response.data && response.data.messages;

  if (Array.isArray(messages)) {
    const answer = messages.find((item) => item.type === "answer");
    if (answer && answer.content) {
      return answer.content;
    }
  }

  return JSON.stringify(response.data, null, 2);
}

app.post("/api/analyze-speed", async (req, res) => {
  try {
    if (!COZE_API_TOKEN || !COZE_BOT_ID) {
      return res.status(500).json({
        error: "Coze 配置缺失,请检查 COZE_API_TOKEN 和 COZE_BOT_ID"
      });
    }

    const metrics = req.body;
    const prompt = buildPrompt(metrics);
    const report = await callCoze(prompt);

    res.json({
      report
    });
  } catch (error) {
    console.error(error.response ? error.response.data : error.message);

    res.status(500).json({
      error: "分析失败",
      detail: error.response ? error.response.data : error.message
    });
  }
});

const port = process.env.PORT || 3000;

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

启动项目:

npm run dev

然后访问:

http://localhost:3000

点击「分析网站速度」,即可看到性能数据和 Coze 返回的优化建议。


九、如何真正提高网站速度?

上面的代码可以帮助我们发现问题,但真正提升速度还需要具体优化。下面总结一些最常见、最有效的优化方法。


十、优化图片资源

图片通常是网页中体积最大的资源之一。很多网站慢,并不是因为代码复杂,而是因为图片没有压缩。

1. 使用 WebP 或 AVIF

相比 JPG、PNG,WebP 和 AVIF 通常体积更小。

示例:


  
  
  首页 Banner

2. 图片懒加载

首屏之外的图片不需要立即加载,可以使用懒加载。

商品图片

3. 指定图片宽高

给图片设置 widthheight 可以减少布局偏移,降低 CLS。

文章封面

十一、优化 JavaScript

JavaScript 是影响页面速度的重要因素。JS 文件过大,会导致下载慢、解析慢、执行慢。

1. 使用 defer

如果脚本不需要阻塞 HTML 解析,可以加上 defer

2. 按需加载

对于大型组件或页面,可以使用动态导入。

async function openChart() {
  const { renderChart } = await import("./chart.js");
  renderChart();
}

3. 减少不必要的第三方脚本

很多网站会引入统计、客服、广告、热力图等第三方脚本。这些脚本可能会拖慢首屏速度。

建议:

  • 非必要不引入;
  • 能异步就异步;
  • 能延迟就延迟;
  • 重要页面减少外部脚本数量。

十二、优化 CSS

CSS 会影响渲染过程,尤其是首屏 CSS。

1. 压缩 CSS

上线前应该压缩 CSS 文件,减少体积。

如果使用 Vite,可以开启构建压缩:

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
  build: {
    minify: "terser",
    cssCodeSplit: true
  }
});

2. 提取关键 CSS

首屏必须使用的 CSS 可以内联,非首屏 CSS 延迟加载。

3. 删除无用 CSS

很多项目长期迭代后,会残留大量无用样式。可以使用工具分析并清理,例如 PurgeCSS、UnoCSS、Tailwind 的内容扫描能力等。


十三、开启 Gzip 或 Brotli 压缩

服务器开启压缩后,可以显著减少 HTML、CSS、JS、JSON 等文本资源的传输体积。

Nginx Gzip 配置示例

gzip on;
gzip_comp_level 6;
gzip_min_length 1k;
gzip_types
  text/plain
  text/css
  application/javascript
  application/json
  application/xml
  image/svg+xml;

Brotli 配置示例

如果服务器支持 Brotli,可以开启更高效的压缩:

brotli on;
brotli_comp_level 6;
brotli_types
  text/plain
  text/css
  application/javascript
  application/json
  image/svg+xml;

一般来说,Brotli 对静态资源的压缩效果比 Gzip 更好。


十四、设置浏览器缓存

静态资源应该尽可能利用浏览器缓存。比如 JS、CSS、图片等文件,如果文件名中带有 hash,就可以设置较长缓存时间。

Nginx 缓存配置

location ~* \.(js|css|png|jpg|jpeg|gif|webp|svg|woff2)$ {
  expires 30d;
  add_header Cache-Control "public, max-age=2592000";
}

如果你的构建产物文件名类似:

main.8f3a9c.js
style.a72b1e.css

则可以把缓存时间设置得更长,例如一年:

location ~* \.(js|css|png|jpg|jpeg|gif|webp|svg|woff2)$ {
  expires 365d;
  add_header Cache-Control "public, max-age=31536000, immutable";
}

十五、降低 TTFB

如果 Coze 分析结果显示 TTFB 很高,说明服务器响应第一个字节的时间较长。常见原因包括:

  • 数据库查询慢;
  • 接口没有缓存;
  • 后端业务逻辑复杂;
  • 服务器配置不足;
  • 跨地域访问延迟高;
  • SSR 页面渲染耗时较长。

Express 缓存示例

对于不频繁变化的数据,可以使用内存缓存。

const cache = new Map();

function cacheMiddleware(ttl = 60 * 1000) {
  return function (req, res, next) {
    const key = req.originalUrl;
    const cached = cache.get(key);

    if (cached && Date.now() - cached.time < ttl) {
      return res.json(cached.data);
    }

    const originalJson = res.json.bind(res);

    res.json = function (data) {
      cache.set(key, {
        time: Date.now(),
        data
      });

      return originalJson(data);
    };

    next();
  };
}

app.get("/api/products", cacheMiddleware(30000), async (req, res) => {
  const products = await getProductsFromDatabase();

  res.json(products);
});

对于生产环境,更推荐使用 Redis、CDN 缓存或边缘缓存。


十六、使用 CDN 加速静态资源

CDN 可以把静态资源分发到离用户更近的节点,减少网络延迟。

适合放到 CDN 的资源包括:

  • 图片;
  • CSS;
  • JavaScript;
  • 字体;
  • 视频;
  • 下载文件。

使用 CDN 后,页面中的资源地址可能类似:



Banner

如果你的网站用户分布在全国甚至全球,CDN 通常是最直接有效的优化方式之一。


十七、减少首屏请求数量

页面请求越多,加载越容易变慢。尤其是在移动端,过多请求会带来明显延迟。

可以从以下方面优化:

  1. 合并非关键请求;
  2. 删除无用资源;
  3. 首屏只加载必要内容;
  4. 非首屏模块延迟加载;
  5. 第三方脚本延后加载;
  6. 使用 HTTP/2 或 HTTP/3 提高多路复用能力。

十八、字体优化

字体文件也可能拖慢页面,特别是中文字体文件体积很大。

优化建议:

  • 优先使用系统字体;
  • 字体文件使用 woff2
  • 使用 font-display: swap
  • 不要加载完整中文字体;
  • 对字体进行子集化处理。

示例:

@font-face {
  font-family: "MyFont";
  src: url("/fonts/my-font.woff2") format("woff2");
  font-display: swap;
}

font-display: swap 可以让浏览器先使用系统字体展示文本,等自定义字体加载完成后再替换,避免文字长时间不可见。


十九、避免布局偏移

如果 CLS 较高,说明页面加载过程中元素位置变化较大。

常见解决方案:

1. 图片和视频设置尺寸

封面

2. 广告位预留空间

广告加载中...
.ad-placeholder {
  width: 100%;
  min-height: 250px;
  background: #f6f6f6;
}

3. 不要在首屏顶部突然插入内容

例如页面加载后突然在顶部插入通知栏,会导致整个页面下移。可以提前预留空间,或者使用浮层方式展示。


二十、结合 Coze 做自动化巡检

如果只是在开发阶段手动点击分析,价值有限。更好的方式是定时巡检。

你可以使用定时任务,每天访问关键页面,采集性能数据,然后交给 Coze 生成报告。

简单流程:

定时任务
   ↓
访问目标 URL
   ↓
采集性能指标
   ↓
调用 Coze
   ↓
生成 Markdown 报告
   ↓
推送到企业微信、飞书或邮件

如果结合 Lighthouse、Puppeteer、Playwright,效果会更好。比如使用 Playwright 自动打开网页并采集指标,再把结果发送给 Coze 分析。


二十一、一个实用的 Coze 分析模板

你可以在实际项目中使用下面这个模板,把采集到的数据填进去:

你是 Web 性能优化专家,请分析以下页面性能数据。

页面 URL:
{{url}}

页面类型:
{{pageType}}

核心指标:
- FCP:{{fcp}} ms
- LCP:{{lcp}} ms
- CLS:{{cls}}
- TTFB:{{ttfb}} ms
- Load:{{load}} ms

资源情况:
- JS 数量:{{jsCount}}
- JS 体积:{{jsSize}}
- CSS 数量:{{cssCount}}
- CSS 体积:{{cssSize}}
- 图片数量:{{imgCount}}
- 图片体积:{{imgSize}}
- 总资源数量:{{resourceCount}}
- 总资源体积:{{totalSize}}

请输出:
1. 当前页面速度评分;
2. 最严重的 3 个问题;
3. 优先级最高的 5 条优化建议;
4. 对前端、后端、运维分别给出建议;
5. 给出可复制的代码示例;
6. 用 Markdown 输出。

这个模板可以让 Coze 的输出更稳定,也更适合团队协作。


二十二、源码完整运行步骤

最后整理一下运行步骤。

1. 创建项目

mkdir coze-speed-demo
cd coze-speed-demo

2. 创建目录

mkdir public
touch server.js
touch public/index.html
touch public/speed.js
touch .env
touch package.json

3. 安装依赖

npm install express axios dotenv

4. 配置 Coze

.env 中填写:

COZE_API_TOKEN=你的_Coze_API_Token
COZE_BOT_ID=你的_Bot_ID
COZE_USER_ID=website-speed-user
PORT=3000

5. 启动服务

node server.js

6. 打开页面

http://localhost:3000

点击按钮后即可开始分析。


二十三、注意事项

1. 不要在前端暴露 Coze API Token

Coze API Token 必须放在后端环境变量中,不能写在前端 JS 中。否则任何用户都可以在浏览器中看到你的 Token,造成安全风险。

2. 性能数据需要多次采集

单次性能数据可能受到网络波动影响。建议至少采集 3 到 5 次,再取平均值。

3. 区分实验室数据和真实用户数据

本文示例采集的是当前用户浏览器环境下的数据,属于真实用户数据的一种简化形式。实际项目中,可以结合:

  • Lighthouse;
  • PageSpeed Insights;
  • Web Vitals;
  • Chrome UX Report;
  • 前端监控系统。

4. AI 建议需要人工判断

Coze 可以快速生成分析建议,但不能完全替代工程师判断。你应该结合项目实际情况决定是否采纳。


二十四、总结

Coze 不能像 CDN、缓存、压缩工具那样直接改变网站资源加载方式,但它可以成为网站速度优化流程中的「智能分析助手」。通过前端 Performance API 收集页面性能指标,再交给 Coze 分析,我们可以快速获得结构化的优化建议。

本文提供的源码实现了一个完整流程:

  • 前端采集 FCP、LCP、CLS、TTFB 等指标;
  • 后端接收性能数据;
  • 后端调用 Coze;
  • Coze 返回 Markdown 优化报告;
  • 页面展示分析结果。

在实际项目中,你还可以继续扩展:

  • 接入 Lighthouse;
  • 使用 Playwright 定时巡检;
  • 把报告推送到飞书或企业微信;
  • 对多个页面生成性能周报;
  • 结合构建工具自动分析 JS 包体积;
  • 对慢接口自动生成后端优化建议。

如果你的网站存在加载慢、首屏白屏、图片过大、JS 阻塞、接口响应慢等问题,那么使用 Coze 搭建一个网站性能分析助手,是一种成本较低、落地较快的优化方案。真正的网站速度提升,来自持续监控、持续分析和持续优化,而 Coze 可以让这个过程变得更高效。

目录结构
全文