今天发现一个提升图片加载速度的方法就是使用服务器代理

最近在做我的网站的时候,发现调用nano banana接口时,返回的图片是一个国外地址,国内在客户端加载的时候会比较慢。于是研究了下如何提高速度,问了AI找到一个简单的方法,就是使用服务器代理。

php 复制代码
export async function GET(request: NextRequest) {
  try {
    const { searchParams } = new URL(request.url);
    const imageUrl = searchParams.get('url');
    
    if (!imageUrl) {
      return NextResponse.json({ error: 'Missing image URL' }, { status: 400 });
    }

    // 验证URL是否安全
    if (!imageUrl.startsWith('http://') && !imageUrl.startsWith('https://')) {
      return NextResponse.json({ error: 'Invalid URL' }, { status: 400 });
    }

    // 下载图片
    const response = await fetch(imageUrl, {
      headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Accept': 'image/*',
      },
      // 设置超时
      signal: AbortSignal.timeout(30000), // 30秒超时
    });
    
    if (!response.ok) {
      return NextResponse.json({ error: 'Failed to fetch image' }, { status: 500 });
    }

    const imageBuffer = await response.arrayBuffer();
    const contentType = response.headers.get('content-type') || 'image/jpeg';

    // 返回图片数据,设置缓存头
    return new NextResponse(imageBuffer, {
      headers: {
        'Content-Type': contentType,
        'Cache-Control': 'public, max-age=31536000, immutable', // 缓存1年
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET',
        'Access-Control-Allow-Headers': 'Content-Type',
        'Content-Length': imageBuffer.byteLength.toString(),
      },
    });

  } catch (error) {
    console.error('Proxy image error:', error);
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
  }
}

然后在后端生成图片之后,调用服务器代理。

javascript 复制代码
if (generatedImageUrl && typeof generatedImageUrl === 'string' && generatedImageUrl.startsWith('http')) {
                try {
                  // 使用代理URL,这样图片会通过你的服务器加载,速度更快
                  const proxyUrl = `/api/proxy-image?url=${encodeURIComponent(generatedImageUrl)}`;
                  generatedImageUrl = proxyUrl;
                } catch (conversionError) {
                  console.error('Failed to create proxy URL:', conversionError);
                  // 如果转换失败,保持原URL
                }
              }

这样处理之后,加载图片快多了。不知道这样会不会对服务端性能有啥影响,有其他更好的办法吗,比如在服务端转化为base64位图片。

相关推荐
JavaPub-rodert2 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
Highcharts.js9 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格
JudithHuang10 小时前
React 嵌套路由与布局
前端·react.js·arcgis·react·react router
前端小D13 小时前
React Native项目开发(iOS侧为例)
javascript·react native·react.js
志尊宝2 天前
AI原生前端开发(042):AI辅助的路由设计与优化
javascript·react.js·ai-native
znsoft2 天前
MaClaw(码卡龙)技术拆解:一个 Go + React 的可自进化智能体平台
开发语言·react.js·golang
濮水大叔2 天前
React/Next.js 生态里,有没有 CabloyJS 这样的全栈框架?
react.js·全栈·next.js
前端小D2 天前
React Native Android 项目搭建
android·react native·react.js
Highcharts.js4 天前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
liuchangng5 天前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目