LambdaLinker 2024-07-06 22:19 采纳率: 33.3%
浏览 13
已结题

flutter网页应用用python的http服务器访问速度慢

我刚开发了一个flutter应用,准备deploy到网页上,我已经编译完了,并用一个python的http-server来处理请求

import http.server
import ssl

# 设置端口
PORT = 8000

# 设置处理程序
handler = http.server.SimpleHTTPRequestHandler

# 启动HTTP服务器
httpd = http.server.HTTPServer(('0.0.0.0', PORT), handler)

# 包装为HTTPS服务器
httpd.socket = ssl.wrap_socket(httpd.socket,
                               keyfile="/etc/letsencrypt/live/sdszalg.cn/privkey.pem",
                               certfile="/etc/letsencrypt/live/sdszalg.cn/cert.pem",
                               server_side=True)

print(f"Serving on https://0.0.0.0:{PORT}")
httpd.serve_forever()

但是这玩意巨慢无比,我感觉因为加载每一个动态资源都需要发送get请求,所以加载速度特别慢,而且并发一起来就更慢了,怎么办啊
看AI给我的回复是说可以用cdn、负载均衡,但是负载均衡成本太大,cdn我不会配置,有什么好方法吗
谢谢大家

  • 写回答

14条回答 默认 最新

  • 杨同学* 2024-07-06 22:25
    关注

    该回答结合ChatGPT4o及杨同学*共同作答, 如有帮助,还请采纳。
    使用Python的http.server模块搭建的HTTP服务器虽然方便,但在性能和并发处理上表现不佳,不适合生产环境。针对你所描述的问题,这里有一些可以提升性能的方案:

    1. 使用更高性能的HTTP服务器

    使用专业的Web服务器(如Nginx或Apache)来替代http.server。这些服务器在处理并发请求和静态资源方面表现更好。

    安装和配置Nginx

    1. 安装Nginx

      在Linux系统上,可以使用以下命令安装Nginx:

      sudo apt update
      sudo apt install nginx
      
    2. 配置Nginx

      创建一个新的Nginx配置文件或修改默认配置文件,指向你的Flutter Web应用目录:

      server {
          listen 80;
          server_name your_domain.com;
      
          location / {
              root /path/to/your/flutter/web/build;
              try_files $uri $uri/ /index.html;
          }
      
          listen 443 ssl; # managed by Certbot
          ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
          include /etc/letsencrypt/options-ssl-nginx.conf;
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
      }
      
    3. 测试和重启Nginx

      测试配置是否正确:

      sudo nginx -t
      

      重启Nginx以应用新的配置:

      sudo systemctl restart nginx
      

    2. 使用CDN

    CDN(内容分发网络)可以极大地提高静态资源的加载速度。常用的CDN提供商包括Cloudflare、AWS CloudFront和Google Cloud CDN。

    以下是如何使用Cloudflare配置你的站点:

    1. 注册和添加站点

      注册一个Cloudflare账户并添加你的域名。Cloudflare会自动检测你的DNS记录。

    2. 配置DNS

      在Cloudflare中更新你的DNS记录,使其指向你的服务器IP地址。

    3. 启用CDN和HTTPS

      Cloudflare会自动启用CDN功能,并提供免费的HTTPS证书。

    3. 优化静态资源

    通过压缩和缓存静态资源,可以进一步提升加载速度。

    使用工具压缩静态资源

    1. 压缩CSS和JavaScript

      使用工具如uglify-jscsso压缩你的CSS和JavaScript文件。

    2. 启用Gzip压缩

      在Nginx中启用Gzip压缩:

      server {
          gzip on;
          gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
          gzip_min_length 1000;
          gzip_proxied any;
          gzip_vary on;
      }
      

    设置浏览器缓存

    配置Nginx以设置浏览器缓存头:

    location / {
        root /path/to/your/flutter/web/build;
        try_files $uri $uri/ /index.html;
        expires 1d;
        add_header Cache-Control "public, max-age=86400";
    }
    

    4. 使用更高效的Python Web框架

    如果需要使用Python处理某些逻辑,可以考虑使用更高效的Python Web框架,如Flask或Django,并将其与Nginx配合使用。

    使用Flask的示例:

    1. 安装Flask

      pip install Flask
      
    2. 创建Flask应用

      from flask import Flask, send_from_directory
      
      app = Flask(__name__, static_folder='web/build')
      
      @app.route('/')
      def serve():
          return send_from_directory(app.static_folder, 'index.html')
      
      @app.route('/<path:path>')
      def static_proxy(path):
          return send_from_directory(app.static_folder, path)
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0', port=8000)
      
    3. 配置Nginx代理

      将Nginx配置为反向代理:

      server {
          listen 80;
          server_name your_domain.com;
      
          location / {
              proxy_pass http://127.0.0.1:8000;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      
          listen 443 ssl; # managed by Certbot
          ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
          include /etc/letsencrypt/options-ssl-nginx.conf;
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
      }
      

    通过上述优化,能够显著提高你的Flutter Web应用的加载速度和并发处理能力。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 赞助了问题酬金15元 7月6日
  • 创建了问题 7月6日