使用 webp_server 加速 Discourse 图片加载
admin
#1 · 通过将所有 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

ぜーんぶ弾けなーい!
admin
#4 · Discourse has already optimized some images, so they remain jpeg.
I tested a large one, got:

admin
#5 ·
IO 经过了 webp 优化,以及 nginx 启用了 Discourse 默认启用的 brotli 压缩(2.5M json gzip 后 226k, brotli 后 172k),禁用 ruby YJIT 改善内存占用,重启后,page speed 有显著改善
https://pagespeed.web.dev/analysis/https-xjtu-app/5907npnd4e?form_factor=desktop
peed Index
desktop: 1.7 -> 1.0 s
mobile: 4.2 -> 2.6s