精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高兼容低成本,開箱即用的首頁性能優化方式被我們找到了

移動開發
經過對 LayoutInflater 耗時的深入分析,我們找到了可以兼容各種 View 場景的 APT 方案。這一方案既避免了反射所帶來的損耗,也不會增加額外的維護成本,成為了一個開箱即用的工具。

2020年初,小紅書首頁 UI 的復雜度顯著提升,在優化布局 xml 和使用一些 stub 方式的同時,我們也在尋找一些成本更低、性能更好的方式。

X2C 是當時業界熟知的一種優化方式,其原理是編譯期將 xml 翻譯成代碼,可以有效避免反射以及讀取資源文件的損耗。由于小紅書 APP 中存在著很多自定義 View 的場景,X2C 同時也會帶來較高的維護成本。

經過對 LayoutInflater 耗時的深入分析,我們找到了可以兼容各種 View 場景的 APT 方案。這一方案既避免了反射所帶來的損耗,也不會增加額外的維護成本,成為了一個開箱即用的工具。

1、方案的探索

我們的探索靈感來自于 ViewCompiler 。作為 Google 的一個實驗性工具,ViewCompiler 可以手動地將 xml 布局轉化為 java 文件或者 dex 文件,但它并不支持 merge 和 include 標簽。

圖片

ViewCompiler 在 Android Q(Android 10)的時候被引入,目前來說也還是一個實驗性質的工具,因此我們平時并沒有辦法使用它。下圖為Android S(Android 12)中的源碼,大家可以看到這項功能未被開啟。

圖片

其原理也很簡單,先生成一個模板代碼片段,然后再生成遍歷 xml 的邏輯代碼。

圖片

這樣做的主要好處是可以節省掉反射帶來的時間消耗,官方在 AppCompatViewInflater 中已經處理了原生 View 的創建,通過直接匹配名稱 new 對象,避免了使用反射造成的性能開銷。

圖片

圖片

在日常使用中,反射性能開銷主要集中在自定義 View 這部分,我們的 App 本身就是一個自定義 View 非常多的場景,所以天然適合這種 VIewCompiler 的這種方式。同時,因為在遍歷 xml 的時候,每一個 attrs 都會遍歷到,所以它在維護性上也有著巨大的優勢,我們不需要對自定義的 attrs 做任何處理。

基于對 X2C 和 ViewCompiler 的源碼和生成代碼的閱讀,我們決定做一個可以生成 Kotlin 代碼,同時也解決 ViewCompiler 不支持的 include 和 merge 兩個標簽。我們用到的工具比較常規,有 kapt 和 kotlinpoet,整體的思路是通過 Resources.getLayout 取到 XmlResourceParser,然后通過 parser 的不斷 next 來遍歷每一個 xml 中的 tag,生成的代碼示意如下:

圖片

在遇到 merge 和 include 時,我們需要特殊處理遞歸調用的邏輯,以便可以將父子布局連在一起。

用這種新的方式替換掉首頁中一些布局的實現后,我們發現,線上首頁部分 p90 的布局時間減少了 200ms+,時長、CES、留存等指標均得到了顯著提升。

2、探入分析

LayoutInflater 的工作過程

LayoutInflater 的工作過程可以用下圖來簡易表示:


圖片


本文所闡述的方案就是利用 apt 在編譯期間生成代碼,在便利解析 layout 文件之后,我們使用生成的代碼直接創建實例,其效率與命中 AppCompat 基礎組件邏輯之后的效率在理論上是一致的。

AppCompat 基礎組件可以查看 AppCompatViewInflater.java 源碼(上文也有部分展示),其中包括了諸如 TextView、Button 等十幾個常用的基礎組件。

圖片

就一個具體的布局而言,能夠通過 Layout2Code 的使用得以提升的性能只有除了基礎組件之外的其他組件,尤其是當布局使用了大量自定義組件時,效果尤為明顯。

這也給了我們另一個提醒。如在 xml 中寫 TextView / TextViewCompat,在 AppCmpatViewInflater 的作用下最終創建的實例都是 TextViewCompat。但在不使用 Layout2Code 或類 X2C 方案時,它們的效率是不同的,前者命中上圖的直接創建邏輯,而后者則會通過反射創建。

圖片

X2C的不足

X2C 除了做了以上優化,還將 layout 文件的讀取和解析也一并移到了編譯階段,以此來降低 IO 開銷。但編譯期解析 xml 最大的困難在于我們需要逐條翻譯 View 的屬性,原因是編譯期間并沒有 SDK 的依賴,因此無法生成 AtrributeSet 對象直接供以 View 的構造器消費。

這樣一來,需要人工維護翻譯規則,將一條條 xml 屬性轉換成設置 View 屬性的代碼,這帶來了幾個問題:

1. 生成的代碼量指數級增加

2. 需要極高的維護成本來支持自定義 View 的屬性

3. 某些 xml 屬性并沒有相對應的方法或不是一一對應的。

總而言之,在此基礎上要維持健壯完備的功能是非常困難的。而我們所探索的 Layout2Code 的新方案與之相比,兼容性和維護成本都有著巨大優勢,唯一需要權衡考慮的就是運行時讀取 layout 文件的優化空間有多少,是否值得這樣的投入。

layout 文件的特殊性

提到 xml 文件,條件反射般地就會想到是 IO 操作,性能差,這沒錯,但 layout 文件卻比較特殊。在 Andorid 應用打包過程中,AAPT 會對資源進行打包,會將除了 asset 文件夾下的 xml 文件通過字符串池復用、二進制轉換等方式進行壓縮,最終生成壓縮后的資源文件和資源文件索引 resources.arsc 還有 R 文件。而在使用 AssetManager 對資源文件進行加載時,我們也會使用 mmap 來降低 IO 成本。

圖片

通過分析以上種種手段的利弊,我們在實際應用場景中測試后發現讀取 layout 文件的耗時通常不超過 1ms。因此,考慮到將 layout 文件的讀取和解析移到編譯階段所帶來的維護成本,權衡之下我們最終選擇了直接放棄這一部分的優化。

3、總結

在當下的開發環境中,Layout2Code 這一方案在性能提升方面仍然能夠發揮很大的作用,當然有效使用這一方案的前提是開發者足夠了解方案原理,以及知曉其具體的適用范圍(非 AppComapt 組件)。

相比于傳統的 X2C 方案,Layout2Code 的適用范圍更廣,維護成本也更低。目前,該方案已經在小紅書 APP 中得到了廣泛的應用,并為我們帶來了良好的收益和效果。我們對 Layout2Code 的研究由 kotlin 實現,使用 kapt,在未來我們也計劃接入 ksp,來減少編譯期耗時,持續優化這一方案。

4、作者簡介

殤不患 (blv@xiaohongshu.com) 小紅書商業技術 Android 工程師

綾人(lingren@xiaohongshu.com) 小紅書商業技術 Android 工程師

責任編輯:龐桂玉 來源: 小紅書技術REDtech
相關推薦

2021-08-31 15:53:48

Nuxt 開箱服務

2022-05-19 15:10:03

英特爾TensorFlow

2023-05-06 18:37:43

2013-01-22 15:35:19

UCSRAC數據中心

2023-03-08 21:25:58

開源工具庫開箱

2022-08-08 08:29:55

圖片壓縮前端互聯網

2023-11-04 12:43:44

前端圖片參數

2023-01-15 20:28:32

前端圖片壓縮

2023-12-07 12:38:09

架構低成本開發

2010-07-16 11:30:06

SQL Server

2021-09-26 05:41:47

基礎設施連接無線技術網絡

2025-07-10 00:00:05

開箱ApacheHertzbeat

2020-06-17 09:59:17

人工智能

2023-05-29 10:28:25

能源互聯網物聯網

2021-09-01 17:43:32

StreamNativ開源

2021-09-28 09:30:18

uni-appVue 3.0uniCloud

2023-01-29 07:49:57

2022-08-02 09:01:55

后臺管理模版

2018-09-11 14:20:06

數據庫Redis面試題
點贊
收藏

51CTO技術棧公眾號

精品一区二区三| a视频在线观看| 久久国产欧美| 精品国产欧美一区二区五十路| 两性午夜免费视频| 91九色在线播放| 国产天堂亚洲国产碰碰| 亚洲qvod图片区电影| 成年人免费高清视频| 久久精品国产大片免费观看| 精品处破学生在线二十三| 欧美在线观看视频网站| 欧美14一18处毛片| 中文在线资源观看网站视频免费不卡| www.成人av| 色婷婷久久综合中文久久蜜桃av| 亚洲先锋成人| 在线成人激情视频| 国产高潮视频在线观看| 精品69视频一区二区三区| 亚洲成人动漫av| 一区二区91美女张开腿让人桶| 五十路在线观看| 国产一区久久久| 国产精品久久久久久五月尺| 奇米影视第四色777| 亚洲国产日韩欧美在线| 在线观看精品国产视频| 波多野结衣有码| 日韩中文字幕视频网| 欧美揉bbbbb揉bbbbb| 日本精品一区二区三区四区| 91视频国产高清| 在线免费观看视频| 日韩伦理一区二区三区| 日韩女优av电影| 怡红院亚洲色图| 日韩av超清在线观看| 精品久久久久久久久久| 久久亚洲精品无码va白人极品| a免费在线观看| 亚洲欧美日韩在线不卡| 亚洲蜜桃在线| 91se在线| 中文字幕一区在线| 免费看啪啪网站| 午夜在线小视频| 久久久精品国产免费观看同学| 岛国视频一区| 午夜久久久久久久久久| 国产乱人伦偷精品视频不卡| 成人福利网站在线观看| 97国产精品久久久| 捆绑变态av一区二区三区| 国产欧美婷婷中文| 亚洲视屏在线观看| 韩日精品视频一区| 91精品视频观看| 国产精品热久久| 国产一区二区看久久| 91美女片黄在线观| 国产肥老妇视频| 国产成人日日夜夜| 高清一区二区三区视频| 少妇又色又爽又黄的视频| av亚洲精华国产精华精华| 精品国产乱码久久久久久久软件| 桃花色综合影院| 国产亚洲欧美激情| 天堂精品一区二区三区| 欧美成年黄网站色视频| 亚洲精品国产无套在线观| 国产一级大片免费看| 999福利在线视频| 中文字幕一区日韩精品| 亚洲视频一区在线| 日本国产中文字幕| 韩国成人二区| 欧美性一区二区| 国产高清av片| 日韩在线麻豆| 日韩在线中文视频| 99免费在线观看| 日韩电影在线观看电影| 91免费国产网站| 天天综合网在线| 国产女人aaa级久久久级| 91精品一区二区三区四区| 1234区中文字幕在线观看| 91极品视觉盛宴| 97超碰人人看| 激情五月色综合国产精品| 日韩一级黄色av| 日韩激情在线播放| 久久66热re国产| 国产中文一区二区| 77777影视视频在线观看| 夜夜揉揉日日人人青青一国产精品| 99热自拍偷拍| av在线国产精品| 亚洲男人天堂视频| 免费一级全黄少妇性色生活片| 老司机一区二区三区| 亚洲一区制服诱惑| 国产精品久久久久一区二区国产 | 日本三级韩国三级欧美三级| 一本到不卡精品视频在线观看| 中文字幕在线视频一区二区三区| 天天做夜夜做人人爱精品| xvideos国产精品| 五月天婷婷久久| 国产精品一二三四| 日韩在线第一区| 成人bbav| 精品国产网站在线观看| 亚洲二区在线播放| 日韩精品电影在线| 精品免费视频123区| av免费在线免费| 欧美日韩一区二区在线观看| 国产国语性生话播放| 欧美va天堂| 亚洲qvod图片区电影| 99se视频在线观看| 色素色在线综合| 国产精品久久久久久久无码| 欧美在线三区| 91久久精品日日躁夜夜躁国产| 国产高清一级毛片在线不卡| 日韩欧美国产黄色| 亚洲一区二区三区四区五区六区| 午夜久久影院| 亚洲综合国产精品| 免费人成在线观看播放视频| 在线亚洲一区二区| 97伦伦午夜电影理伦片| 国产婷婷精品| 国产亚洲一区二区三区在线播放| 在线中文字幕视频观看| 制服丝袜中文字幕一区| 激情五月深爱五月| 免费成人在线观看| 亚洲欧美成人一区| 欧美成人aaa| 中文字幕亚洲天堂| 一区二区三区在线免费观看视频 | 天堂网avav| 国产又黄又大久久| 国产精品美女在线播放| 伦一区二区三区中文字幕v亚洲| 亚洲午夜av久久乱码| 少妇无套内谢久久久久| 欧美国产日产图区| 亚洲成人av免费看| 91综合网人人| 999国内精品视频在线| 国产羞羞视频在线播放| 亚洲第一精品自拍| 久久久精品福利| 久久精品亚洲精品国产欧美| 99视频在线免费| 93在线视频精品免费观看| 亚洲自拍av在线| 丁香花在线观看完整版电影| 日韩精品极品视频免费观看| 懂色av中文字幕| 综合色中文字幕| ass极品水嫩小美女ass| 亚洲国产欧美国产综合一区| 久久天天狠狠| 国精品产品一区| 欧美成人第一页| 天堂av在线免费| 91传媒视频在线播放| 久久人妻无码aⅴ毛片a片app| 国内成人免费视频| 每日在线观看av| 精品久久影视| 亚洲已满18点击进入在线看片| 色呦呦视频在线观看| 亚洲男人天堂2023| 99久久精品国产成人一区二区| 亚洲成av人片一区二区三区| 亚洲国产无码精品| 免费亚洲电影在线| 欧美这里只有精品| 台湾色综合娱乐中文网| 国产在线观看一区二区三区| 日本资源在线| 永久免费毛片在线播放不卡| 精品乱子伦一区二区| 日韩欧美亚洲综合| 久久国产美女视频| 久久精品人人做| 95视频在线观看| 六月丁香婷婷色狠狠久久| 性一交一乱一伧国产女士spa| 国产一区二区电影在线观看| 99精品国产高清一区二区| av综合电影网站| 九九九久久久久久| h视频在线免费| 亚洲精品久久久久| 国产欧美日韩成人| 在线亚洲精品福利网址导航| 久久久久久久久久综合| 国产亚洲欧美在线| 国产老熟女伦老熟妇露脸| 久久er99精品| 国产精品99久久免费黑人人妻| 亚洲视频免费| 一级全黄肉体裸体全过程| 国产成人手机高清在线观看网站| 超碰97在线播放| 91精品一久久香蕉国产线看观看| 国产成+人+综合+亚洲欧洲| 黄色在线观看视频网站| 久久久999精品| jyzzz在线观看视频| 亚洲精品日韩欧美| 老熟妇高潮一区二区高清视频| 欧美电影在线免费观看| 欧美视频xxxx| 日韩人体视频一二区| 日本一级一片免费视频| 亚洲综合免费观看高清完整版在线| 手机免费观看av| 国产日韩亚洲欧美综合| 黄色aaa视频| 91丨porny丨最新| 岛国精品资源网站| 成人动漫在线一区| 午夜福利三级理论电影| 国产精品夜夜爽| 欧美xxxxxbbbbb| 黄色小说综合网站| 久国产精品视频| 狠狠色伊人亚洲综合成人| 538任你躁在线精品免费| 日韩精品视频网站| 欧美婷婷精品激情| 日韩电影网1区2区| 高清av免费看| 麻豆一区二区99久久久久| 国产又猛又黄的视频| 免播放器亚洲一区| 污网站免费在线| 极品少妇xxxx偷拍精品少妇| 亚洲欧美日韩三级| 国产精品正在播放| wwwxxx色| 99精品视频在线观看| 中国美女乱淫免费看视频| 26uuu久久天堂性欧美| 成年人免费观看视频网站| 久久精品视频免费观看| 欧美老女人性生活视频| 国产精品欧美久久久久无广告| 老司机精品免费视频| 亚洲色图丝袜美腿| 国产一级片视频| 天天综合网天天综合色| 久久精品偷拍视频| 欧美男生操女生| 精品人妻无码一区二区| 亚洲成年人在线播放| 欧美视频综合| 久久精品国产久精国产思思| 色呦呦视频在线观看| 欧美在线免费视频| 亚洲电影有码| 国产激情一区二区三区在线观看 | 精品一区二区免费在线观看| 日本黄色www| 91视视频在线直接观看在线看网页在线看| 成人h动漫精品一区| 国产精品久久久久7777按摩 | 伊人精品在线| 国产视频一区二区三区在线播放| 免费人成精品欧美精品| 久久久久亚洲av片无码v| av毛片久久久久**hd| 国产一二三四区在线| 一区二区三区成人| 中文字幕在线观看视频免费| 欧美一级欧美三级| 性xxxx视频| 久久久精品网站| 咪咪网在线视频| 91久久久久久久一区二区| 天海翼精品一区二区三区| 这里只有精品66| 一本色道久久精品| 嫩草视频免费在线观看| 久久综合精品国产一区二区三区| 影音先锋男人资源在线观看| 午夜精品一区在线观看| 亚洲中文字幕在线一区| 日韩av中文字幕在线| 免费a级毛片在线播放| 91超碰中文字幕久久精品| 亚瑟国产精品| 日本一区二区三区在线视频| 国产一区久久| 91精品国产三级| 国产日本一区二区| 国产精品6666| 欧美一区二区三区视频在线 | 精品久久久久av| 风间由美一区二区三区在线观看| 日本美女xxx| 好吊成人免视频| 东京干手机福利视频| 最好看的2019年中文视频| 中文不卡1区2区3区| 国产精品久久久久久久天堂第1集| 91麻豆精品国产91久久久平台| 国产亚洲天堂网| av色综合久久天堂av综合| 欧美交换国产一区内射| 欧美日韩成人一区二区| 国内精品在线视频| 日韩免费观看视频| 日日狠狠久久偷偷综合色| 国产精品一线二线三线| 国产成+人+日韩+欧美+亚洲| 多男操一女视频| 欧美美女一区二区在线观看| 91在线导航| 国产精品美女www| 精品成人影院| 免费激情视频在线观看| 91视频在线观看免费| 国产91av视频| 欧美精品一区二区三| missav|免费高清av在线看| 福利精品视频| 国产一区二区中文| 一级黄色电影片| 亚洲夂夂婷婷色拍ww47| www.精品久久| 欧美高清第一页| 一区二区三区四区高清视频| 中文字幕の友人北条麻妃| 国产成人亚洲综合a∨婷婷| 国产性xxxx| 日韩欧美的一区| 久久香蕉一区| 乱色588欧美| 日韩精品一卡二卡三卡四卡无卡| 国产精品20p| 777奇米成人网| 丝袜国产在线| 久久精品国产精品青草色艺| 久久九九国产| 91免费在线看片| 日韩一区二区三区观看| gogo久久| 欧美日韩精品不卡| 麻豆精品视频在线观看免费| 欧美日韩色视频| 精品福利在线导航| 欧美成人精品一区二区男人小说| 日韩av一区二区三区在线| 蜜臀久久99精品久久久画质超高清 | 青青青在线播放| 国产精品美女久久久久久久久| 国产精品无码白浆高潮| 九九热这里只有在线精品视| 日本女人性生活视频| 国产欧美中文在线| 夜夜嗨aⅴ一区二区三区| 精品国产一区二区三区在线观看| 久久伦理中文字幕| 色综合久久久久无码专区| 欧美高清在线视频| 精品国产999久久久免费| 97视频免费看| 精品视频黄色| 免费黄色a级片| 色婷婷久久综合| av在线免费播放| 久久精品女人的天堂av| 久久99精品视频| 久久久久久久伊人| 伊是香蕉大人久久| 97久久综合区小说区图片区| 成人三级视频在线播放| 亚洲欧美一区二区三区极速播放| 免费看黄色一级视频| 国产成人极品视频| 国产精品v亚洲精品v日韩精品| 实拍女处破www免费看| 日韩一二三四区| free欧美| 丁香六月激情婷婷| 国产精品久久久久久久久快鸭| 欧美视频在线观看一区二区三区| 国产一区红桃视频| 在线视频免费在线观看一区二区|