win10 使用 SS+PAC 规则本身很耗费资源?还是 PAC 规则有问题?请大神帮忙看看

2016-11-26 20:19:01 +08:00
 autulin

为了给笔记本省电,准备使用 Edge 浏览器+SS+PAC 代理规则来优雅的实现科学上网,同时由于要利用 IPV6 来节省校园网流量,于是根据使用的 ipv6 的 hosts 修改出了这份白名单 PAC 规则( https://raw.githubusercontent.com/autulin/update-ipv6-hosts-and-generate-proxy-whitelist/41197d5ddcd513991dd685f33a5f9064f9badd33/pac.txt ),但是在使用后发现, SS 使用 PAC 规则时,进程中的 svchosts.exe 进程资源占用会特别的大(内存占用 100MB-600MB 之间, CPU 偶尔 60%-90%之间跳动),这个在另外一台 win10 上也成功复现,所以来请教大神,是 win10 使用 SS+PAC 规则本身很耗费资源?还是我这个 PAC 规则有问题?不是很懂 PAC 的底层实现原理,不知道有什么解决办法吗?

2672 次点击
所在节点    Windows
13 条回复
xupefei
2016-11-26 20:23:07 +08:00
我大概看了看,你这个是 O(n) 复杂度吧?

Edge 为什么不用 AdBlock 或 uBlock (暂未上架,需手工安装 https://github.com/nikrolls/uBlock-Edge )呢?
vugusurk
2016-11-26 20:25:56 +08:00
LZ 听说过正则吗
autulin
2016-11-26 20:28:37 +08:00
@xupefei AdBlock 和 uBlock 是屏蔽广告的吧,能实现 proxy 规则?


@vugusurk 听过啊,所以在这里有啥妙用?请赐教
autulin
2016-11-26 20:40:31 +08:00
不知道为啥不能 append 主题,我解释一下为什么没有用正则表达式来涉及这些规则:
我这个 PAC 规则里面的网址都是用 py 自动从 hosts 里面提取出来的,涉及到的域名很多,手动用正则来描述这些域名的确可以节省规则条数,但是人工的工作量太大,所以是目前现在这个样子。

但是我在 Chrome 的 SwitchOmega 或者 Firefox 的 AutoProxy 插件之中用这同样的规则做了一套 AutoProxy 的规则( https://github.com/autulin/update-ipv6-hosts-and-generate-proxy-whitelist/raw/master/autoproxy-whitelist-for-byr.txt ),并没有什么性能上的问题。我想可能对于 PAC 规则来说,系统在执行上本身没有什么优化吧。
@xupefei
@vugusurk
bellchu
2016-11-26 20:52:05 +08:00
function FindProxyForURL(url, host) {

// If the hostname matches, send direct.
if ( shExpMatch(host, "(*.taobao.com|taobao.com)") ||
shExpMatch(host, "(*.wechat.com|wechat.com)"))
return "DIRECT";

// If the requested website is hosted within the internal network, send direct.
if (isPlainHostName(host) ||
shExpMatch(host, "*.local") ||
isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0") ||
isInNet(dnsResolve(host), "111.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "123.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "180.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "220.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "103.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "205.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "140.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "110.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "202.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "211.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "117.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "42.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "103.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "125.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "61.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "203.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "123.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "140.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "219.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "119.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "182.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "192.100.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "14.0.0.0", "255.0.0.0"))
return "DIRECT";


// DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
return "PROXY 127.0.0.1:1080";

}



自己微调吧,虽然我不用 SS ,但这是标谁格式,肯定能用,这么短,可以避免一些麻烦。
autulin
2016-11-26 21:01:15 +08:00
@bellchu
嗯,我找时间试试看这种形式性能会不会高一点,不过你可以看我需要的白名单域名那么多,感觉这里会还是会很长很长啊

// If the hostname matches, send direct.
if ( shExpMatch(host, "(*.taobao.com|taobao.com)") ||
shExpMatch(host, "(*.wechat.com|wechat.com)"))
return "DIRECT";
bellchu
2016-11-26 21:37:33 +08:00
我这个 pac 基本靠 DNS 解析来,域名那块请忽略。
@autulin
Tink
2016-11-26 21:38:37 +08:00
讲道理你这个还不如直接用主域名呢
autulin
2016-11-26 21:49:55 +08:00
@Tink 域名都是用 py 从 hosts 啪出来的,没做什么优化,不过就算用主域名,数量也不少吧?
Tink
2016-11-26 21:57:25 +08:00
@autulin 还行,并不大
fhbyljj
2016-11-26 22:23:55 +08:00
@xupefei 这货也可以??
favtony
2016-11-27 00:12:48 +08:00
个人觉得可能是 win10 某个服务不支持 pac 导致出 bug 了一直占用 cpu...
AASW2ss
2016-11-27 03:37:13 +08:00
@xupefei 感谢 edge 装了 ublock 终于清爽了

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

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

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

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

© 2021 V2EX