รู้หรือไม่ !! มี Tools เจ๋ง ๆ ที่ช่วยให้เราทำแอปบนเดสก์ท็อปด้วยนะ นั่นคือ Electron.js นั่นเอง !!
.
และวันนี้แอดจะพาเพื่อน ๆ มาทำความรู้จักกับเจ้านี่กัน ว่ามันคืออะไร มีรายละเอียดยังไง หากพร้อมแล้วไปอ่านกันเลยจ้าาา ~~
.
⭐ Electron.js เป็น Framework แบบ Open-Source ซึ่งพัฒนาโดย GitHub ใช้สำหรับพัฒนาแอปพลิเคชันบนเดสก์ท็อปด้วยภาษา JavaScript, HTML, CSS และ Node JS เอาเป็นว่าใครที่เขียนเว็บมาบ้างแล้ว ก็สามารถใช้งานเจ้านี่ได้ง่าย ๆ เลย
.
✨ หลักการทำงานของ Electron.js
.
Electron.js จะใช้แนวคิดการทำงานของ Chromium ซึ่งจะแบ่งเป็น 2 ส่วนคือ Main Process และ Renderer Process
.
🔸 Main Process - เป็นส่วนที่ช่วยรับ-ส่ง Request ระหว่าง Browser Windows นั่นเอง โดยจะรองรับการทำงานของ GUI และช่วยจัดการในส่วนของ Memory ไม่ว่าจะเป็นการ Destruction และ Handle เพื่อป้องกันการ Memory Leak นั่นเอง
.
🔸 Renderer Process - เมื่อได้รับ Request จาก Main Process เจ้านี่ก็จะทำการแสดงผล UI แต่ละหน้า โดยการรันไฟล์ HTML, CSS และ JavaScript ของเรานั่นเอง
.
Electron.js ดียังไงนะ ?
.
🌟 1) พัฒนาได้ง่าย - เพียงแแค่ใช้ภาษาที่เราคุ้นเคยกันอยู่แล้ว ไม่ว่าจะเป็น HTML, CSS, หรือ JavaScript Dev แบบเรา ๆ ไม่ต้องเรียนรู้นานก็สามารถพัฒนาแอปพลิเคชันบนระบบปฏิบัติการต่าง ๆ ได้ง่ายเลย
.
🌟 2) มีประสิทธิภาพ - เนื่องจาก JavaScript เป็นภาษาที่มีประสิทธิภาพมาก ๆ มีการใช้กันอย่างกว้างขวาง ซึ่งมันสามารถแก้ไขข้อบกพร่อง และเพิ่มประสิทธิภาพของแอปพลิเคชันได้อย่างง่ายดาย
.
🌟 3) อัปเดตได้อย่างอัตโนมัติ - แอปพลิเคชันที่ถูกพัฒนาด้วย Electron.js มีการทำ autoUpdater สามารถอัปเดตได้ด้วยตัวเองอย่างอัตโนมัติทันทีเมื่อมีเวอร์ชันใหม่ ๆ ออกมานั่นเอง
.
🌟 4) รองรับ Closs-Platform - แอปพลิเคชันที่ถูกพัฒนาบน Electron.js สามารถรันบนระบบปฏิบัติการต่าง ๆ ได้เลย ไม่ว่าจะเป็น Windows, macOS และ Linux
.
🌟 5) มี Community สำหรับ Dev - Electron.js เป็น Open-Soure ที่มีผู้คนใช้กันเยอะมาก และมีแหล่งความรู้มากมายให้เหล่า Dev ได้ศึกษา แถมยังมีการพัฒนา Lib และ Tools ต่าง ๆ เพื่อช่วยเพิ่มประสิทธิภาพอีกด้วย
.
💥 ส่วนใครอยากลองใช้งานคลิกเลย >> https://www.electronjs.org/
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
同時也有2部Youtube影片,追蹤數超過11萬的網紅あみちゃんねる / 菊地亜美,也在其Youtube影片中提到,提供:Amazon「Prime Wardrobe」 https://www.amazon.co.jp/Prime-Wardrobe/b?ie=UTF8&node=5429200051 【プライムワードローブを試すなら今!】 オンラインファッションショッピングのとても便利なプログラム 期間限定¥1...
node request 在 Kewang 的資訊進化論 Facebook 八卦
最近 Funliday-旅遊規劃 常發一些精選旅遊回憶的 App 通知給使用者,在去年十一二月的時候發通知 Server 還能撐的了瞬時大流量的 request。
但今年開始發這類通知,總共發了三次,三次都造成 Server 被打掛,而且重開 AP 還緩解不了,瞬間手足無措。大概都要等過了十分鐘左右,Server 才將這些 request 消化完。
這裡就來簡單整理一下時間軸,順便分享一下 Funliday 是如何解決這個問題。
---
* 1/6 1900:系統排程發送精選旅遊回憶的 App 通知
* 1/6 1900+10s 開始:Server 收到極大量的 request
* 1/6 1900+20s:Nginx 出現錯誤訊息 1024 worker not enough,並回傳 http status code 503
* 1/6 1900+25s:PostgreSQL 出現錯誤訊息 could not fork new process for connection (cannot allocate memory)
* 1/6 1900+38s:Node.js 收到 PostgreSQL 的 exception。There was an error establishing an SSL connection error
* 1/6 1900+69s:PostgreSQL 出現錯誤訊息 database system is shut down
* 1/6 1900+546s:PostgreSQL 出現錯誤訊息 the database system is starting up
---
看了時間軸就覺得奇怪,先不論 10s 的時候發了極大量 request,造成 20s 在 Nginx 出現 worker not enough 的錯誤訊息。而是要關注 25s 時的 PostgreSQL 出現 could not fork new process for connection 的錯誤訊息。
Funliday 用了同時可承載 n 個 connection 的資料庫,而且程式碼又有加上 connection pool,理論上根本不該出現這個錯誤訊息。但整個時間軸看下來感覺就是 PostgreSQL 的 capacity 問題,造成系統無法運作。
因為就算將 Nginx 的 worker connection size 再加大 10 倍,只是造成 PostgreSQL 要接受的 request 也跟著被加大 10 倍,但 PostgreSQL 那裡因為 request 變多,原本在 69s 直接關機的時間點只會提早,而無法真正緩解這個狀況。
基於以上狀況,小編就開始回去看自己的程式碼是不是哪裡寫錯了。會這樣想也是覺得 PostgreSQL 應該沒這麼弱,一下就被打掛,一定是自己程式碼的問題 Orz
---
這邊來分享一下自己程式碼的寫法,圖一是原始寫法,在每個 API 都 create 一個 db client instance 來處理該 API 層的所有 db request。這是蠻單純的做法,也是 day 1 開始的處理方式。但有個小問題,就是每個 API 層都要自己 create instance,不好管理,且浪費資源。
後來因為想要做 graceful shutdown 的關係,所以調整了一下 db client instance 的建立方式,用 inject 將 instance 綁在 request 上面,如圖二。這樣只要在 middleware 建立 db client instance 就好,好管理,而且只要有 req 就可以取得 instance,非常方便。而這也是 1/6 時的程式碼,就從這裡開始研究吧。
---
直接切入 node-postgres 的文件,認真讀了一下 pool 有下面兩種使用方式:
1. pool.connect, pool.release:文件寫著 checkout, use, and return,光看描述就應該用這個沒錯。
2. pool.query:適用於不需要 pool 的連線方式,文件上也清楚寫著內部實作是直接 call client.query,所以用了這個方式是完全跟 pool 扯不上邊。
但偏偏小編從 day 1 用的就是第 2 種方式 Orz,雖然看起來應該是寫錯,但也是要修改後實測,才知道是不是真的可以解決問題。
---
如圖三,這是修改後的程式碼。想了一下子,覺得目前在 API 層使用 req.pool.query 還不錯,不想用官方的建議做法:先 create client,然後 query 之後,再使用 release。
如果照官方建議做法,API 層的程式碼會多一堆與商業邏輯無關的程式碼,也不好維護。所以在不想動到 API 層的程式碼,只能使用 monkey patch 的方式來達到這個需求。
monkey patch 可以將原方法利用類似 override 的方式,將整個方法改掉,而不改變 caller 的程式碼,這也是 JavaScript, Ruby, Python 這類動態語言的特性之一,但真的要慎用,一不小心就會把原方法改成完全不同意義的方法了。
所以原本應該要在 API 層實作 connect, query, release 一大堆程式碼,可以用 monkey patch 完美解決這一大堆程式碼。
---
在 dev 壓測後至少 capacity 可以達到原本的 4 倍以上,隔天實際上 production 之後也確實如壓測般的數據,可以承載目前的流量。
其實這篇分享的重點只有一點,文件看仔細才是最重要的事啦!如果沒把文件看仔細,然後開發經驗也不足的話,什麼 RCA、monkey patch 都幫不上忙啦!
---
後記:有夠丟臉,其實完全用不到圖三,只要把圖二的 pool creation 放到最外層就好了,因為 pool.query 的內部實作已經有做 connect, query, release 了。
感謝下面的 Mark T. W. Lin 及 Rui An Huang 的幫忙,實在是太搞笑了 Orz
* Pool 的文件:https://node-postgres.com/features/pooling
* 官方建議寫法:https://node-postgres.com/guides/project-structure
* pool.query 的內部實作:https://github.com/brianc/node-postgres/blob/master/packages/pg-pool/index.js#L332
#expressjs #nodejs #javascript #postgresql
node request 在 矽谷牛的耕田筆記 Facebook 八卦
今天這篇文章探討的則是 resources 底下的 request/limit 問題。
本文作者之前遇到一個非常規律的服務警告問題,花了非常多時間與步驟去查詢,最後才發現是 Pod 裡面 Resource 的設定不夠嚴謹與完善。
舉例來說,
resources:
limit: cpu: 1000m
request: cpu: 100m
今天假設有一個服務描述,我對 cpu 的最低要求是 0.1顆,但是極限是 1顆
且有一個節點本身有 3 顆 CPU,這種情況下,我們對該服務設定多副本運行(10個). 那根據 request 的要求,10個副本頂多只需要 1 顆 cpu,所以非常輕鬆的可以將 10 個服務運行起來,但是如何今天遇到尖峰流量,每個 pod 都瘋狂使用 CPU會發生什麼事情?
每個副本的極限都是 1 顆,因此 10 個副本就可以衝到 10 顆 CPU..而系統上只有 3顆,這就會造成 CPU 完全不夠使用,最後導致每個應用程式都在搶 CPU 使用,如果沒有特別設定相關的 nice 值來處理,可能會造成關鍵 process 無法回應(案例中就是kubelet)。
這案例中 limit/request = 10x,作者認為這數字太大,它覺得合理的大概是 2x ~ 5x,並且最重要的是要定期去檢視系統上資源的用量, limit 要設定的合理,如果本身有很大量需求,建議還要搭配 node select, affinity/anti-affinity 讓每個 pod 最好找到適合的配置方式,然後也要避免尖峰流量到來時,系統資源被吃光甚至影響到 kubelet/kube-proxy 等底層服務的運作。
https://itnext.io/how-to-set-kubernetes-resource-requests-and-limits-a-saga-to-improve-cluster-stability-and-a7b1800ecff1
node request 在 あみちゃんねる / 菊地亜美 Youtube 的評價
提供:Amazon「Prime Wardrobe」
https://www.amazon.co.jp/Prime-Wardrobe/b?ie=UTF8&node=5429200051
【プライムワードローブを試すなら今!】
オンラインファッションショッピングのとても便利なプログラム
期間限定¥10,000 購入で ¥2,000 OFFのクーポンコード
PRIMEW2000
※期間:2021年6月2日〜6月20日
「プライム・ワードローブ」で検索して試してみよう!
#AmazonFashion #PrimeWardrobe #菊地亜美
====
菊地亜美/Kikuchi Ami
◻︎Instagram▶️ https://www.instagram.com/amikikuchi0905/?hl=ja
◻︎Twitter▶️ https://twitter.com/lespros_ami?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
アクセサリーショップ 𝚃𝚘𝚞𝚓𝚘𝚞𝚛𝚒𝚊
◻︎Instagram▶️ https://www.instagram.com/toujouria_official/
◻︎販売ページ▶️https://toujouria.theshop.jp/
【YouTubeについてのお仕事・お問合せ先はこちら】
FIREBUG
https://firebug.jp/
【お仕事のご依頼はこちら】
URL:https://www.lespros.co.jp/work-request/form/?search=%E8%8F%8A%E5%9C%B0%E4%BA%9C%E7%BE%8E
node request 在 音声翻訳機レビューSpeechTranslatorReviewTV Youtube 的評價
We connected Scratch2 and Node-RED by using http request.
When the cat touch cross mark, Scratch send http request, then Node-RED receive it by http input node, and Node-RED send a string to DALI gateway by TCP output node.
The string is DALI command. For instance, #255,5 is Brodadcast All and Recall Max Level, #255,0 is Broadcast All and Off.
node request 在 【NodeJS 教學】NodeJS後端程序怎麼知道用戶瀏覽的頁面 ... 的八卦
... <看更多>