前端文件上傳--2020年2月7日學習筆記

面試題:前端文件上傳
一:基本回答

前端使用type為file的input的纳胧,以及formData司顿,將文件通過ajax傳給后端秀撇。

二:進階之文件切片

將文件分為若干個小塊脐恩,然后依次上傳抡秆,后端接受完所有文件后再合并奕巍。
相較于上面的優(yōu)點是可以斷點續(xù)傳和秒傳,切片后每個小塊通過md5計算其唯一的hash值儒士,上傳時都問后端校驗下的止,是否存在該塊,不存在才上傳着撩,如果整個文件都存在的話那就是秒傳了诅福。

三:進階之優(yōu)化計算hash

切片后每個小塊計算hash較耗費時間匾委,此時頁面就會卡住,影響用戶體驗氓润,解決方法有:

  1. webworker赂乐,開一個子進程去計算hash,主線程只需要等待其完成的通知即可咖气,計算量沒有減少挨措,但主線程不卡頓;優(yōu)點是邏輯簡單采章,缺點是增加了網(wǎng)絡請求运嗜;
  2. time-slice,時間切片悯舟,利用瀏覽器空閑時間去計算hash担租,不影響延遲瀏覽器的關鍵事件,如動畫和輸入響應等抵怎,原理是瀏覽器的requestIdleCallback方法奋救;優(yōu)點是效率比webworker的高,更細膩反惕,缺點是requestIdlecallback該api有兼容問題尝艘,自己實現(xiàn)較為復雜,可參考react的fiber架構(gòu) 姿染;
  3. 抽樣hash背亥,也就是不把小塊的全部文件去做全量hash,而是抽取其前中后兩個字節(jié)悬赏,共6個字節(jié)去計算hash(大概思路狡汉,細節(jié)還要更復雜);犧牲一些命中率闽颇,換取時間盾戴;可以結(jié)合上面兩種方法使用;
三:進階之優(yōu)化大量請求

切片后增加了上傳文件的請求數(shù)量兵多,需要控制請求的并發(fā)數(shù)以及失敗重試尖啡;
至于判斷每個小塊是否存在的請求,可以只需要一個剩膘,后端返回已經(jīng)存在的文件hash的數(shù)組衅斩,之后的判斷無需一個個請求;

四:進階之慢啟動策略

解決的是分片到底分多大的問題怠褐,不能寫死為1m或是200kb矛渴,需要根據(jù)當前網(wǎng)絡情況,動態(tài)調(diào)整切片大小數(shù)惫搏,參考TCP的慢啟動策略具温;
具體為,假設理想是每30s上傳一個區(qū)塊筐赔,區(qū)塊初始大小為1m铣猩,如果上傳只用了10s,則下一個區(qū)塊大小為3m茴丰;如果花了60s达皿,則下一個區(qū)塊變成500kb;以此類推贿肩,由于網(wǎng)速波動峦椰,區(qū)塊大小需要一直判斷;

更多優(yōu)化點
  1. 碎片清理汰规,定期清理服務器過期的碎片文件
  2. requestIdleCallback兼容性汤功,如何自己實現(xiàn)一個
  3. 并發(fā)+慢啟動配合
  4. 抽樣hash+全量量哈希+時間切片配合
  5. 慢啟動的變化應該更更平滑,比如使用三?角函數(shù)溜哮,把變化率平滑的限制在0.5~1.5之間
  6. websocket推送進度
  7. 文件碎片分機器?存儲
  8. 文件碎片備份
  9. 體驗優(yōu)化滔金,如上傳的進度條、離開頁面的提醒茂嗓、拖拽上傳餐茵、粘貼上傳等
    ......
【自己的感悟之 學習的慢啟動】

從小的任務開始,能夠順利地完成述吸,再加大任務忿族,不要一開始就搞個大的任務,高的期望反而卡住了蝌矛,那就一點都沒有完成道批。

后續(xù)還需要自己用代碼全部實踐一遍,以及運用的項目中

整理于 開課吧-大圣老師的2020.2.7號直播

ps:晚上看到煎蛋站長 染新冠肺炎發(fā)文交代后事--諸君朴读,我可能感染了新冠肺炎 屹徘,后檢查發(fā)現(xiàn)不是,替他感到高興衅金,白嫖黨第一次打賞十塊噪伊,有5000+的人打賞,如此近距離的直面死亡氮唯,又回到人間鉴吹,會有一些什么樣的感悟呢?

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豆励,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌良蒸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫩痰,死亡現(xiàn)場離奇詭異,居然都是意外死亡丽旅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門纺棺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祷蝌,“玉大人茅撞,你說我怎么就攤上這事「硕海” “怎么了乡翅?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罪郊。 經(jīng)常有香客問我蠕蚜,道長,這世上最難降的妖魔是什么悔橄? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任靶累,我火速辦了婚禮,結(jié)果婚禮上癣疟,老公的妹妹穿的比我還像新娘挣柬。我一直安慰自己,他們只是感情好睛挚,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布邪蛔。 她就那樣靜靜地躺著,像睡著了一般扎狱。 火紅的嫁衣襯著肌膚如雪侧到。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天淤击,我揣著相機與錄音匠抗,去河邊找鬼。 笑死污抬,一個胖子當著我的面吹牛汞贸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼矢腻,長吁一口氣:“原來是場噩夢啊……” “哼门驾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踏堡,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤猎唁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顷蟆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡腐魂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年帐偎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛔屹。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡削樊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兔毒,到底是詐尸還是另有隱情漫贞,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布育叁,位于F島的核電站迅脐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏豪嗽。R本人自食惡果不足惜谴蔑,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望龟梦。 院中可真熱鬧隐锭,春花似錦、人聲如沸计贰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躁倒。三九已至荞怒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間樱溉,已是汗流浹背挣输。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留福贞,地道東北人撩嚼。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親完丽。 傳聞我的和親對象是個殘疾皇子恋技,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容