性能優(yōu)化

注意:

優(yōu)化最難的地方就是如何在開發(fā)生命周期中最適當?shù)臅r候去做優(yōu)化。Donald Knuth 有一句名言:「過早優(yōu)化乃萬惡之源」肌毅。這句話背后的原因非常簡單:因為一不小心就會浪費時間去優(yōu)化某個 1% 的地方,但是結(jié)果卻并不會對性能造成什么重大影響悔常。與此同時赃磨,一些優(yōu)化還妨礙了可讀性或者是可維護性,甚至還會引入新的 Bug儡陨。換句話說褪子,優(yōu)化不應當被認為是「意味著得到應用程序的最佳性能」,而是「探索優(yōu)化應用的正確的方式骗村,并得到最大的效益」嫌褪。再換句話說,盲目的優(yōu)化可能會導致效率的丟失胚股,而收益卻很小笼痛。在你應用以下技巧的時候請將此銘記在心。你最好的朋友就是分析工具:找到你可以進行通過優(yōu)化獲得最大程度改善的性能點琅拌,而不用損害應用開發(fā)的進程或者可維護性缨伊。

程序員們浪費了大量時間來思考,或者說是擔憂进宝,他們的程序中非關(guān)鍵部分的運行速度刻坊。并且他們對于性能的這些嘗試,實際上卻對代碼的調(diào)試和維護有著非常消極的影響党晋。我們應當忘記那些不重要的性能影響谭胚,在 97% 的時間里都可以這么說:過早優(yōu)化乃萬惡之源。當然我們也不應當在那關(guān)鍵的 3% 上放棄我們的機會未玻≡侄—— Donald Knuth

容易實現(xiàn)并且效果比較大

1 減少請求
2 合并壓縮文件

規(guī)則05:將CSS樣式表放在頂部如果將css樣式定義放在頁面中或者頁面底部,會出現(xiàn)短暫白屏或者某一區(qū)域短暫白板的情況扳剿,這和瀏覽器的運營機制有關(guān)的旁趟,不管頁面如何加載,頁面都是逐步呈現(xiàn)的庇绽。所以在每做一個頁面的時候锡搜,用Link標簽把每一個樣式表定義放在head中。規(guī)則06:將javascript腳本放在底部瀏覽器在加載css文件時敛劝,頁面逐步呈現(xiàn)會被阻止余爆,直到所有css文件加載完畢,所以要把css文件的引用放到head中去夸盟,這樣在加載css文件時不會組織頁面的呈現(xiàn)蛾方。但是對于js文件,在使用的時候上陕,它下面所有也頁面內(nèi)容的呈現(xiàn)都會被阻塞桩砰,將腳本放在頁面越靠下的地方,就意味著越多的內(nèi)容能夠逐步呈現(xiàn)释簿。

規(guī)則08:使用外部javascript和CSS內(nèi)聯(lián)js和css其實比外部文件有更快的響應速度亚隅,那為什么還要用外部呢?因為使用外部的js和css可以讓瀏覽器緩存他們庶溶,這樣不僅HTML文檔大小減少煮纵,而且不會增加HTTP請求數(shù)量懂鸵。另外,使用外部js和css可以提高組件的可復用性行疏。

減少 回流與重繪 的tips

  1. 使用最佳的布局實踐
    盡量不要使用行內(nèi)樣式或者table去布局匆光。
    減少使用flex布局。

  2. 減少css的選擇器的層級
    有幾個工具可以減少css選擇器的層級酿联。

Tools like Unused CSS, uCSS, grunt-uncss, and gulp-uncss can significantly reduce your style definitions and file sizes.

  1. 減少dom實現(xiàn)的層級
    如果不需要適配老舊的瀏覽器终息,可以試著去減少不必要的嵌套標簽(元素)。
  1. 更新樣式時選擇在dom樹層級較低的標簽(元素)來更新
     
    dom樹層級越低的標簽(元素)贞让,更改樣式的時候回流時影響的元素越少

  2. 讓復雜的動畫脫離文檔流
    為了確保一個動畫只作用于一個標簽(元素)周崭,可以通過設置position:absolute; 或者position:fixed; 使當前元素脫離文檔流。

  3. 編輯隱藏的標簽(元素)

一個不顯示display:none;的標簽(元素)在改變的時候不會觸發(fā)回流和重繪喳张。在開發(fā)時续镇,注意在
標簽(元素)顯示之前操作它們。

  1. 成組的更新標簽(元素)
    一個操作更新多個元素可以提高性能销部。

不推薦


var myelement = document.getElementById('myelement');
myelement.width = '100px';
myelement.height = '200px';
myelement.style.margin = '10px';

推薦


var myelement = document.getElementById('myelement');
myelement.classList.add('newstyles');



.newstyles {
    width: 100px;
    height: 200px;
    margin: 10px;
}

使用文檔碎片來操作dom

var
        i, li,
    frag = document.createDocumentFragment(),
    ul = frag.appendChild(document.createElement('ul'));

for (i = 1; i <= 3; i++) {
    li = ul.appendChild(document.createElement('li'));
    li.textContent = 'item ' + i;
}

document.body.appendChild(frag);

  1. 限定被影響的元素(這段自己沒有真正明白)

考慮使用選項卡去切換現(xiàn)實內(nèi)容磨取。 這幾個顯示的選項卡要設置固定的高度或者讓每一個卡片脫離文檔流柴墩。

9. 動畫的平滑性和性能之間的選擇

每次動畫移動一個像素可能看起來平滑,但對設備的性能要求較高凫岖。如果每次移動四個像素江咳,會減少四分之一的回流,平滑性會降低一點哥放。

  1. 使用瀏覽器工具去分析

主流瀏覽器都提供工具去高亮顯示回流是如何影響性能的歼指。
打開時間面板記錄活動。

在∩瘛ie 瀏覽器中使用  UI Responsiveness 可以查看
UI Responsiveness in the Internet Explorer

image.png

所有的瀏覽器回流和重繪的時間顯示為綠色踩身。

chrome 開發(fā)者工具中文文檔(太棒了)

http://www.css88.com/doc/chrome-devtools/network-performance/resource-loading/

參考:
https://zhuanlan.zhihu.com/p/21417465

https://www.sitepoint.com/10-ways-minimize-reflows-improve-performance/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市社露,隨后出現(xiàn)的幾起案子挟阻,更是在濱河造成了極大的恐慌,老刑警劉巖峭弟,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件附鸽,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞒瘸,警方通過查閱死者的電腦和手機坷备,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來情臭,“玉大人省撑,你說我怎么就攤上這事赌蔑。” “怎么了竟秫?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵娃惯,是天一觀的道長。 經(jīng)常有香客問我鸿摇,道長石景,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任拙吉,我火速辦了婚禮潮孽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筷黔。我一直安慰自己往史,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布佛舱。 她就那樣靜靜地躺著椎例,像睡著了一般。 火紅的嫁衣襯著肌膚如雪请祖。 梳的紋絲不亂的頭發(fā)上订歪,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音肆捕,去河邊找鬼刷晋。 笑死,一個胖子當著我的面吹牛慎陵,可吹牛的內(nèi)容都是我干的眼虱。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼席纽,長吁一口氣:“原來是場噩夢啊……” “哼捏悬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起润梯,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤过牙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纺铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抒和,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年彤蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了摧莽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡顿痪,死狀恐怖镊辕,靈堂內(nèi)的尸體忽然破棺而出油够,到底是詐尸還是另有隱情,我是刑警寧澤征懈,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布石咬,位于F島的核電站,受9級特大地震影響卖哎,放射性物質(zhì)發(fā)生泄漏鬼悠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一亏娜、第九天 我趴在偏房一處隱蔽的房頂上張望焕窝。 院中可真熱鬧,春花似錦维贺、人聲如沸它掂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虐秋。三九已至,卻和暖如春垃沦,著一層夾襖步出監(jiān)牢的瞬間客给,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麸恍。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親官觅。 傳聞我的和親對象是個殘疾皇子纵菌,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 性能優(yōu)化方向分類 請求數(shù)量: 合并腳本和樣式表, CSS Sprites休涤, 拆分初始化負載咱圆, 劃分主域(使用“查找...
    Www劉閱讀 1,761評論 3 8
  • 圍繞前端的性能多如牛毛,涉及到方方面面功氨,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優(yōu)化策略進行羅列注意序苏,是羅列不是展...
    流動碼文閱讀 675評論 0 0
  • 1. 盡量減少HTTP請求次數(shù) 合并js 合并css 圖片sprite 2. 延遲加載內(nèi)容 圖片懶加載 數(shù)據(jù)懶加載...
    Aleph_Zheng閱讀 4,251評論 0 4
  • 1.盡量減少http請求次數(shù) 合并js 合并css 小圖標使用精靈圖 2.延遲加載頁面內(nèi)容 圖片、數(shù)據(jù) 懶加載 功...
    別讓我一個人醉_1fa7閱讀 445評論 0 0
  • 玫瑰園薈萃2017第二十三期 本期主題作業(yè):菊 本期作業(yè)主持人:蓮花墨 前言:菊花給蕭瑟的季節(jié)帶來了生機捷凄,被喻為花...
    云中飄舞閱讀 532評論 11 25