解決input[type=file]打開時慢、卡頓問題

經過測試發現,在mac裏面safari、Firefox、Chrome(opera不知道爲啥老閃退)都沒有卡頓問題

在windows裏面,Firefox不卡頓,只有Chrome卡頓。

然而,這個插件是從另一個項目裏面借用過來,再加上了限定圖片類型的功能而已。 
原組件並沒有這個卡頓問題,那麼問題只可能是在限定圖片類型這點上了。

先貼上我的代碼

<input

   accpet="image/*"

   style={inputStyle}

   ref={c=> this._imgFile = c}

   onChange={this.handleChange.bind(this)}

   type="file" name="image" disabled={disabled}

/>

於是我決定先去掉accpet試試…… 
果然就沒有了卡頓的問題。 
那麼本包在試試accpet=”image/jpg”果然也不卡卡的了!! 
看來問題的所在就是”image/*”

但是寫accpet的原意是要想要篩選出所有圖片_(:з」∠)_ 
那麼爲了實現這個需求,同時提高用戶體驗,只能採取枚舉了

修改後的代碼

<input

   style={inputStyle}

   ref={c=> this._imgFile = c}

   onChange={this.handleChange.bind(this)}

   type="file" name="image" disabled={disabled}

   accpet="image/gif,image/png,image/jpeg,image/jpg,image/bmp"

/>

再試試,果然妥妥的了!但是到底是爲什麼會這麼卡呢??我查了查萬能的Stack Overflow→_→

原來是因爲Chrome的SafeBrowsing功能會在上傳或保存時檢查文件, 

如果網絡連接到google的速度比較快呢,就沒有什麼問題。 
但是如果連接比較慢,或者乾脆跪掉了,那SafeBrowsing就會讓Chrome掛起一段時間,直到文件檢查結束或者超時

使用 accept="image/png, image/jpeg, image/gif" 就可以解決這個問題,因爲這些MIME類型在SafeBrowsing的白名單裏面,不需要檢查。 
但是如果用像是 accept="image/*" 這樣的呢,就不行了,就有可能變得卡卡的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章