#JavaScript

Fluid Framework.

Microsoft

Fluid Framework

像 Microsoft 365 或 Google Workspace 甚至是蘋果的 iCloud 裡面都提供了線上版的文件編輯、試算表、簡報製作應用,這些應用也大多具有多人即時同步的特性,微軟最近公佈 Fluid Framework 就是一個負責處理資料即時同步的專案,Fluid 可以把任意物件加上即時同步的特性,並在每個客戶端做出即時的反應以及觸發 onChange 的事件,讓客戶端可以用自己的商業邏輯來處理值的變更。


Window 大小和滾動.

JAVASCRIPT.INFO

Window 大小和滾動

JavaScript 要取得網頁 windows 寬度和高度有兩種方式:

  • document.documentElement.clientWidthdocument.documentElement.clientHeight,這裡傳回的值是不含視窗捲軸的真正尺度。
  • window.innerWidthwindow.innerHeight,這裡傳回的值是包含視窗捲軸的尺度。

這兩種值在手機上大多是一樣的,因為手機的捲軸是覆蓋在頁面一側的,而且僅有在滾動時才顯現,但在桌面上就會依照作業系統或瀏覽器的不同的得到不同的結果,在 Safari 上,因為捲軸也是設計成和手機一樣,所以兩種方式也會得到相同的尺度,但一旦插上滑鼠 macOS 就會把捲軸的形式改為佔有固定寬度的形式,其它作業系統對捲軸也是各有各的樣式,所以一旦誤用了 window.innerWidth,那麼最後計算出的尺度就可能會有偏差,最常見的就是原本不會有的水平捲軸卻出現的狀況。

除了 JavaScript,CSS 也會遇到類似的問題,比較新的寬高單位 vw / vh / vmin / vmax 都是包含捲軸的尺度,100vw 用下去很容易就會發生頁面寬度超出 viewport 寬度的現象,因為假設 100vw 拿到的是 1000px 的款度,頁面內又用 100vw 把它撐滿,但實際上扣掉捲軸的寬度後,真正 viewport 剩下的只有 985px,導致原本以為會玩玩美美的撐滿版面的設計,變成超出一點點出現水平捲軸的破版設計。對於上面的例子,比較好的方法是用 100% 代替 100vw,百分比的基礎就是父容器的寬度,如果父容器是 <html>,那就會得到 viewport 真正的寬度。


NVS (Node Version Switcher).

NVS (Node Version Switcher)

Node.js 的版本切換工具。

和 nvm 類似,但 nvs 支援較多平台,包括 Windows。


GraalVM.

GraalVM

GraalVM

GraalVM 是由甲骨文開發的多語言編譯器,GraalVM 具有支援多語言編譯的能力。

GraalVM 主要支援 Java 系的語言,包括 Java、Kotlin、Scala,以及 LLVM 所支援的語言,包括 Rust、C++、C,後來支援更多的語言,包括 JavaScript、Python、Ruby、R 等,都可以被 GraalVM 的多語言架構支援,除了多語言編譯的特性外,GraalVM 宣稱具有高效能的特性。由 GraalVM 編譯後的二進位檔,配合 GraalVM 本身的 runtime 可以把整個 GraalVM 的專案整合進其他專案內,支援的發布對象包括 Java、Node.js、Oracel 自己的資料庫平台,當然編譯後的 GraalVM 專案加 runtime 也可以獨立運作。

GraalVM 本身的目標和微軟的 .NET 和 CLR 相當類似,查看 GraalVM 的 Release Notes 可以看到一直有在發布新的進度,但開發者社群的經營與聲量卻非常小,感覺 Oracle 真的非常不擅長經營開源的「生意」。


faker.js.

faker.js

faker.js

製造假資料的套件。

在系統開發時需要一些假資料做系統驗證用,faker.js 可以幫忙做到,並且可以產出多國語系(包括台灣)的假資料。


Vega & Vega-Lite.

混合模式

Vega & Vega-Lite

Vega 是 JavaScript 的圖表套件,背後的數據與樣式是以 JSON 定義,Vega-Lite 則是 JSON 格式較為簡化的版本。

透過 Vega 或 Vega-Lite,只要餵給它正確的 JSON 資料格式,就可以產出美觀的圖表,而且不僅是數據,圖表樣式也是在 JSON 內做定義,Vega 產出的圖表可以是 SVG 或 canvas,也可以是互動的。


How to communicate with a smartcard reader using node.js?.

Marcio Reis

How to communicate with a smartcard reader using node.js?

Node.js 與讀卡機通訊的範例,透過 Node.js 套件 node-psclite 實現,底層的通訊協定是走標準的 CCID、PC/SC 協議。


Debouncing and Throttling Explained Through Examples.

Debounce

Debouncing and Throttling Explained Through Examples

在某些情境下,事件的觸發是需要被管制的,在 JavaScript 有兩種管制的模式,debounce 和 throttle,兩者略有差異。Debounce 會把數個相近的觸發歸併為單個觸發,是點擊事件被群組化的概念,Throttle 則是規定在幾毫秒內某個函式只會被執行一次,是管制函式執行的頻率的概念,連結的文章內也有兩者應用的示例,值得一讀。