不懂就问,科学上网软件的分流规则搞那么复杂干什么

2021-01-24 16:09:08 +08:00
 Winter1sComing

从网上导入别人弄好的规则往往都是上千条,把常用不常用的网站一个个全部列出来 按我的理解(不一定对),匹配 DOMAIN 、DOMAIN-SUFFIX 这类的规则可以 O(1)完成,但 KEYWORD 类的规则不就得 O(n)一个个匹配了么?请求数量一多不会造成很大的性能负担么,在移动设备上还会影响到续航。况且规则再多也总会遇到你访问的网站没有的情况,匹配了几千条规则最终又走到兜底规则去。 我这两天把规则全删了,只写了两条

GEOIP, CN, DIRECT
FINAL, PROXY

感觉和之前好像也没什么区别,如果有什么特殊需要,比如 Netflix 走香港节点,另外单独加就是了

6237 次点击
所在节点    问与答
44 条回复
love
2021-01-24 18:39:26 +08:00
keyword 类型要多少才会能有性能问题啊?起码几万起吧?你数了里面有多少 keyword 类型?
iamwho
2021-01-24 18:55:43 +08:00
因为每个人有不同需求,有隐私需求的人也会问你为什么不直接全局。

50 条规则和 50000 条规则的“性能负担”基本持平。
Jirajine
2021-01-24 19:29:03 +08:00
那些复杂规则非常不靠谱。某某网站,域名有哪些哪些,这种规则卵用没有。
分流纯按 IP 就可以了,至于 DNS,可以用一个外部软件。考虑到安全性推荐用一个大陆域名白名单,其余全走 doh 代理解析。
TypeError
2021-01-24 19:30:22 +08:00
还是 Android 的分应用代理方便
FS1P7dJz
2021-01-24 19:38:41 +08:00
性能开销完全没有你的以为的那么大,除非开发者存在严重的性能缺陷
这个某火箭还是某影子作者说过了,几万条规则也是没啥影响

楼主的需求其实我和差不多,但是你要考虑
第一,通用规则需要适合更多的人
第二,你这个规则其实会给服务器带来更多的负担,你自建自用没啥感觉,如果是公开 /半公开服务器,那么服务器的流量消耗就会成倍增加
第三,对于能直接访问的网站来说,你这个反而可能减速.对于一些网站来也,也容易导致账户出现异常(因为大量同 IP 登录)
lzl2000
2021-01-24 19:41:05 +08:00
我用国外网站一律走代理,简单方便
bipy
2021-01-24 20:16:06 +08:00
抗 DNS 污染(比如推特的 ip 可能被解析到国内)
对访问者 ip 有要求的网站(网飞,b 站港澳台,某些私人网站等)
laydown
2021-01-24 21:28:05 +08:00
的确,一般用楼主这么两条其实是没什么大的问题的。
xenme
2021-01-24 21:36:05 +08:00
规则匹配速度比 dns 查询速度快多了,而且还要考虑 dns 污染问题和兼容 cdn 的问题,这两条作为兜底可以,但只有这两条体验不如加点自己常用的黑白名单规则。

至于网上几万的规则肯定是没必要的
alo1719
2021-01-24 21:36:29 +08:00
KEYWORD 类规则的匹配并不是 O(n)的,算法可以生成字典树一次性匹配所有字符串,在几千条规则的数量级下,不会有什么性能上的损失。
ShuaiMakMak
2021-01-24 22:06:20 +08:00
主要还是各地区流媒体开太多
lostberryzz
2021-01-24 22:09:32 +08:00
一般的配置 DOMAIN-KEYWORD 只有几十条,基本上都是 DOMIAN-SUFFIX,几乎不会有什么性能损失,换来的是更好更快的响应速度(在 Rule List 里的直接代理 DNS 请求),另外还有隐私需求,不想通过国内 DNS 服务器查询部分敏感域名。而且不是境外的 IP 就一定要走代理的,有很多直连速度也很快,有很多有实时性要求不适合走代理。
czhfrank
2021-01-24 22:13:34 +08:00
@TypeError 请教安卓怎么按应用代理的?
chairuosen
2021-01-24 22:19:39 +08:00
@czhfrank #33 ssrr
xionger
2021-01-24 22:51:40 +08:00
你看 brook 的就简单到极致了
IP 列表和域名列表 比如 a.com 就包含了 xx.a.com, xx.xx.a.com 等等
systemcall
2021-01-24 22:57:35 +08:00
有一些网站只是主站和登录、验证之类的服务器连不上,CDN 是可以连上去的。你可以多试试,可以省不少流量钱
再就是有些 CDN 是全球的,你问 DNS,不同地区的 DNS 给出的结果还不一样,结果就是可能一些网站很慢或者没法用
要是不差钱的话,感觉可以默认走代理,走代理不行的时候再直连,也不用想方设法节省流量了
UnitTest
2021-01-24 23:24:15 +08:00
我说一点, 一般来说规则就几千条, 上万条的我没有尝试过性能如何。
几千条的遍历对于,遍历之后对比的字符串也比较短,对于目前的 cpu 来说问题不大。你每秒的网络请求其实没太多,有很多是长连接。
如果有必要的话,几千条转成 map 之后就不用遍历了,只需要额外消耗一点点内存。目前设备基本上都不差这点内存。
Rorysky
2021-01-25 00:06:39 +08:00
首先如果你是 macOS,那所有的操作系统更新、音乐之类流量会全部走 代理……
TypeError
2021-01-25 00:25:52 +08:00
@czhfrank ss,v2ray,clash 的 Android 客户端都自带这功能,可以选择白名单黑名单 app 走直连不代理
sasalemma
2021-01-25 01:22:48 +08:00
还不如直接挂墙内墙外的 dns,看返回速度,那个快就决定用直连或者代理不更合理?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/747883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX