上星期大家都有來聽小編在 COSCUP 分享的「模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構」嗎?這個技術已經有實作在 Funliday-旅遊規劃 的 Web 跟 Android 囉。這個議題結束後,有朋友問了一些問題,這裡順便來統整回答一下:
1. client side upload 方式從 server 產出的 signed URL 是個什麼樣的東西?
signed URL 是為了讓沒有 access key 及 secret key 的 sender 也能在有權限管理的保護下做 S3 的檔案處理,而 Funliday 在這裡的實作是不用原檔名做 key,改用 UUID 產生避免檔名衝突。
2. client BlurHash decode 的效率如何?
在做 BlurHash decode 的時候因為用到的是 CPU 運算,而且 JavaScript 又是 single thread 的關係,所以在 decode 同時移動畫面的話,可能會造成 CPU 不夠力的 client 會有極短暫的延遲時間。這時候可以考慮把 decode 丟到 web worker 處理,避免卡到 UI thread 的順暢度。用 Android 的術語來說就是開 AsyncTask 啦!
3. 你們後來是使用哪種方式做上傳呢?
原先是使用 server side (2) 的方式,但在處理 MQ 上傳後的 notify 花了不少時間,而且上傳到 S3 也沒這麼快,所以後來改用 client side 的方式做上傳功能,運作上也比原先的方式順暢。
4. 為什麼不用 medium 的方式處理 blur?
因為 medium 檔案比 BlurHash 的字串大很多,而且要多發一次 request,成本比 BlurHash 高出不少,所以我們認為用 BlurHash 會是比較好的。
---
當然也是要感謝 gslin 大大,他在 4/26 (日) 簡單介紹了 BlurHash。小編下午看到這篇文章,馬上丟去 slack 問我們的設計師大大,看她覺得這效果如何?她過沒多久回覺得不錯,小編就在星期日的下午開始處理 server side 的實作。隔天星期一有了初步的成果,然後給我們的安卓五星上將看,星期二就完成 Android 實作並上線了!
也是因為 CDN 那塊後來把原先的 lambda 改用自己寫的 server 處理,所以實作 BlurHash 才能這麼快。lambda 這塊也是血淚史,下略 10000 字,之後有機會再跟大家分享。
---
歡迎大家對這塊有興趣的也來交流一下喔!
#blurhash #coscup
同時也有1部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,JAVA證照考題解答分享(Android證照的跳板) http://terry55wu.blogspot.tw/2014/01/javaandroid.html 課程大綱: 1.認識 AWT類別 2.認識並學習如何建立視窗物件 3.學習如何管理與配置版面 4.事件處理:1.認識 Java的委派...
「javascript 字串 處理」的推薦目錄:
- 關於javascript 字串 處理 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於javascript 字串 處理 在 軟體開發學習資訊分享 Facebook 的精選貼文
- 關於javascript 字串 處理 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於javascript 字串 處理 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於javascript 字串 處理 在 字串處理與正規表達式 的評價
- 關於javascript 字串 處理 在 web程式:JavaScript 的字串處理-- jsString - YouTube 的評價
- 關於javascript 字串 處理 在 javascript字串取代的問題包括PTT、Dcard、Mobile01,我們都 ... 的評價
- 關於javascript 字串 處理 在 javascript字串取代的問題包括PTT、Dcard、Mobile01,我們都 ... 的評價
- 關於javascript 字串 處理 在 javascript字串取代的問題包括PTT、Dcard、Mobile01,我們都 ... 的評價
javascript 字串 處理 在 軟體開發學習資訊分享 Facebook 的精選貼文
詳解轉職前端工程師的 技術門檻、成長路線,並把握面試機會
入門篇學什麼 ▶︎
完全沒有程式基礎,想短時間獲得基礎實力,轉職為前端工程師!
✅漸進式學習,搭配大量實戰講義,讓您從 0 到得心應手
✅讓您直接帶去面試的作品集,課堂練習就是作品集,省錢省力氣
✅教您業界最新知識,讓您獨立做出產業常見的網站效果及應用
✅程式碼排版 > 命名規則 > 清晰註解 > 邏輯明確 > 版本控制,學習 coding 好習慣
✅從頭到尾瞭解一個專案的開發過程,無痛對接工作應用
中階實戰篇學什麼 ▶︎
練就獨當一面開發力,成為進擊的前端工程師!
✅學習進階開發技巧:陣列迴圈、陣列操作、字串處理等,操作資料才是王道
✅學習 JSON 應用,瞭解如何串聯伺服器與瀏覽器
✅攻略 axios 完成非同步處理使用
✅帶您無痛升級 ES6 超好用的開發技巧
✅學習前後端分離,成為後端工程師的好隊友
✅最簡單的方式去規劃程式架構
✅最後告訴你,千萬不要這樣寫 code 啊~
面試篇學什麼 ▶︎
練就一身武功就差面試答題技巧訓練,擊敗競爭者成為首選!
✅前端面試解題綜合
✅演算法解題
✅常被問到的 JavaScript 觀念
✅常被問到的框架使用觀念
✅框架實務經驗分享
✅團隊合作開發經驗分享
https://softnshare.com/%e4%b8%ad%e6%96%87%e8%aa%b2%e7%a8%8b-%e7%8f%be%e4%bb%a3-javascript-%e8%81%b7%e4%ba%ba%e4%b9%8b%e8%b7%af-%e5%85%a5%e9%96%80%e3%80%81%e9%80%b2%e9%9a%8e%e3%80%81%e5%af%a6%e6%88%b0%e3%80%81%e9%9d%a2/
javascript 字串 處理 在 Kewang 的資訊進化論 Facebook 的最佳解答
前一篇 (https://www.facebook.com/kewang.information/posts/2241503749459320) 提到了 Autocomplete 的實作方式,但仍然有許多可以調整的地方,像是如何加大 throughput、帶額外資料...等,下面就來分享一下小編的作法。
---
## 1. 減少傳輸量
因為 Autocomplete 的操作行為是使用者每打一個字,就要傳給 server,server 再回傳使用者一些 candidate。所以減少傳輸量是最先要處理的事情,要不然資料量太大傳輸慢會影響前端使用體驗。最簡單的作法就是改變原本回傳的 JSON 格式,如下所示:
### 調整前
[
{"id": 123, "candidate": "taipei"},
{"id": 456, "candidate": "taiwan"},
{"id": 789, "candidate": "tall"}
]
### 調整後
["123%taipei","456%taiwan","789%tall"]
前端拿到資料後自己再用 split 的方式分割字串,實測下來大概可以減少 40% 的資料量。
---
## 2. 減少傳輸量
沒錯!第二點也是減少傳輸量,將準備要回傳的資料用 gzip 壓縮後再回傳。
以 expressjs 本身建議的 compression 套件來說,實測下來發揮不了什麼作用。因為 compression 套件預設為資料量大於 1kb 才會做壓縮,而目前的資料已經是小於 1kb 了,所以沒做任何壓縮就直接回傳。
另外還發現加了 compression 套件之後,以目前開的 heroku 機器來說,回應時間會加上 5-10ms 左右。不過現在服務還沒上線,沒有使用量都不準,等上線之後再來觀察看看好了。
---
## 3. 減少使用者打 server 的次數
前端可以在輸入一個字元的時候不要送 request 給 server,因為經驗法則,使用者應該至少會打兩個字元之後,Autocomplete 回應給使用者 candidate,這樣對 UX 上應該會比較好吧 (小編不專業分析 XD)。不止可以降低 server 的 loading,也可以減少存入 Redis 的資料量。
但這會牽涉到 CJK 與 non-CJK 的處理方式,這就還要再看看如何處理比較好。
---
## 4. 減少使用者打 server 的次數
沒錯!又是減少次數。client 可以在 server 回傳資料的時候,將資料暫存在 client 的記憶體內。因為常會有輸入相同文字的時候,這時就可以直接從 client 的記憶體取出資料,就不用打到 server 了。
但這個使用方式比較不好處理,需視情境而定。若是 Redis 的資料常常在變動,那這個方式會造成取不回最新的資料。或許可以在 client 放個 LRU cache 來做處理。
---
## 5. 減少使用者打 server 的次數
又是我 XDDD!這次是要 server 幫忙,當 client 重複輸入相同 keyword 時,client 會帶 If-None-Match 的 header 給 server,server 會檢查這串值是否已經有打過了,如果打過就回 client 304,表示資料沒變動,可以直接用 client 本身的資料。
這在之前的 JCConf 有分享 (https://www.facebook.com/kewang.information/posts/2192127034396992) 過,大家可以回去翻一下。
---
## 6. 減少 Redis 的資料量
西方國家所用的拉丁字母除了大家常用的 26 個英文字母外,也常會有一些包括重音之類的字母。像是 a 及 á 之類的,這個在搜尋的時候不會太影響,JavaScript 可以利用 String.normalize('NFD') 把 á 轉換成 aˊ,最後再將 ˊ 取代為空字串 (https://stackoverflow.com/a/37511463/939212),Redis 裡面只要存 a 就好,這樣可以節省不少資料量。
當然還有將大寫轉為小寫、trim 掉頭尾空白這幾種做法,也都可以省下不少資料量。
至於 CJK 的話,再說吧 XDDD
---
## 7. 存入 metadata
如果這個 Autocomplete 只是單純選擇 candidate 之後做搜尋,那可以不用存 metadata 進去。但有些功能其實是要把 candidate 回傳給 client 時,也帶一些 metadata 給 client 做其他運用,最常見的應該就是帶 id 這類 metadata 了。
最簡單的作法就是在存入 candidate 的時候,直接把要存的 metadata 帶在字尾,如下所示:
1. t
2. ta
3. tai
4. taiw
5. taiwa
6. taiwan
7. taiwan*123
把 123 放在 taiwan 後面,在取出 candidate 的時候再利用 split 的方式把 taiwan 跟 123 分別取出就可以了。
---
總結上面的幾種方式,目前小編這裡用到了 1, 2, 5, 6, 7 共五種,效果還不錯,就等上線再來看看實戰結果囉。
#funliday #autocomplete #redis #javascript #nodejs
javascript 字串 處理 在 吳老師教學部落格 Youtube 的最讚貼文
JAVA證照考題解答分享(Android證照的跳板)
http://terry55wu.blogspot.tw/2014/01/javaandroid.html
課程大綱:
1.認識 AWT類別
2.認識並學習如何建立視窗物件
3.學習如何管理與配置版面
4.事件處理:1.認識 Java的委派事件模式。2.認識並學習使用各種事件處理類別。3.學習各種物件的事件處理 。
之後:
1.分享最新的JAVA DOCS資訊與中文化版本,
並設定ECLIPSE直接讀取JAVA說明檔的設定方法。
2.利用實例綜合練習變數宣告、資料型別、運算子、
流程控制的IF...ELSE與各種迴圈方法的應用。
3.說明陣列與多維陣列的使用與實例。
漸漸更深入JAVA語法的核心,有些同學似乎已經吃不消,
但有些同學可能以前學過,所以一下子就解出來了,
也很大方的分享出他的解法,
不過這樣有時反而讓一些沒學過JAVA的同學備感壓力。
因為老師以為大家都會了,所以就加速往前,害一些同學在後面趕的很辛苦,
腦筋已經被迴圈給轉的頭昏,還沒弄懂題目,又要接下一題,
所以真有點兩難,好在助教的提醒,有稍放慢一點進度,
若有程度較好的同學,請些自行預息後面的課程,
或是先準備TQC JAVA的學術科考題好了,再不然好心一點,
充當一下老師的分身,幫忙同學一下,感謝!
101模擬樂透彩
102系統日期、時間顯示
103亂數排序器
104河洛之數
105陣列行列轉換
106數值過濾器
107求平均值
108九九乘法表
109面積與體積計算
110單字測驗
202利息計算
204期末考分數計算
206四則運算
208三角形邊長判斷
210字元搜尋器
302字體設定選擇器
304簡易繪圖板
306滑鼠感應視窗
308藝人音樂評等
310年齡計算
相關JAVA教學:
發表時間 文章標題
2015-06-22 JAVA網路程式設計第1天上課分享(HTML 5與JavaScript)
2015-06-21 艾鍗JAVA物件導向程式設計2(流程控制)
2015-06-21 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2015-06-20 從JAVA入門到智慧型手機設計第2次上課
2015-06-20 從JAVA入門到智慧型手機設計第1次上課
2015-01-16 如何在JAVA顯示河洛之數結果
2015-01-16 如何在JAVA顯示系統時間並格式化
2015-01-16 JAVA物件導向設計第3堂課:JSP與APP跳板
2015-01-16 JAVA物件導向設計第2堂課:JSP與APP跳板
2015-01-16 JAVA物件導向第1堂課:JSP與APP跳板
2014-01-20 佛光資應系JAVA證照考題解答分享(Android證照的跳板)
2013-08-19 艾鍗JAVA物件導向程式設計課程上課影音分享(2)
2013-08-02 總統府旁JAVA網路程式設計第2天上課分享
2013-08-02 總統府旁JAVA網路程式設計第1天上課分享
2013-03-15 從JAVA入門到智慧型手機設計第2次上課
2013-03-11 從JAVA入門到智慧型手機設計(1)
2012-10-27 有七星潭海浪聲的JAVA入門與證照分享
2012-09-14 JAVA程式設計第7次上課
2012-08-29 JAVA程式設計第1次上課
2012-05-31 有七星潭海浪聲的JAVA入門與證照分享1
2012-04-08 JAVA證照考題解答分享,Android證照的跳板
2012-01-25 JAVA證照考題解答分享,Android證照的跳板
2011-10-04 JAVA程式設計總整理
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程之二
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-30 文化大學推廣部JAVA程式設計第 5 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 4 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 3 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 2 次上課
2010-05-30 程式語言排行榜,C語言居冠,JAVA次之
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-22 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2009-08-27 TQC JavaScipt 實用級線上影音
2009-08-24 TQC JavaScipt 線上影音教學課程 101自動瀏覽器
2009-03-12 Java、VisualBasic、Visual C++有什麼不一樣呢?
java下載,jdk,eclipse,java教學網站,java教學影片,java eclipse教學,eclipse 教學,java證照解答,AWT類別, 電腦證照
javascript 字串 處理 在 web程式:JavaScript 的字串處理-- jsString - YouTube 的推薦與評價
web程式: JavaScript 的 字串處理 -- jsString. 陳鍾誠. 陳鍾誠. 11.9K subscribers. Subscribe. 0. I like this. I dislike this. ... <看更多>
javascript 字串 處理 在 javascript字串取代的問題包括PTT、Dcard、Mobile01,我們都 ... 的推薦與評價
本書的設計,以技術架構為經,透過實作範例,完整執行GA 4 事件設定與進階分析流程,讓負責操作的朋友,可以與通用版GA 無縫接軌,快速上手;同時以商業策略為緯,詳細解釋 ... ... <看更多>
javascript 字串 處理 在 字串處理與正規表達式 的推薦與評價
JavaScript 的字串物件本身,就包含了許多常用的字串處理函數,像是大小寫轉換、比對、取代、切割字串等等,而這些函數當中, 有些甚至支援了「正規表達式」,像是match ( ... ... <看更多>