win10 使用 SS+PAC 规则本身很耗费资源?还是 PAC 规则有问题?请大神帮忙看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
autulin
V2EX    Windows

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

  •  
  •   autulin 2016-11-26 20:19:01 +08:00 3078 次点击
    这是一个创建于 3317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了给笔记本省电,准备使用 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 的底层实现原理,不知道有什么解决办法吗?

    第 1 条附言    2016-11-26 21:48:34 +08:00
    解释一下为什么规则里面很多二级域名吧:
    我这个 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 规则来说,系统在执行上是作为 Javascript 来看待的?效率还是比较低的。
    第 2 条附言    2016-11-26 22:15:17 +08:00
    刚试了一下,使用 SS 自带的“从 GFWList 更新本地 PAC ”获取的 PAC ,也会出现同样的现象,只是资源占用少了一点而已
    第 3 条附言    2016-12-07 15:17:39 +08:00
    今天无意间发现 @Daniel65536 大神的 mono_pac( https://github.com/blackgear/mono_pac)
    看完之后豁然开朗,学习了
    13 条回复    2016-11-27 03:37:13 +08:00
    xupefei
        1
    xupefei  
       2016-11-26 20:23:07 +08:00
    我大概看了看,你这个是 O(n) 复杂度吧?

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


    @vugusurk 听过啊,所以在这里有啥妙用?请赐教
    autulin
        4
    autulin  
    OP
       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
        5
    bellchu  
       2016-11-26 20:52:05 +08:00 via iPad   1
    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
        6
    autulin  
    OP
       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
        7
    bellchu  
       2016-11-26 21:37:33 +08:00 via iPhone
    我这个 pac 基本靠 DNS 解析来,域名那块请忽略。
    @autulin
    Tink
        8
    Tink  
    PRO
       2016-11-26 21:38:37 +08:00
    讲道理你这个还不如直接用主域名呢
    autulin
        9
    autulin  
    OP
       2016-11-26 21:49:55 +08:00
    @Tink 域名都是用 py 从 hosts 啪出来的,没做什么优化,不过就算用主域名,数量也不少吧?
    Tink
        10
    Tink  
    PRO
       2016-11-26 21:57:25 +08:00
    @autulin 还行,并不大
    fhbyljj
        11
    fhbyljj  
       2016-11-26 22:23:55 +08:00 via Android
    @xupefei 这货也可以??
    favtony
        12
    favtony  
       2016-11-27 00:12:48 +08:00 via Android
    个人觉得可能是 win10 某个服务不支持 pac 导致出 bug 了一直占用 cpu...
    AASW2ss
        13
    AASW2ss  
       2016-11-27 03:37:13 +08:00
    @xupefei 感谢 edge 装了 ublock 终于清爽了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2513 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:19 PVG 23:19 LAX 07:19 JFK 10:19
    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