FelisCatus / SwitchyOmega

Manage and switch between multiple proxies quickly & easily.
GNU General Public License v3.0
21.28k stars 3.19k forks source link

SwitchyOmega 疑似会影响不经过代理的网站加载速度 #1556

Closed elecalion closed 6 years ago

elecalion commented 6 years ago

环境: Windows 7,Chrome 67 使用 SOCKS5 代理,Auto Switch 切换

步骤: 使用自动代理规则上网冲浪一段时间,期间会访问需要代理的网站和绕过代理的网站。一段时间后,访问微博或者网易云音乐等内陆网站的加载时间会明显变长(3-5s)。 这个时候禁用 SwitchyOmega 扩展,再访问上述网站,加载时间恢复到 1s 以内。

其他:

  1. 从 SwitchyOmega 的图标来看,内陆网站并没有经过代理。
  2. 出现问题之后即使将代理模式切换为 direct,依然很慢。只有禁用扩展再启用,速度恢复正常。

感觉挺奇怪的问题,如果有什么需要查看的信息我再帮忙抓一下。感谢。

FelisCatus commented 6 years ago

我想了半天,感觉和代理有关的假设都说不通,我觉得比较怀疑是因为内存占用问题导致整个浏览器都慢下来了。

下次麻烦刚开启浏览器的时候,启用自动切换,看下各进程内存占用,然后等觉得卡的时候再看一次内存占用。然后用扩展管理中的开发者模式,点开 SwitchyOmega 的 background.html 做一个 Heap Dump 上传到这里。

elecalion commented 6 years ago

对比了一下内存占用,V8 Proxy Resolver 和 Switchy Omega 都没有特别高,Switchy Omega 出问题的时候在 120MB 左右。其他的 GPU process 内存占用会比较大,不过正常的时候也一直是这样。

另外发现一个现象,出问题之后通过如下步骤也可以恢复正常。 chrome://net-internals/#dns 中执行 clear host cache。

猜测是缓存了一个错误的 remote 解析的 dns?

Hash Dump 感觉会暴露不少历史记录,有没有办法先删除一些?

FelisCatus commented 6 years ago

如果 DNS 缓存清了就能解决的话,那我只能说不是 SwitchyOmega 的问题了…… SwitchyOmega 只负责设置代理设置,具体的实现,包括 DNS 等都是 Chromium 做的。

总之现在应该需要有一位对 Chromium 实现比较了解的开发者才能继续分析问题了。或者可以试试看直接去 Chromium 反馈。

elecalion commented 6 years ago

检查了 chrome://net-internals/#dns 的记录,发现有时候会获取到 8.8.8.8 返回的结果,看起来像是通过 remote dns 获取的。清空之后再重试,有时候又能获取到本地 dns 的 IP。(用 nslookup 对比试过两个 dns 返回的结果是不同的)

所以想排查看看是不是自己的规则有什么问题。

不过检查 pac 的时候没有看到可疑的,另外看到如下一些非用户设定的规则,不知道是干什么用的。

        "+__ruleListOf_Auto Switch": function(url, host, scheme) {
                "use strict";
                if (/^https:\/\/share\.dmhy\.org/.test(url)) return "DIRECT";
                if (/^http:\/\/blog\.ontrac\.com/.test(url)) return "DIRECT";
FelisCatus commented 6 years ago

DNS 预读的问题? https://github.com/FelisCatus/SwitchyOmega/wiki/DNS-and-SOCKS-proxy#%E4%B8%AD%E6%96%87

自动切换规则里设置使用规则列表的话,当然是会从规则列表下载规则的,然后规则会被生成到 PAC 里,在 __ruleListOf_xxxx 里面。如果不需要的话可以关闭规则列表。

elecalion commented 6 years ago

DNS 预读应该是会获取到本地 DNS 吧。

这个问题是国内网站错误的使用了 remote DNS 解析的结果。

elliot-bia commented 5 years ago

我也感觉到了,代理国内的网站的时候会很直观的比较慢

i-cooltea commented 4 years ago

@FelisCatus 建议可以在切换模式之后加入刷新dns的功能

或者另一个方法是配合这个插件使用 在切换完之后手动刷新一下DNS https://chrome.google.com/webstore/detail/dns-flusher-for-chrome/okehcbagcgnhifhcppklpmillcdnaclp

jiejie12530 commented 4 years ago

嗯,我也遇到了这个问题,感受极度不好,我决定再试试dnsflush,一度放弃proxy

wwjay9 commented 4 years ago

+1,我也遇到了同样的问题,甚至重装系统后只装了Chrome问题依旧

Lost-umbrella commented 1 year ago

问题+1,关闭插件之后速度明显快了很多,国内网站很明显