背景
我們的產品在弱網環境下經常出現加載問題,影響用戶體驗甚至服務不可用。所以在測試過程中就需要模擬弱網絡環境進行測試、問題復現,讓開發調優
fiddler模擬弱網環境
設置
打開fiddler,默認情況下Rules->Performance->Simulate Modem Speeds是未勾選狀態,此時網絡正常。當選中此選項後,網速就會變慢,打開網頁就會加載很久,這樣就實現了弱網效果。
設置.png
備註:如果想了解(上傳/下載)網速具體數值,可以訪問http://www.speedtest.cn/網站,進行測試
限速原理
Fiddler限速是以網絡延遲的方式實現的,網絡延遲時間*網速=傳輸字節數
點擊Rules – Customize Rules(快捷鍵Ctrl + R)打開Fiddler ScriptEditor,或者直接點開右側主頁籤的FiddlerScript。
打開Script方式1.png
打開Scrip方式2.png
打開該文件後,Ctrl + F 查找m_SimulateModem標誌位,可以看到如下代碼
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "150";
}
註釋說明:
request-trickle-delay中的值代表每KB的數據被上傳時會被延時多少毫秒;
response-trickle-delay則對應下載時每KB的數據會被延時多少毫秒。
比如你要模擬上傳速度100KBps的網絡,那上傳延遲就是1KB/100KBps=0.01s=10ms,就改成10
默認設置下上傳延時爲300ms下載延時爲150ms,大致模擬出來的寬帶如下:
上傳帶寬 = 1KB/300ms = (1 * 8/1000) /0.300 ≈ 0.027Mbps
下載帶寬 = 1KB/150ms = (1 * 8/1000) /0.150 ≈ 0.053Mbps
(1MB = 1024 KB ≈ 1000 KB 爲了運算簡便就用了1000的倍數,忽略誤差)
實際帶寬是在計算所得的基礎上乘2,至於原因,沒有深究
上傳帶寬=((1*8/1000)/0.300)*2.0≈0.106Mbps
下載帶寬=((1*8/1000)/0.150)*2.0≈0.053Mbps
假如我們要模擬2M左右的寬帶((1* 8/1000)/ x )*2.0=2
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "8";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "8";
設置網絡環境參數
1、查找到if (m_SimulateModem)語句,修改代碼。模擬網絡帶寬不是恆定的一個低速的值,而是一定範圍內隨機抖動,下面的腳本實現了一個隨機延時量設置,使得網絡帶寬不是恆定爲一個低速的值。
static function randInt(min, max) {
return Math.round(Math.random()*(max-min)+min);
}
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = ""+randInt(100,200);
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = ""+randInt(1,50);
}
2、在代碼裏找到onBeforeRequest,這裏定義了在發送請求前做什麼。加入如下代碼可以實現延遲:
oSession["request-trickle-delay"]="3000"; //請求階段延遲3秒
oSession["response-trickle-delay"]="3000"; //響應階段延遲3秒
添加代碼.png
備註:每次編輯並保存配置文件後,Simulate Modem Speeds選項會被取消,需要重新勾選。