使用 webp_server 加速 Discourse 图片加载

通过将所有 png/jpg 图片转换成 webp,减少加载图片所需流量和时间

cat /etc/nginx/sites-enabled/disxj.conf

server {
...
   location @fallback_static {
          root $public;
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }
...
         location ~* \.(webp|avif)$ {
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }
      location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff|ico)$ {
          add_header Access-Control-Allow-Origin *;
          proxy_pass http://127.0.0.1:2350;
          #proxy_pass http://127.0.0.1:2350$uri;
          proxy_connect_timeout 3s;
          proxy_read_timeout 5s;
          error_page 502 503 504 = @fallback_static;
      }
...

cat /srv/webpsh/docker-compose.yml

services:
  webp:
    image: webpsh/webp-server-go
    # image: ghcr.io/webp-sh/webp_server_go
    restart: unless-stopped
      #command: ["/usr/bin/webp-server", "--config", "/etc/config.json", "-prefetch", "-jobs=1"]
    environment:
      - MALLOC_ARENA_MAX=1
      - LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
      # - LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.5.6
      - WEBP_ALLOWED_TYPES=jpg,png,jpeg,bmp,gif,heic,nef,webp,avif,tif,tiff,ico
        #- WEBP_CONVERT_TYPES=webp
    volumes:
      - /var/www/discourse/public:/opt/pics
      - ./exhaust:/opt/exhaust
      - ./metadata:/opt/metadata
    ports:
      -  127.0.0.1:2350:3333
    deploy:
      resources:
        limits:
          memory: 500M
          cpus: '1.5'

怎么好像没生效

WebP.SE 有一个类似的云服务,应该是可以套 Cloudflare CDN 来使用,我感觉图片这类服务其实对延时不是很敏感,而且有了 Cache,用户侧加载速度其实挺快的

类似于 B 站用的那种边缘函数,在 CDN 节点对图片进行动态转码或调整

做过一个类似的,用的是国内腾讯云的 EO 的边缘函数,在边缘节点对图像进行处理,看看浏览器的 Accept 里面支不支持 avif,支持的话再转换为 avif

Discourse has already optimized some images, so they remain jpeg.

I tested a large one, got:

2 Likes

经过了 webp 优化,以及 nginx 启用了 Discourse 默认启用的 brotli 压缩(2.5M json gzip 后 226k, brotli 后 172k),禁用 ruby YJIT 改善内存占用,重启后,page speed 有显著改善

peed Index
desktop: 1.7 → 1.0 s
mobile: 4.2 → 2.6s