1.1 预压缩 gzip压缩数据
gzip-1.3.12-1-bin\bin>gzip NoLod_1.b3dm
1.2 nginx配加载预压缩
- 为什么使用预压缩 ,因为直接压缩需消耗cpu资源。当然性能好可无视这一步。
gzip on; # 开启GZIP压缩
# 设置GZIP压缩的最小文件大小,小于此大小的文件不进行压缩
# 例如:256字节,通常推荐设置一个合理的值,避免压缩小文件反而增大开销
gzip_min_length 256;
# 设置GZIP压缩的缓冲区大小和数量
# 16个8KB的缓冲区,用于存储压缩数据
gzip_buffers 16 8k;
# 设置GZIP压缩级别 (1-9,9是最高压缩,但CPU消耗也最大)
# 5是一个比较平衡的选择,兼顾了压缩率和性能
gzip_comp_level 5;
# 设置Nginx向代理请求的HTTP版本
# 如果代理服务器不支持HTTP/1.1,可以设置为1.0
gzip_http_version 1.1;
# 哪些浏览器不应该使用GZIP压缩(例如IE6,它可能对压缩有问题)
gzip_disable "msie6";
# 是否在响应头中添加 "Vary: Accept-Encoding"
# 告知代理服务器或缓存服务器,响应是根据客户端的Accept-Encoding请求头变化的
gzip_vary on;
# ----------------------------------------------------
# 需要进行GZIP压缩的MIME类型
# ----------------------------------------------------
# 这是最重要的一步,确保B3DM文件被压缩
# 通常,B3DM文件被视为 application/octet-stream。
# 同时也包含了其他常见的Web文件类型。
gzip_types
# application/json
application/octet-stream;
server {# 3D Tiles数据
listen 7778;
server_name localhost;
location / {
gzip_static on; # Nginx 会查找 .gz 文件并提供它
root html/cs;
index index.html;
add_header Access-Control-Allow-Headers '*';
# 允许请求地址跨域 * 做为通配符
add_header Access-Control-Allow-Origin "*" always;
# 允许跨域的请求方法
add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}
}
1.3 cesium 加载
const tileset = await Cesium.Cesium3DTileset.fromUrl(
"http://localhost:7778/tileset.json",
{}
);
实测:启用压缩可减少2/3得网络传输时间,前提是文本较多得数据使用gzip,如果是单个模型数据较大建议使用其他压缩方式(如:Draco压缩)。