打开Fiddler,网测点Rules菜单,试步选Performance,网测再点Simulate Modem Speeds。试步就这么一下,网测你的试步网络就变慢了。但别急着测,网测这个预设值太粗暴,试步2G网络下连微信都刷不出来,网测测了也白测。试步
真正要做的网测,是试步改脚本。Rules → Customize Rules,网测找到m_SimulateModem那段。试步里面有两行关键代码:
oSession["request-trickle-delay"] = "300"; oSession["response-trickle-delay"] = "150"; 数字单位是网测毫秒。300意味着每上传1KB数据,延迟300毫秒。150就是每下载1KB,延迟150毫秒。这个值怎么定?得看你模拟什么场景。3G网络大概上行200ms、下行100ms,4G的话上行50ms、下行20ms。我一般测弱网直接拉到上行500、下行300,够狠,能暴露大部分问题。
改完保存,Fiddler会自动重载脚本。这时候再勾上Simulate Modem Speeds才生效。不勾?改了也白改。
有个坑我踩过。Fiddler默认只对HTTP/HTTPS生效,如果你测的是WebSocket或者gRPC,得额外装插件或者改代码。还有,HTTPS要解密才能限速,Tools → Options → HTTPS里勾上Decrypt HTTPS traffic,不然Fiddler只能看到隧道,限速逻辑根本不触发。
测的时候别只盯着一个接口。我见过有人只测登录接口,限速后登录转圈3秒,觉得“还行”。结果用户进首页要加载20个请求,每个都慢,叠加起来直接白屏8秒。真实弱网是并发请求一起堵,不是单个请求慢。所以Fiddler限速后,用浏览器开DevTools的Network面板,看整体加载瀑布图。哪个请求卡住后续,一眼就能看出来。
另外,Fiddler的限速是全局的。你开了Simulate Modem Speeds,所有经过Fiddler的流量都慢。但有时候只想针对某个域名限速。那就得写更细的脚本,在OnBeforeRequest里判断URL,只对特定host设置delay。比如:
if (oSession.HostnameIs("api.example.com")) { oSession["request-trickle-delay"] = "800"; oSession["response-trickle-delay"] = "400"; } 这样其他请求正常跑,只有目标接口慢。测起来更精准。
还有一点,Fiddler限速模拟的是延迟和带宽,但不模拟丢包。真实弱网里丢包才是杀手。要测丢包得用Clumsy或者Network Link Conditioner。我一般Fiddler测延迟敏感逻辑,Clumsy测重传和超时。两个配合用。
最后说个实际案例。之前调一个视频播放器,Fiddler限速下行200ms/KB,播放器缓冲圈转不停。查代码发现预加载逻辑是串行的,第一个分片没下完不请求第二个。改成并行预加载3个分片,弱网下缓冲时间从12秒降到4秒。这种问题,不实际限速根本发现不了。
测完记得关掉Simulate Modem Speeds,不然你正常上网也卡。别问我怎么知道的。