查缺補漏,下一個永遠不會

爲什麼說DOM操作是昂貴的

我們直到,首先DOM節點其實也是JS對象,爲什麼操作虛擬DOM沒有昂貴一說,操作真實的DOM節點就有昂貴之談呢?

首先可以確定的是操作DOM本身並不會費時費力,但是DOM身處於瀏覽器大環境中,操作DOM帶來的repaint和reflow造成的影響就十分可觀了。

TCP字段和HTTP字段

講解TCP字段的文章並不多,有個圖可以方便記憶:
在這裏插入圖片描述
HTTP字段相對來說就非常複雜了,一般來說,分爲通用首部字段,請求首部字段和響應首部字段。

舉幾個例子,通用首部常用的有Cache-control,connection,content等。

請求常用有,if-match(etag),if-modefied-since(last-modefied),Authorization,Host,referer。

響應常用的有,Etag,server,access-control-allow-origin等

雙向綁定

今天被問到了Vue的雙向綁定,充分暴露了我對Vue膚淺的認識,即便Object.defineProperty和Proxy的大名已經如雷貫耳,還是沒激起我去了解他們的好奇心。儘管其實React中這樣的寫法已經寫了無數遍了。

拿表單數據來說,在vue中使用v-model可以實現視圖對數據的修改,同時也可以實現數據對視圖的修改。在React中要實現這個的話要費勁一些,但是也很簡單:

function App() {
  const [value, setValue] = useState("");
  function changeData(e) {
    setValue(e);
  }
  return (
    <div className="App">
      <h1>如何實現React雙向綁定</h1>
      <input
        value={value}
        onChange={e => {
          changeData(e.target.value);
        }}
      />
      <button
        onClick={() => {
          setValue("sad");
        }}
      >
        設置
      </button>
      {value}
    </div>
  );
}

估計很多人都寫過這樣的代碼 ,不知道有沒有人和我一樣根本沒往雙向綁定這方面去思考,但是確實,通過點擊按鈕,監聽到了按鈕事件,數據改變,同時通過修改表單數據,最後也反映到了視圖的改變。

但是再深究一下,這種方式只是達到了數據雙向綁定的效果,原理上與Vue的實現還是大相徑庭的。

最後再說一下單向數據流和雙向綁定的關係,其實沒有關係,很多人會把他們弄混,其實Vue也是遵循的單向數據流,父組件向子組件傳值,子組件去修改父組件中值只能使用傳函數的方式。所以說雙向綁定只是Vue爲了方便開發者做的一個功能。

就算爲了深入學習下雙向綁定,也要把Mobx提上日期了呀。

Hooks的優點

  1. 代碼複用更加方便
  2. 代碼量顯著減少
  3. 有些情況下擁有更好的性能
  4. 更容易拆分組件

解決首屏渲染問題

因爲現在的SPA基本離不開Webpack,所以白屏問題百分之80都是在基於Webpack優化。這篇文章可以讀一下,主要講了下面幾點:

  1. 在HTML內實現Loading狀態
  2. 去掉外聯 css
  3. 緩存
  4. 使用動態 polyfill
  5. 使用 SplitChunksPlugin 拆分公共代碼
  6. 正確地使用 Webpack 4.0 的 Tree Shaking
  7. 使用動態 import,切分頁面代碼,減小首屏 JS 體積
  8. 編譯到 ES2015+,提高代碼運行效率,減小體積
  9. 使用 lazyload 和 placeholder 提升加載體驗
  10. 骨架屏

再有就是很招打的回答,用SSR唄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章