faceair / clash-speedtest

clash speedtest
MIT License
503 stars 47 forks source link

关于测速可能的优化方向 #4

Closed AirportR closed 1 year ago

AirportR commented 1 year ago

你好。我在阅读源码后,大致了解了测速过程。

在这里我想询问一下:

1、测速使用的URL地址是一个100MB大小的文件,但似乎未进行程序终止的操作,我的意思是,如果一个节点下载速度非常慢,是否会导致主线程一直在等待这个文件下载完毕。才会进行下一个节点的测速。我个人思考应该会的吧?它需要一直等待100MB的文件下载完毕,然后才计算速度结果。这在实际测试过程中,是否会产生不可控因素?等待时间过长也是有可能的。 2、是否考虑多线程测速,毫无疑问,这个程序是单线程测速。 3、延迟测试无缓冲值,也就是说网络波动大的时候,通常它的结果是偏上的。另外,clash官方实现有一个interface名为URLTest,它里面至少也是两次延迟测试取平均。 4、在拉取 http(s)订阅链接的时候,最好设置一个请求头: {headers: "clash"},告诉服务器要拉取的是clash格式的配置文件,这个对V2board有奇效,目前V2Board的通用链接是无法拉取到yaml格式的。

faceair commented 1 year ago
  1. http client 上配置了 timeout 的,默认 5s 有参数可以调,不会无限制等待下去的,超时后就按实际已经接收到的数据大小来计算速率
  2. 暂不考虑,用户侧带宽不一定充足,并发开启后可能会影响结果的准确性
  3. 可以考虑测多次取均值,但会额外增加一倍的流量开销,可以设置选项但默认不开启
  4. 这个建议挺好的,我觉得可以去抄下 clash 更新订阅那部分的 http client 的 header

综上,3、4 是可以接受的,欢迎 PR

AirportR commented 1 year ago

有空我会尝试的,感谢!