2019-12-22|閱讀時間 ‧ 約 11 分鐘

JavaScript Weekly #468 (上)

本系列文為節選第 468 期 JavaScript Weekly 文章的讀後整理心得。
本文為「上」,收錄內容:
  • Tesseract.js 2.0 颯爽登場
  • State of JavaScript 2019 問卷結果
  • CNDJS 維護團隊(Cloudflare)的真情告白
  • 高手都是這樣用 console.log
  • void 在現代 JavaScript 下的生存之道

Tesseract.js 2.0 颯爽登場

作者另外有寫一篇 Medium 文章解釋 2.0 的內容。
為什麼需要這次改版
  • performance 瓶頸
  • 失敗後難以 debug,找不到原因
更新內容
  • 用新的 emscripten 升級到新的 core
  • 更好懂的 API
  • 支援排程,可以同時跑很多個 OCR 工作
  • 加入 TypeScript 定義檔
  • 重寫文件
新 API 讓你可以提早載入訓練資料,需要使用的時候不用等太久:
const { createWorker } = require('tesseract.js');
const image = 'https://tesseract.projectnaptha.com/img/eng_bw.png';
const worker = createWorker();
let isReady = false;
// Called as early as possible
(async ()=> {
 await worker.load();
 await worker.loadLanguage('eng');
 await worker.initialize('eng');
 isReady = true;
})();
// Do other stuffs
(async (image) => {
 if (isReady) {
   const { data: { text } } = await worker.recognize(image);
   console.log(text);
 }
});
CPU 資源足夠的情況下,用 scheduler 多開 woker 可以巨幅加快辨識速度:
const { createWorker, createScheduler } = require('tesseract.js');
const image = 'https://tesseract.projectnaptha.com/img/eng_bw.png';

const scheduler = createScheduler();

(async () => {
 for (let i = 0; i < 4; i++) {
   const w = createWorker();
   await w.load();
   await w.loadLanguage('eng');
   await w.initialize('eng');
   scheduler.addWorker(w);
 }
 const rets = await Promise.all(Array(10).fill(0).map(() => (
   scheduler.addJob('recognize', image);
 )));
 console.log(rets.map(({ data: { text } }) => text));
 await scheduler.terminate();
})();

State of JavaScript 2019 問卷結果

這邊只挑覺得有趣或意外的部分來講,請搭配頁面中的圖表觀看。

調查人口
  • 大家薪水好多 😠
  • 9 成答卷者是男的 www
  • 職稱「全端工程師」占最多,真是辛苦大家了
  • 看完 CSS ProficiencyBack-end Proficiency 發現原來答卷仔高手雲集

總覽
時間變化圖簡直就是大型掉粉現場 😂
  • 有些今年才出來的只有一個點
  • 從不掉粉仔筆記一下,列入觀察重點
  • Express
  • Jest
  • GraphQL
  • Apollo
  • Storybook
  • Next.js
  • TypeScript
滿意度跟使用率這個部份我覺得首要還是看滿意度,感覺比較能反映出發展性。
  • 70% 以上的看起來都前途不可限量
  • Ionic 意外地落在 AVOID 區…

語言特性
雷聲大雨點小大型展示會。
不過看起來蠻符合我想像中的模樣,沒什麼意外的點。
真要說的話,原來這麼多人用 fetch 的嗎…
axios 才是標配吧= =
整體感覺還是新東西不推出個 3、5 年,是很難廣泛的被採用的。

JavaScript 加強版們
Languages that compile to JavaScript
基本上我是覺得除了 TypeScript 以外,大概都還是會保持小眾。
這個 branch 的很多比較,我都看不出什麼關聯性,484 我太笨了…
當年的老夥伴 CoffeeScript 已經被擺到「其他」裡 😅

前端框架
React 還是最秋的,那我就放心了 (誤)
我在想這問卷如果拿來台灣做不知道有沒有機會被 Vue.js 翻盤…

資料層
等等,apollo 不是跟 graphql 站同邊的嗎?
Relay 相對不夠親民,熱度比較低是可以想的到的。
偷渡一下,我覺得 MobX 是真滴好用,尤其 5.0 以後丟掉了一些過去的包袱,已經可以說是完全體了。

後端框架
  • express 大神還是大神
  • Next.js 只能說現在的 SSR 需求實在是不小,自己搞又非常麻煩…
  • Gatsby 體驗還是算不錯,雖然有一些些限制但瑕不掩瑜

測試
完了,真D沒空寫。
不過好像我有稍微用過得還算不少 ㄎ
  • jest 的聲勢大概就跟 React 綁一起的,不太意外,也確實好用
  • cypress 超級推,E2E test 戰鬥力直接爆表
  • storybook 因為我不是什麼嚴謹的 component 人,沒有在用
  • enzyme 我不懂它往下掉的原因是什麼…
  • 難道是 shallow rendering 神話破滅的緣故嗎?
  • react-testing-library 有崛起的趨勢
  • 還是 hook 太夯,但 shallow rendering 支援度不佳呢?
明年的前排應該會加上 react-testing-library 了,畢竟它今年漲得實在不少。
Kent 大大太神啦!

手機/桌機 app
  • reactnative 知名度竟然超過 electron XD
  • ionic 一種跟 cordova 一起沉淪感 (所以才推出自己的 capacitor 吧)
我目前有點看好 Flutter (被歸在「其他」裡面了),Flutter 用畫的解決了很多問題(這樣真的好嗎)。而且除了開發 native app,觸手還伸到了 Web 這邊來,可謂是充滿了野心。
相信明年份的調查,Flutter 也會站到前排了吧!

其他工具
加減看看。
Moment 這麼大包竟然還是蠻受歡迎的…

新知來源
看起來我常用的站也有上榜,好家在。
W3Schools 真的是屹立不搖 www
Podcats 倒是真的沒有在聽。

看法
pass

頒獎典禮
是說我怎麼覺得 Svelte 是因為作者比較會引戰所以才得到這麼高的注目…
Polymer 系的也都蠻屌的,不過不太會宣傳這樣。

結論
被 Sporky 騙到,還去 google 了一下,結果是瞎掰的 library。
寫 JavaScript 真是太棒了!

CNDJS 維護團隊(Cloudflare)的真情告白

Cloudflare 團隊想要告訴大家,現在他們相當努力的在保持 CDNJS 的運作及更新。
簡短的介紹 CDN 之後,提到了現在 CDNJS 為什麼是在掛在 cdnjs.cloudflare.com 底下。
眼看當年就要因為流量爆炸被迫關站(付不出錢),CDNJS 團隊聯絡了 Cloudflare,希望他們能夠幫忙。而 Cloudflare 也答應了,於是就出現了 cdnjs.cloudflare.com,而且還不收錢喔 😉
總之接下來的時間一切安好,CDNJS 也不停地繼續壯大(月流量 3PB),不過也因為瀏覽器的獨立 cache 機制,蒙上了一小層陰影: CDN 是不是變得沒什麼卵用了?
一個月前,一直以來負責自動更新 CDNJS 上套件版本的 bot 掛了,那是一個開源專案,然後作者現在已經沒空修了,開源真是太棒了 👍
歷經一番波折之後,現在變成是由 Cloudflare 團隊接手維護 CDNJS 專案了(從下游變成上游),因為他們知道 CDNJS 的重要性。
如果你也對 CDNJS 有熱情,歡迎貢獻一己之力參與討論
如果最近有打算開始做什麼新專案,不如就用 CDNJS 吧!
Cloudflare 團隊向你保證,CDNJS 就是穩到不行 💪

高手都是這樣用 console.log

好像久久就會看到一次類似的文章,不過每次都會多一點點新東西 XD
我想直接看文章最後這個總結的 gist 就好囉!

void 在現代 JavaScript 下的生存之道

在這個 ES6 以後 arrow function 當道的時代,過氣的 void 運算子總算找到了自己的新用法。
The void operator evaluates the given expression and then returns undefined.
於是文章作者提出了搭配 arrow function 的用法:
在把 arrow function 寫成單行的時候,可以用 void 來達成 return undefined 的效果
這個用法是建立於 想要寫單行的 arrow function,卻不想要 return 任何東西 的情境下。
文章裡面舉了幾個例子,順便還提到了在某些 ESLint config 裡面有包了 no-void 這個 rule,而看起來確實也有人不想要它被內置在裡面。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.