快來點我 👉👉👉 https://hahow.in/cr/kewang-backend 👈👈👈
大家好,小編這次籌備的新課「專為前端工程師準備的 Node.js 後端實戰課程」開始在 Hahow 好學校 上架募資啦!
在 2021/7/14 之前,在這篇文章按讚,並且公開分享這篇文章,及 tag 一位你的好朋友,除了可以用超優惠價格購買這門課程外,還有機會獲得 8 折的 coupon 喔!
---
這門課主要是從小編在這六七年來對於後端開發的集大成,以 Node.js+VS Code 做為開發環境。
會開這門課程的原因,主要是因為後端運用廣泛,但是門檻高、人才難找。而前端工程師經過了 MVVM 框架及 JavaScript 的洗禮後,再加上 Node.js 的流行,轉職到後端會比其他語言多了一層優勢。所以這門課程希望能讓已經有 JavaScript 基礎的前端工程師,也能輕鬆進入後端開發的大門。
課程內容主要是從 Express.js 開始著手,以 TODO list 做為貫穿整門課程的專案,其中可以學到許多內容,像是:
🔥 如何活用 package.json 及 dotenv 讓你快速開發
🔥 express.js 最重要的 middleware 開發及如何擴充 req/res
🔥 如何使用 Heroku 讓你快速部署網站上雲
🔥 如何使用 New Relic 來觀測網站運作狀況
其中也會教大家如何撰寫 API 文件及 RESTful API 的串接實戰,像是:
🔥 request 失敗到底要用 200 還是 400 回應
🔥 使用 mock server 快速串接 API
🔥 使用 Markdown 快速撰寫 API 文件
而資料庫則會搭配 MongoDB 及 Redis 做為快速開發使用:
🔥 MongoDB 的 schema 設計、CRUD 及最重要的 aggregate 使用方式
🔥 Redis 的 set/get 及 expire 功能簡易使用
---
這門課也有兩個募資解鎖單元,分別是「如何使用 Redis 開發 autocomplete 功能」、「如何使用 BullMQ 縮短 API 的回應時間」,歡迎大家踴躍報名這門課程,對課程有任何疑問都可以在課程網頁留言喔!
#nodejs #expressjs #javascript
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「javascript autocomplete」的推薦目錄:
- 關於javascript autocomplete 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於javascript autocomplete 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於javascript autocomplete 在 コバにゃんチャンネル Youtube 的最佳解答
- 關於javascript autocomplete 在 大象中醫 Youtube 的最佳解答
- 關於javascript autocomplete 在 大象中醫 Youtube 的精選貼文
- 關於javascript autocomplete 在 autoComplete.js - Vanilla Javascript library 的評價
- 關於javascript autocomplete 在 algolia/autocomplete: Fast and full-featured ... - GitHub 的評價
- 關於javascript autocomplete 在 JavaScript autocomplete without external library - Stack ... 的評價
- 關於javascript autocomplete 在 Quick Autocomplete App With JS & JSON - YouTube 的評價
- 關於javascript autocomplete 在 How to add an autocomplete field with pure javascript - Drupal ... 的評價
javascript autocomplete 在 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 autocomplete 在 コバにゃんチャンネル Youtube 的最佳解答
javascript autocomplete 在 大象中醫 Youtube 的最佳解答
javascript autocomplete 在 大象中醫 Youtube 的精選貼文
javascript autocomplete 在 algolia/autocomplete: Fast and full-featured ... - GitHub 的推薦與評價
A container to inject the experience into; Data to fill the autocomplete with; Any Virtual DOM solution (JavaScript, Preact, React, Vue, etc.) The data that ... ... <看更多>
javascript autocomplete 在 JavaScript autocomplete without external library - Stack ... 的推薦與評價
... <看更多>
javascript autocomplete 在 autoComplete.js - Vanilla Javascript library 的推薦與評價
autoComplete.js is a simple, pure vanilla Javascript library progressively designed for speed, high versatility, and seamless integration with a wide range ... ... <看更多>