這是一個很簡單的方案。嗯,是真的。
為什麼要這麼做?
在行動Web蓬勃發展的今天,有太多太多的應用需要讓用戶在行動Web上傳圖片檔案了,正因如此,我們有些困難必須去攻克:
低網速下上傳進度緩慢,使用者體驗差
高並發下,後台處理較大的上傳檔案壓力大
或許有更多...
在攻克上面的一些困難時,我們也可以給自己一些疑問:
真的有必要保存用戶上傳的原圖嗎?
用戶還能等多久?
或許還有更多...
結合上面的一些困難和疑問,再結合我們實際的案例,我們或許可以這樣做—— 在用戶上傳圖片時,圖片被提交到後台之前,就對圖片進行壓縮處理。圖片檔案大小減少後,上傳速度自然會提示,在同樣的並發下,後台處理的速度也會得到提升,使用者體驗得到提升。
有童鞋可能會說,為什麼不使用一些主流CDN的表單功能,直接把文件上傳到CDN去?當然,完全可以選擇那種方案,我只是在眾多的方案中選擇了一個來用而已,又或者說這是程式設計師的天性?
準備
上面已經說了“在用戶上傳圖片時,圖片被提交到後台之前,就對圖片進行壓縮處理。”,那我們馬上準備下各種工具吧:
localResizeIMG(核心,用於在前端壓縮圖片)
Vue.js(處理前端的數據,展現邏輯)
Bootstrap(還要我多說?)
Bootstrap(還要我多說?)
變更後,使用localResizeIMG進行壓縮把資料透過自己期望的方式提交到後台localResizeIMG在呼叫時,就可以指定壓縮後圖片的寬度高度以及品質(詳細參考文件),至於要怎麼把資料提交到後台,可以參考該函式庫的wiki中提到的方案,一切都很簡單。 演示地址這個例子的倉庫地址
本文的解決方法並不是唯一,也不一定是最好,在使用相關的框架/庫時遇到的問題,可以去相應的Github倉庫查看issue或者wiki。