前兩篇分享了 Autocomplete 的實作方式及開發細節,算是少數大家迴響比較多的文章 XDD,下面就來整理一下大家的迴響好了。
---
## 1. 減少傳輸量可以使用 msgpack
小編有聽過 msgpack 但還沒實際了解這是如何運作的。剛查了一下資料 (https://msgpack.org),說是比 JSON 更省資料大小,基本上聽過的語言都有支援。
在前公司也用過 Avro 這類的格式,主打的也是省資料大小。但現在應該還不會考慮改用這類要另外做 serialize 的格式。
主要是基於後端是以 Node.js 為主開發,JSON 已經是原生支援,再引入一種資料格式會增加前後端維護的複雜度。另外就是開發人力,新創小公司要儘量減少工作,目前可以順暢運作就好,還有其他更重要的事要做,等之後用量大了再改也不遲。
---
## 2. 減少傳輸量可以使用 HTTP server 的壓縮機制
這真的是忽略了,忘了 expressjs 只是一套 web framework,在上面對資料做壓縮其實會影響到效率。讓如 nginx 之類的 HTTP server 做壓縮應該才是更好的作法。
不過因為現在的 infra 是建在 heroku 上面,heroku 並沒有原生 nginx 的支援。等量大撐不住的時候,倒是可以優先考慮使用 heroku 的 buildpack 把 nginx 架上去試試 (https://github.com/heroku/heroku-buildpack-nginx)。
另外也有提到用 CDN 做動態壓縮,這就真的沒做過了,也是可以研究的方向之一。
---
## 3. 減少使用者打 server 的次數,加上 debounce time
這大家都主推使用 debounce 方式,前端沒玩很深的小編第一次碰到這個名詞是高職的時候。記得那時上課在教 8051,老師說按按鈕時要加上 15 - 20ms 的 debounce time,避免重複送外部中斷。小編對單晶片實在不在行,但大概記得是這個意思。
剛查了一下資料 (https://css-tricks.com/debouncing-throttling-explained-examples),前端的 debounce time 大概也是類似的意思。在輸入文字後,會 delay n 秒再送出,若是在 n 秒內又有打其他內容的時候,就把之前的 request 從 queue 裡面丟棄,只關注最後一次的 request 就好。
這個應該也是有效減少 request 量的作法了。
---
## 4. 減少使用者打 request 的次數,將已經送出的 request 取消掉
這也是一個不錯的作法,若 A request 已經送出去,但還沒回 response 時又送了 B request 的話,此時可以把 A request 取消。
但要注意就是 A request 目前正在執行的步驟是去 DB 拿資料,或是在 server 本身處理一些基本計算。之前在使用 Java (grizzly + jersey) 開發的時候,若有這種情況發生會常在 log 裡面看到 IOException。
原因是 server 已經準備好資料要回傳給 client,但發現 A request 已經取消,不知道要怎麼回傳時就會發生這個狀況。但也有可能是小編自己沒控制好收發的關係啦 XD
---
關於 Autocomplete 的三篇大概就到這篇為止啦,等上線之後做了哪些調整再來分享給大家知道一下。
#funliday #autocomplete #msgpack #debounce #nginx
「heroku log」的推薦目錄:
- 關於heroku log 在 Kewang 的資訊進化論 Facebook 的精選貼文
- 關於heroku log 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於heroku log 在 heroku - how to see all the logs - Stack Overflow 的評價
- 關於heroku log 在 honeycombio/heroku-honeycomb-drain - GitHub 的評價
- 關於heroku log 在 Heroku安裝使用教學 - 科技的旅程 的評價
- 關於heroku log 在 【 DevOps 】將GitHub 上的Sub Repository 網頁部署到Heroku 的評價
- 關於heroku log 在 Login error facebook app - Toka 的評價
- 關於heroku log 在 Github Api Deploy Key - Baikal-Russland-Reisen 的評價
heroku log 在 Kewang 的資訊進化論 Facebook 的最佳解答
近一個月的 AWS PaaS 服務 Elastic Beanstalk 粗淺小玩心得
之前小編在開發自己的一些小專案時,全部都是用 Heroku 來 deploy,從剛開始接觸 Rails 好像是 thegiive, ihower, xdite 還是哪位大大分享的時候就用到現在了。雖然中間改去玩 Node.js,也還是一樣窩在 Heroku 沒離開。BTW, git 也是因為那時候玩 Heroku 才知道有這個東西的 XDDD
然後最近剛好有機會可以碰到 Heroku(2007) 的後輩 AWS Elastic Beanstalk(2011) (字太長了,後面簡稱 EB) 就也簡單分享一下這兩者有何不同。
Heroku 跟 EB 都是建構在 AWS EC2 上的 PaaS,所以穩定性基本上是沒話說的,雖然最近也是有幾次大規模的 fat finger 事件 囧。
不過也因為 AWS 的關係,EB 跟 AWS 生態系的各種服務整合的會是比較好,像 S3 及 CloudFront 就內建在 EB 的設定檔內了。而且 EB 就是直接起一台 EC2,所以如果覺得用設定檔太難調整,你就直接 ssh 連進去改吧,從 PaaS 去調整 IaaS 的內容,這點是 Heroku 遠遠不及的!但 Heroku 現在其實也有 buildpack 機制,應該可以把這塊落後補一些起來。
而 Heroku 雖然不是 AWS 親生的,但他們也有龐大的 addons 可以使用,像 DNS, storage, database, monitor, message queue......等,整合度及豐富度其實比 EB 還要高上許多!
而 deploy 方式小編比較喜歡 Heroku 對 Git 的無縫整合 (hook),只要 push 到 Heroku 的 repo 就可以發動 build -> deploy 了,中間的相關 log 也會即時顯示。EB 相對來說這塊整合度就不是這麼高,而且 log 也是要 deploy 後才能離線存取,這是小編覺得弱的地方,但小編沒試過 CodeCommit,說不定有像 Heroku 類似的整合也說不定。
如果硬要小編推薦的話,對不想管機器的開發者來說 Heroku 還是你比較好的選擇,但會有 vendor lock-in 的問題,這也是大家在選擇 PaaS 時的因素之一。如果是想對機器主控權稍微大一點的話,那就直接使用 EB 吧,但小編認為 EB 要走的路還不少就是了 XDDD
如果這兩個都不要,想要完全主控權的話,就 EC2 或各家的 VPS 自己選一種吧。
#aws #heroku #elasticbeanstalk #paas #ec2
heroku log 在 honeycombio/heroku-honeycomb-drain - GitHub 的推薦與評價
Honeycomb.io Heroku Log Drain. Contribute to honeycombio/heroku-honeycomb-drain development by creating an account on GitHub. ... <看更多>
heroku log 在 Heroku安裝使用教學 - 科技的旅程 的推薦與評價
每次更新完程式,要重新推上Heroku,就用上述步驟重做一次即可。 檢查的日誌(log). 1, heroku logs --tail --app {HEROKU_APP_NAME} ... ... <看更多>
heroku log 在 heroku - how to see all the logs - Stack Overflow 的推薦與評價
... <看更多>
相關內容