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

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

Avatar for Kuro Hsu Kuro Hsu
September 20, 2020

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

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

Avatar for Kuro Hsu

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 …?