Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[ModernWeb'20] Vue.js : The Bad Parts

Kuro Hsu
September 20, 2020

[ModernWeb'20] Vue.js : The Bad Parts

Vue.js 發展至今也有數年的歷史,而今年最熱門的議題莫過於新釋出的 Vue 3.0。 在本場演講中,我將以社群傳教士的角度向大家分享 Vue.js 這些年來的發展,以及那些不太受歡迎的特性。

Kuro Hsu

September 20, 2020
Tweet

More Decks by Kuro Hsu

Other Decks in Technology

Transcript

  1. Vue.js: The Bad Parts ? - 狀態管理與畫面的「不」同步 - 糟糕的效能 -

    混亂的模板與語法 - 邏輯與程式碼難以管理、複用
  2. 混亂的模板與語法? • 到處都是 this • 我能用 arrow function 嗎? •

    是不是使用 Vue.js 就不能享 受最新的 ES6 語法?
  3. 狀態與畫面的「不」同步: Reactivity • Object.defineProperty() 的先天限制 • 直接修改 data 某個陣列內容 •

    直接刪除某個 data 內的物件屬性 • 直接新增某個 data 內的物件屬性 • 以上 Object.defineProperty() 都追蹤不到。 • 必須使用 vue.$set() 強制寫入更新。
  4. Functional Component • Render function • functional (stateless) component •

    functional: true • <template functional> • 透過 Object.freeze 鎖定 data
  5. Reactivity in Vue 3 • Change Detection Caveats • Object.defineProperty()

    ➡ Proxy API • 沒有 Vue 2.x 提到的那些問題 • 唯一缺點是 IE 11 不支援 • 整體來說 Z > B
  6. Reactivity in Vue 3 Object Proxy get (target, key) {

    return .... } set (target, key, value) { return .... } console.log(proxy.name) proxy.name = “Kuro”
  7. 模板編譯:靜態節點優化 • 模板內容改由動態指令 ( v-if / v-for / slot) 來切分為獨立的區塊

    • 每個動態的節點內容、位置是固定的 • Virtual DOM 更新時只需要遍歷動態的節點, 更新效率與實際 DOM 數量脫鉤,減少不必要的效能浪費 • 與 Vue 2.x 效能相比可提升 2-5 倍
  8. Functional Component in Vue 3 • Render function • functional

    (stateless) component • functional: true • <template functional>
  9. 混亂的模板與語法? • 組件資料 / 狀態的管理 • this 與 箭頭函式 •

    程式碼與邏輯的管理與複用 •共同解藥: Compositions API
  10. Compositions API • 並非為了取代現有的 Options style • 為了解決大型應用的痛點 (狀態、邏輯管理、複用) •

    狀態來源清晰、無 namespace 的衝突 • 沒有 「this」 • 開發彈性大、效能佳 • 易於切分管理,語法類似 React Hooks.
  11. Vue.js: The Bad Parts ? - 狀態管理與畫面的「不」同步 - 糟糕的效能 -

    混亂的模板與語法 - 邏輯與程式碼難以管理、複用
  12. Vue.js 3.0: The Good Parts ! - 狀態與畫面不再各說各話 - 更小的檔案、更快的效能

    - 清晰的模板與語法 - 邏輯、程式碼的管理複用更方便
  13. And … - Vue.js 2.7 (LTS version / 2021 Q1)

    - Vue Developer Experience (@vuedx) - Vite - next …?