RainbowBird's Blog

以梦为马,不负韶华。

Intro

对比 zaf/resamplezeozeozeo/gomplerate 两个库的性能表现。

前者基于 CGO 和 libsoxr C 库,后者为纯 Go 实现。

测试结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> CGO_ENABLED=1 go test -tags soxr -bench=. -benchmem
goos: darwin
goarch: arm64
pkg: github.com/luoling8192/benchmark
cpu: Apple M4 Pro
BenchmarkResample_48k_to_16k_mono/purego/frames=240-12 592992 1911 ns/op 1004.65 MB/s 6768 B/op 18 allocs/op
BenchmarkResample_48k_to_16k_mono/purego/frames=480-12 294157 3782 ns/op 1015.24 MB/s 13552 B/op 20 allocs/op
BenchmarkResample_48k_to_16k_mono/purego/frames=960-12 152620 8024 ns/op 957.14 MB/s 36080 B/op 23 allocs/op
BenchmarkResample_48k_to_16k_mono/purego/frames=1920-12 72862 16160 ns/op 950.49 MB/s 80369 B/op 26 allocs/op
BenchmarkResample_48k_to_16k_mono/purego/frames=48000-12 2707 438796 ns/op 875.12 MB/s 2574854 B/op 46 allocs/op
BenchmarkResample_48k_to_16k_mono/soxr/frames=240-12 93116 12589 ns/op 152.51 MB/s 3352 B/op 5 allocs/op
BenchmarkResample_48k_to_16k_mono/soxr/frames=480-12 90708 12963 ns/op 296.22 MB/s 6680 B/op 5 allocs/op
BenchmarkResample_48k_to_16k_mono/soxr/frames=960-12 76482 13896 ns/op 552.69 MB/s 13592 B/op 5 allocs/op
BenchmarkResample_48k_to_16k_mono/soxr/frames=1920-12 56086 21418 ns/op 717.15 MB/s 27160 B/op 6 allocs/op
BenchmarkResample_48k_to_16k_mono/soxr/frames=48000-12 3708 295917 ns/op 1297.66 MB/s 650306 B/op 6 allocs/op
PASS
ok github.com/luoling8192/benchmark 12.594s

分析

小批量数据(240-1920 frames)

  • purego 完胜: 1.9-16 μs/op,吞吐量 950-1004 MB/s

  • soxr 较慢: 12-21 μs/op,吞吐量 152-717 MB/s

  • 原因: CGO 调用开销 + C 库初始化成本在小数据量时占主导

大批量数据(48000 frames,1秒音频)

  • soxr 反超: 295 μs/op,1297 MB/s

  • purego: 438 μs/op,875 MB/s

  • 提升: ~48% 性能提升,这才是 C 库该有的表现

内存分配对比

1
2
3
4
5
6
7
小批量 (240 frames):
purego: 6768 B/op, 18 allocs/op
soxr: 3352 B/op, 5 allocs/op ← 更少分配

大批量 (48000 frames):
purego: 2.57 MB/op, 46 allocs/op
soxr: 0.65 MB/op, 6 allocs/op ← 内存效率高 4 倍

结论

对于语音通话场景,可以选择纯 Go 实现,关闭 CGO 之后工程更易维护且性能不会太差。

可以使用 Tag 来控制切换使用 CGO 版本还是 Pure Go 版本。

git-filter-repo

安装 git-filter-repo

1
brew install git-filter-repo

克隆一个新的仓库,之后可以先查看 .git 文件夹的大小:

1
2
> du -sh .git
512M .git

可以通过下面的命令来查看都有哪些 blobs

1
git filter-repo --analyze

发现大多数都是二进制文件

1
2
3
4
5
6
7
8
9
10
11
> head .git/filter-repo/analysis/path-all-sizes.txt 
=== All paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name
470130748 178598150 2025-11-10 platform
243521416 113247661 2025-10-23 console
46809010 21775586 2025-08-20 c_app
54705026 20429606 2025-06-13 cmd/realtime/__debug_bin913888059
42808594 15271725 2025-07-04 hack/custom-gcl
54721890 10697777 2025-06-13 cmd/realtime/__debug_bin2869633227
54718178 10581905 2025-06-13 cmd/realtime/__debug_bin2562572020
54705026 7964676 2025-06-13 cmd/realtime/__debug_bin1245928177

那我们使用下面的命令来清理大于 10MB 的 blobs 文件

1
git filter-repo --strip-blobs-bigger-than 10M

清理完成之后,运行下面的命令来移除掉未引用的对象:

1
git gc --prune=now --aggressive

再次运行 analyze 命令查看

1
2
3
4
5
6
7
8
9
10
11
12
> git filter-repo --analyze
> head .git/filter-repo/analysis/path-all-sizes.txt
=== All paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name
632173 625888 <present> misc/test.png
6723898 181368 <present> api/generated/platform/v1/character.pb.go
186702 166919 <present> misc/test.wav
21519778 116651 <present> ent/mutation.go
3185297 81278 <present> go.sum
1850619 53671 <present> api/generated/realtime/v1/realtime.pb.go
14689422 38565 <present> api/generated/v1.swagger.json
744797 36489 <present> api/generated/console/v1/task.pb.go

发现刚刚显示的二进制文件已经没有了

再次查看 .git 大小

1
2
> du -sh .git
6.6M .git

这个时候推送到远端,应该使用 --force-with-lease 防止覆盖新的提交

1
git push --force-with-lease --all

最后要注意的是,所有的人应该拉取新的仓库,否则可能会把之前的记录再次推送上来导致清理无效。

背景

已经在软路由上配置好了 tailscale 之后,发现虽然其他设备可以连接到软路由,但是不能科学上网。

解决方法

进入 shellcrash 设置后,选择【7 内核进阶设置】-> 【3 配置公网及局域网防火墙】 -> 【3 自定义透明路由ipv4网段】-> 输入 100.0.0.0/8,保存并重启内核即可。

问题描述

可以访问互联网,Chrome 浏览器访问同网段的其他设备提示 ERR_ADDRESS_UNREACHABLE

Safari可以访问,Chrome 浏览器不能访问。

尝试过多种方式,如重置本地网络,刷新DNS缓存,切换DNS服务器,重置Chrome设置等,均无效。

通过 Wireshark 抓包发现 Chrome 访问内网设备直接都没流量出去。

解决方法

最后发现:需要在设置中打开本地网络访问权限。

文章来源

转载自:Mac 电脑访问网页提示 ERR_ADDRESS_UNREACHABLE

起因

经常用 macOS 的用户都知道,鼠标的滚动方向和触控板的滚动方向是一致的,即为自然滚动,但是在 Windows 上,没有一个很好的方法可以快速调节滚动方向到自然滚动。

网上有很多教程教如何使用注册表来修改鼠标的滚动方向,本文不再赘述。

阅读全文 »

方法

可以在 constant.ts 中直接 import package.json 并使用其中的版本号:

1
2
3
4
import pkg from '../package.json';

const version = pkg.version;
console.log(version); // 1.0.0

解决方法

创建一个 vue.d.ts 的文件,内容如下:

1
2
3
4
5
6
7
8
9
import Vue from 'vue'

declare module 'vue' {
export interface AllowedComponentProps extends HTMLAttributes {
onClick?: ((payload: MouseEvent) => void) | undefined
}

export default Vue
}
0%