從1月10號第一篇文章開始,到如今過去了4個月又20天,陸續寫下了性能優化系列文章共計十二篇,大概一個月三篇的節奏。本篇文章是性能系列文章的最後一篇,沒有新的大方向優化,講一下寫性能優化系列文章的些許事情:初心,過程,所得。面試
故事發生在去年年末:某版本上線前當我打開App,惟一的體驗就是那如同烏龜爬行般的啓動速度。不只被競品碾壓,更是碾壓了個人技術榮辱心:本身作出的App表現差,就是本身差!這是我下定決心要對項目作性能優化的原由。性能優化
既然要實踐性能優化,而我本身也有知識整理的習慣,那麼寫系列文章天然是水到渠成,順即是對本身的一個督促。但還有一個緣由:微信
那既然我要作性能優化,就挑戰下這個優秀且全面。也留下好的參考文章給後來的人!網絡
性能優化的過程是一個很是困難的過程,須要你對優化的方向不只有知識上的充足儲備還要有對現存業務上的瞭解。拿第一篇App啓動優化來舉例:app
難點在於中間三步:工具
而整理文章的過程更是難上加難,發佈出來文章就是本身的一種承諾,既要具有專業性、又要通俗易懂;既要有深度,優化的招數又要儘量的全面。所以查文檔、翻源碼是屢見不鮮。而平時工做也較忙,所以對於一個月三篇的節奏我甚至以爲有點高產(捂臉)。佈局
談到性能優化,相信各位開發Android的老司機和新司機,都能說上幾句。而在面試過程當中性能優化也是必問的姿式。但人人都能說幾句並不表明對性能優化的理解有多少,不信看幾個問題:性能
相信很多司機確定說不全,但這條估計要讓崇尚「背誦記憶準則」的小夥伴們笑了:我不理解原理,但也能說出幾條優化的規則,你安能說我不懂性能優化?誠然性能優化有不少經驗、準則能夠參考借鑑,可是性能優化卻不該該是背誦記憶的機械動做。若是不理解原理,對性能優化的認識、理解不足,任何場景都拿統一的套路生搬硬套,那優化的深度、全面性、適用性必定會大打折扣。學習
那麼在這個並不輕鬆的性能優化過程當中,我獲得了什麼?測試
性能優化看似是個純技術的事情,可是實際上和業務密不可分,畢竟任何技術都是在具體的業務場景下實踐應用。所以不熟悉模塊業務、具體實現而生搬硬套的話,性能優化工做每每無從下手。
性能優化不是一塊孤立的知識,對性能優化的深刻理解須要方方面面的技術爲輔助,此處仍然以第一篇啓動優化爲例。
尤爲是第三點:每一項都有可能致使性能的瓶頸,而每一項均可以展開闡述,這個過程使你的技術能力得以強化。
大多數狀況下,咱們都不創造知識而只是知識的搬運工,通常作的就是對知識的蒐集和整合。那對咱們決勝就是快速的汲取知識以及完成對知識的判斷及整合,知道什麼地方會有權威、靠譜的資料,判斷知識的使用場景等。
而寫文章過程當中的各類痛苦也不是無用功,經歷過不知道怎麼寫文章的窘迫,纔會知道怎麼肯定文章主題、主線、豐富文章,纔會鍛鍊到本身的表達能力、文字組織能力。
四個字:防微杜漸。不少性能方面的問題都不是一朝一夕產生的,例如OOM,致使OOM發生的代碼可能只是壓死駱駝的最後一根稻草,前面不少地方已經埋下了隱患,只等最後一個地方點燃。還有不少代碼自己並無錯,確實實現了功能,可是放錯了位置。
模塊開發以前最好對技術方案進行評審,從實現上(源頭)儘早規避低性能的實現方式;最好在功能完成以後,使用工具進行性能的分析,進行鍼對性的優化。
歡迎關注微信公衆號:按期分享Java、Android乾貨!