作者:CG? 于?2023-09-06
一、問(wèn)題表現(xiàn)
? ? 企業(yè)在用的內(nèi)部系統(tǒng),B/S架構(gòu)届惋,某個(gè)功能點(diǎn)擊彈出的子頁(yè)面加載時(shí)間 > 30 秒,嚴(yán)重影響使用體驗(yàn)和工作效率菠赚。
二脑豹、排查前的想法
? ? 接到問(wèn)題反饋后,一些根據(jù)經(jīng)驗(yàn)?zāi)X補(bǔ)的可能性:
? ? 1. 頁(yè)面錯(cuò)誤調(diào)用外網(wǎng)資源衡查,例如 js 庫(kù)瘩欺、css、字體等等拌牲,解決方法:修改資源加載路徑俱饿,重新指向服務(wù)器本地。
? ? 2. 頁(yè)面調(diào)用后端接口超時(shí)或出錯(cuò)導(dǎo)致的多次重試们拙,例如后端接口升級(jí)變動(dòng)了沒(méi)有同步更新前端頁(yè)面稍途,或者調(diào)用已作廢的接口等等,解決方法:前后端聯(lián)調(diào)排查修復(fù)砚婆。
? ? 3. 頁(yè)面 js 出錯(cuò)械拍,例如 調(diào)用瀏覽器不支持的高版本 HTML5 或者 JS 的 Api;解決方法:進(jìn)入瀏覽器開(kāi)發(fā)模式装盯,?排查頁(yè)面 js 錯(cuò)誤坷虑。
? ? 4. 頁(yè)面調(diào)用接口,返回?cái)?shù)據(jù)時(shí)間過(guò)長(zhǎng)埂奈,解決方法:排查后端接口服務(wù)迄损,優(yōu)化數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句和數(shù)據(jù)庫(kù)表,減少耗時(shí)账磺。
? ? ...
三芹敌、排查過(guò)程
? ? 1. 服務(wù)器端排查: .NET 全家桶痊远, Windows Server 2016 + IIS 10.0 + SQLServer 2014, 服務(wù)器系統(tǒng)資源正常氏捞, 日志無(wú)報(bào)錯(cuò)碧聪。
? ? 2. 客戶(hù)端排查:Windows 10 自帶 Edge 瀏覽器,F(xiàn)12 進(jìn)入開(kāi)發(fā)者模式液茎,清理緩存后逞姿,觀察問(wèn)題頁(yè)面的網(wǎng)絡(luò)加載時(shí)間:
? ? 結(jié)果,問(wèn)題頁(yè)面加載的前三個(gè)靜態(tài)資源文件就已消耗了離譜的時(shí)間:
? ? loading-1.gif? 948B? ? ? ? ? 用時(shí) 20.71 秒捆等;
? ? GridXqinfo.html 6.8kB? ? ?用時(shí) 20.54 秒滞造;
? ? icon.png? 11.7kB? ? ? ? ? ? ? 用時(shí) 9.69 秒;
? ? 后面若干靜態(tài)文件也有類(lèi)似的犯病表現(xiàn)栋烤,頁(yè)面加載總用時(shí)50秒谒养,看來(lái)直接的病因就在于此了,腦補(bǔ)果然是腦補(bǔ)班缎,現(xiàn)實(shí)永遠(yuǎn)更魔幻蝴光。
四、解決過(guò)程
? ? 解決思路:加快 IIS 靜態(tài)資源的響應(yīng)速度? ??
? ? 操作過(guò)程:打開(kāi) IIS 管理器达址,打開(kāi)問(wèn)題網(wǎng)站的配置頁(yè)面,進(jìn)入【緩存】配置頁(yè)趁耗;把剛才排查到的靜態(tài)文件后綴逐一添加到輸出緩存列表中沉唠,包括 .html,.gif苛败, .jpg满葛, .png, .ttf罢屈; 勾選【用戶(hù)模式策略】和【內(nèi)核模式策略】嘀韧,選擇【發(fā)生更改前一直緩存】;最后重啟網(wǎng)站缠捌。
五锄贷、效果
????loading-1.gif? 973B? ? ? ? ? 用時(shí) 14 毫秒;
????GridXqinfo.html 6.8kB? ? ?用時(shí) 34 毫秒曼月;
????icon.png? 11.8kB? ? ? ? ? ? ? 用時(shí) 43 毫秒谊却;
????以前同樣的前三個(gè)靜態(tài)資源文件為例,加載時(shí)間直接降到毫秒級(jí)哑芹,頁(yè)面6秒多整體加載完畢炎辨,效果可謂立竿見(jiàn)影,至此問(wèn)題已初步解決聪姿。
????后端接口和數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化需要開(kāi)發(fā)后續(xù)介入碴萧,估計(jì)能再榨出一定時(shí)間乙嘀。
六、后話
? ? 直觀上的問(wèn)題已解決破喻,但問(wèn)題根源在于IIS返回靜態(tài)資源文件耗時(shí)異常長(zhǎng)虎谢,后續(xù)需進(jìn)一步探尋。
? ? 幾個(gè)猜測(cè):
? ? 1. 網(wǎng)站配置了多個(gè)靜態(tài)資源路徑低缩,且文件版本不一致嘉冒,導(dǎo)致 IIS 需多次查詢(xún)判斷,證據(jù):靜態(tài)文件大小前后不一致咆繁。
? ? 2. 網(wǎng)站啟用了靜態(tài)內(nèi)容壓縮讳推,從而影響了靜態(tài)資源文件的響應(yīng)速度,也許有BUG玩般。
? ? 3. 網(wǎng)站靜態(tài)資源路徑權(quán)限配置問(wèn)題银觅,導(dǎo)致 IIS 無(wú)法用默認(rèn)賬號(hào)加載。
? ? 記錄本次處理過(guò)程坏为,望能為遇到類(lèi)似問(wèn)題的朋友提供思路究驴,水平所限,如發(fā)現(xiàn)錯(cuò)漏或知道此問(wèn)題的根源匀伏,請(qǐng)務(wù)必留言告知洒忧。