google 的 br 压缩算法是真的强。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
3dwelcome
V2EX    前端开发

google 的 br 压缩算法是真的强。

  •  3
     
  •   3dwelcome 2022-02-09 01:49:58 +08:00 6229 次点击
    这是一个创建于 1418 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近想让 Web 服务器支持静态文件压缩传输,顺便对比了一下主流压缩算法。

    结果 BR 秒杀 zip 就不用说了,还能轻松把 winrar 给干掉,就连大名鼎鼎的 7z 算法,也只能勉强打个平手。BR 甚至还能对最强优化后的 PNG 进行二次压缩。

    最惨的是 facebook ,和 google br 同期推出了一个 zstd 压缩性算法,可惜 google 的 chrome 那么多版本迭代下来,都没打算支持,也就无缘 web 领域了。

    在移动互联网时代,节省的每一个字节,都是珍贵的。

    17 条回复    2022-02-10 01:54:30 +08:00
    muzuiget
        1
    muzuiget  
       2022-02-09 02:26:46 +08:00
    Facebook 哪里惨了,混得更厉害好不好。zstd 都进 Linux 内核了,各种底层例如文件系统和包管理都已经使用了。

    Chrome 不支持是因为未接受为 Web 标准而已。
    timpaik
        2
    timpaik  
       2022-02-09 02:33:23 +08:00 via Android
    br 默认是针对 web 优化的(例如 html 标签),zstd 数据量大才有效果,web 这类小文件肯定选 br 啊
    duke807
        3
    duke807  
       2022-02-09 02:48:59 +08:00 via Android
    我嵌入式 linux 跑 busybox httpd 服器,把所有文件成 gzip 格式,然後掉原始 html 、js 、css 、片 等,器自下版本的文件(原理是器求服器文件的候,告服器可以返回哪些格式的算法,只有所有算法服器都不支持,才返回未的原文件)

    其它格式主流器默不都支持吧?一般都是 gzip 兼容性最好吧

    至於通用,我一般用 3 :tar 、tar.bz2 、tar.xz

    tar 其有,只是打包

    tar.bz2 兼率和解速度

    tar.xz 是致,解速度慢一些

    你可以比一下 tar.xz 的率和你的 br ,看哪更
    chutsetien
        4
    chutsetien  
       2022-02-09 03:18:35 +08:00
    文本压缩的话,PPMd 还是最无敌的。
    yyfearth
        5
    yyfearth  
       2022-02-09 03:52:35 +08:00
    zstd 不适合 web zstd 主要的优势是快而不是压缩率
    br 的速度肯定没办法和 zstd 比 但是压缩速度对 web 而言没那么重要 尤其是静态资源
    br 就是专门为 web 优化的算法

    @duke807 br 是压缩慢但是解压缩还是比较快的而且不太占资源
    xz 如果是高压缩率的话 压缩和解压都太慢 而且太占资源了 不太适合浏览器
    0ZXYDDu796nVCFxq
        6/div>
    0ZXYDDu796nVCFxq  
       2022-02-09 07:58:40 +08:00 via Android
    压缩速度和计算资源消耗是 web 压缩最重要的指标啊,远比压缩率重要
    所以 xz bz2 都不适合 web 压缩
    br 的优势在于两端有预置的字典,能在小文件(几十到几百 K )条件下的流压缩做到很高的压缩率
    br 的优势也仅限于 web ,和 zstd 不是一个方向
    tcp
        7
    tcp  
       2022-02-09 09:29:24 +08:00
    个人感觉这个数据反而说明 7z 更厉害啊
    3dwelcome
        8
    3dwelcome  
    OP
       2022-02-09 09:32:20 +08:00
    @duke807 "一般都是 gzip 兼容性最好吧", 我搜了一下,浏览器对于 br 兼容性意外的好,可能是 br 算法出的早,是 2013 年出的。再过两年,就十周年了。

    还有如果你真的喜欢 gzip ,那还是推荐用 google 家的 zopfli 。

    我就没见过比 zopfli 更强的 gzip 压缩算法,在压缩率上面,可谓举世无双。
    3dwelcome
        9
    3dwelcome  
    OP
       2022-02-09 09:33:34 +08:00
    @tcp 7z 超强压缩是出了名的慢,不提了,伤感。
    duke807
        10
    duke807  
       2022-02-09 11:42:10 +08:00 via Android
    @3dwelcome ios 器不支持 br:
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding

    服器端,我提到的 busybox httpd 也只支持 gzip

    有,我想的是,其 web 有和很大,用 br 取代 gzip 感外的好也不多,譬如我一目,前段取了用建,才知道把一 3.5 MB 的 wasm 文件用 gzip 到 1.5M 左右,比一半小,其它文件也全部了一下,改善很大,如果用 br 估也不小,就算到 1.4M ,改善也不大
    3dwelcome
        11
    3dwelcome  
    OP
       2022-02-09 12:26:01 +08:00
    @duke807 用 br 没准能压倒 1.0M 以下,这新算法比 zip 厉害太多了。

    用 google zopfli 的 gzip 算法,也能减少 10%的大小,这是基本上是恒定的。
    duke807
        12
    duke807  
       2022-02-09 12:34:31 +08:00 via Android
    @3dwelcome 上面有人 br 是 html 等文本化的,wasm 是二制程序,用 br 有

    不知道 zopfli 是啥,我用 gzip 是直接用 gzip 命令,一命令所有文件都好了,linux 境
    3dwelcome
        13
    3dwelcome  
    OP
       2022-02-09 12:41:21 +08:00
    @duke807 “上面有人 br 是 html 等文本化的”

    昨晚实测,br 能把 gzip 后的二进制文件都再压缩一大截。

    按理说 gzip 已经是压缩格式,不能二次压缩,可就和 winrar 能压缩 zip 原理一样,br 也能。

    zopfli 是 google 的 gzip 定制版压缩算法。压缩的时候,内部可以设置递归参数(iterator),能恒定减少生成 gzip 的体积。所谓恒定,就是对于任何 gzip 文件,用 zopfli 都能少个 10%。
    linglin0924
        14
    linglin0924  
       2022-02-09 17:08:42 +08:00
    这个测试图,怎么生成的
    3dwelcome
        15
    3dwelcome  
    OP
       2022-02-09 19:27:13 +08:00
    jim9606
        16
    jim9606  
       2022-02-09 21:20:23 +08:00   1
    我觉得 zstd 用的范围更广。目前可以用在 Linux 内核镜像压缩、ZFS/BtrFS 透明压缩、PKZIP ( zip 文件规范)可选编码算法、deb/Arch 软件包压缩算法。brotli 目前主要就浏览器和 Android OTA 包在用。
    7z 默认算法是 LZMA/LZMA2 ,也就是 xz 用的算法。LZMA 是典型用于极限追求压缩率的场景,例如冷存储和路由器 ROM 之类需要极限紧凑无所谓慢的场合。要速度都不会用这个。zstd 在此的对比优势是在高压缩级别能达到 LZMA 近似的压缩率(通常还是大一丢丢)但解压更快。
    brotli 有一个硬编码的静态字典,zstd 没有,但可以训练生成一个定制字典。也就是说 brotli 的高效是建立在对输入内容有偏向性假设的前提上的。所以我不否认 Web 内容上 brotli 是个好的选择。至于 brotli 和 zopfli 选哪个看你网站的客户端统计吧,或者全都要。
    另外我不知道你图里的 zstd 是不是用默认的 3 级压缩,你有没有试过 19 级?

    @timpaik
    RFC8478/RFC8878 已经标准化 zstd 对应的 HTTP Content-Encoding 和 MIME ,想用都是能用的。
    Chromium 拒绝支持竞争技术也不是一天两天的事了,到现在都没支持 HEVC 。
    3dwelcome
        17
    3dwelcome  
    OP
       2022-02-10 01:54:30 +08:00
    @jim9606 大佬好专业,真是涨姿势。

    zstd 有命令行,就无脑选了 19 级,压缩速度是真快。好像听说游戏资源压缩里,用的也比较多。
    关于     帮助文档     自助推广系统     博客    API     FAQ     Solana     2546 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 10:08 PVG 18:08 LAX 02:08 JFK 05:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86