感謝朋友的內推,去中興公司面試了一趟,稍微作一下總結。javascript
一、vue的渲染機制vue
答:這個問題是面試常常會提到的可能不是vue多是其餘(react).以前版本的angular是用的髒值檢測的方式,如今都趨同於數據劫持的模式&發佈訂閱者模式
在es5中有一個函數就是咱們的 Object.defineProperty 這個方法有興趣瞭解的同窗請戳
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)java
二、vue的生命週期react
我相信這個你們都比較清楚面試
- beforeCreate ->在實例初始化以後,數據觀測 (data observer) 和 event/watcher 事件配置以前被調用。
- created ->在實例建立完成後被當即調用。在這一步,實例已完成如下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
- beforeMount ->在掛載開始以前被調用:相關的 render 函數首次被調用。
- mounted ->el 被新建立的vm.$el替換,並掛載到實例上去以後調用該鉤子。若是 root 實例掛載了一個文檔內元素,當mounted被調用時 vm.$el 也在文檔內
- beforeUpdate ->數據更新時調用,發生在虛擬 DOM 打補丁以前。這裏適合在更新以前訪問現有的 DOM,好比手動移除已添加的事件監聽器。
該鉤子在服務器端渲染期間不被調用,由於只有初次渲染會在服務端進行數組
- updated ->因爲數據更改致使的虛擬DOM從新渲染和打補丁,在這以後會調用該鉤子
- activated ->keep-alive 組件激活時調用。該鉤子在服務器端渲染期間不被調用
- deactivated ->keep-alive組件停用時調用。該鉤子在服務器端渲染期間不被調用。
- beforeDestroy->實例銷燬以前調用。在這一步,實例仍然徹底可用。
- destroyed ->Vue實例銷燬後調用。調用後,Vue實例指示的全部東西都會解綁定,全部的事件監聽器會被移除,全部的子實例也會被銷燬。
- errorCaptured->當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數:錯誤對象、發生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子能夠返回 false 以阻止該錯誤繼續向上傳播。
三、vue在什麼狀況下在數據發生改變的時候不會觸發視圖更新瀏覽器
v-for遍歷的數組,當數組內容使用的是arr[0].xx =xx更改數據,vue沒法監測到
vm.arr.length = newLength也是沒法檢測的到的
緩存
四、性能優化性能優化
- 減小http請求,合理設置 HTTP緩存
- 使用瀏覽器緩存
- 啓用壓縮
- CSS Sprites
- LazyLoad Images
- CSS放在頁面最上部,javascript放在頁面最下面
- 儘可能避免使用 eval和 Function
持續更新···服務器