一、v-if 和 v-show 區分使用場景
v-if 是 真正 的條件渲染,由於它會確保在切換過程當中條件塊內的事件監聽器和子組件適當地被銷燬和重建;也是惰性的:若是在初始渲染時條件爲假,則什麼也不作——直到條件第一次變爲真時,纔會開始渲染條件塊。
v-show 就簡單得多, 無論初始條件是什麼,元素老是會被渲染,而且只是簡單地基於 CSS 的 display 屬性進行切換。
因此,v-if 適用於在運行時不多改變條件,不須要頻繁切換條件的場景;v-show 則適用於須要很是頻繁切換條件的場景。
二、computed 和 watch 區分使用場景
computed:**是計算屬性,依賴其它屬性值,而且 computed 的值有緩存,只有它依賴的屬性值發生改變,下一次獲取 computed 的值時纔會從新計算 computed 的值;
watch:**更多的是「觀察」的做用,相似於某些數據的監聽回調 ,每當監聽的數據變化時都會執行回調進行後續操做;
運用場景:
當咱們須要進行數值計算,而且依賴於其它數據時,應該使用 computed,由於能夠利用 computed 的緩存特性,避免每次獲取值時,都要從新計算;當咱們須要在數據變化時執行異步或開銷較大的操做時,應該使用 watch,使用 watch 選項容許咱們執行異步操做 ( 訪問一個 API ),限制咱們執行該操做的頻率,並在咱們獲得最終結果前,設置中間狀態。這些都是計算屬性沒法作到的。
三、利用凍結數據
Vue 會經過 Object.defineProperty 對數據進行劫持,來實現視圖響應數據的變化,然而有些時候咱們的組件就是純粹的數據展現,不會有任何改變,咱們就不須要 Vue 來劫持咱們的數據,在大量數據展現的狀況下,這可以很明顯的減小組件初始化的時間,那如何禁止 Vue 劫持咱們的數據呢?能夠經過 Object.freeze 方法來凍結一個對象,一旦被凍結的對象就不再能被修改了。
四、事件的銷燬
Vue 組件銷燬時,會自動清理它與其它實例的鏈接,解綁它的所有指令及事件監聽器,可是僅限於組件自己的事件。 若是在 js 內使用 addEventListene 等方式是不會自動銷燬的,咱們須要在組件銷燬時手動移除這些事件的監聽,以避免形成內存泄露,如:
created() { addEventListener('click', this.click, false) }, beforeDestroy() { removeEventListener('click', this.click, false) }
總之: 減小對dom的操做;減小重排與重繪;
CSS 方面
性能優化
慎重選擇高消耗的樣式
高消耗屬性在繪製前須要瀏覽器進行大量計算:
box-shadowsborder-radiustransparencytransformsCSS filters(性能殺手)
1.scope中元素選擇器儘可能少用
用途:防止全局同名CSS污染
原理:在標籤加上v-data-something屬性,再在選擇器時加上對應[v-data-something],即CSS帶屬性選擇器,以此完成相似做用域的選擇方式
缺點:
(1)因爲只是經過屬性限制,類仍是原來的類,因此在其餘地方對類設置樣式仍是能夠形成污染。
(2)添加了屬性選擇器,對於CSS選擇器的權重加劇了。
(3)外層組件包裹子組件,會給子組件的根節點添加data屬性。在外層組件中沒法修改子組件中除了根節點之外的節點的樣式。好比子組件中有box類,在父節點中設置樣式,會被編譯爲
.box[data-v-x]
2. 減小查詢層級:如.header .logo要好過.header .top .logo;
3.減小查詢範圍
:如.header>li要好過.header li;
4.避免tag標籤與class或者ID並存:如a.top、button#submit;
5.避免在CSS中使用運算式:expression、calc、等等,可能會形成屢次repaint和reflow。
6.不濫用 Float
Float在渲染時計算量比較大,儘可能減小使用。 flex 基本上 能夠比float佈局 節省一倍的時間
7.若是使用基於 javaScript 的動畫,儘可能使用 requestAnimationFrame.
避免使用 setTimeout, setInterval.避免經過相似 jQuery animate()-style 改變每幀的樣式,使用 CSS 聲明動畫會獲得更好的瀏覽器優化。
使用 translate 取代 absolute 定位就會獲得更好的 fps,動畫會更順滑。
8.善於css繼承
總之:CSS 優化主要是四個方面:
這個方面相關的 best practice 太多了,網上隨便找一找就是一堆資料,好比不要用 import 啊,壓縮啊等等,主要是從減小文件體積、減小阻塞加載、提升併發方面入手的,任何 hint 都逃不出這幾個大方向。
3.渲染性能
命名合理嗎?結構層次設計是否足夠健壯?對樣式進行抽象複用了嗎?優雅的 CSS 不只僅會影響後期的維護成本,也會對加載性能等方面產生影響。這方面能夠多找一些 OOCSS(不是說就要用 OOCSS,而是說多瞭解一下)等等不一樣 CSS Strategy 的信息,取長補短。
三、推薦書寫順序
(1)位置屬性(position, top, right, z-index, display, float等) (2)大小(width, height, padding, margin) (3)文字系列(font, line-height, letter-spacing, color- text-align等) (4)背景(background, border等) (5)其餘(animation, transition等)