rn應(yīng)用中的卡頓

Native與JavaScript交互原理圖

Native與JavaScript交互原理圖

卡頓的場景

rn應(yīng)用界面的渲染是js驅(qū)動native完成的粘拾。js代碼運(yùn)行在javascript線程中城菊, react-native組件的生命周期硫眨、api調(diào)用、觸摸事件的處理等就是在這個線程上執(zhí)行的冯遂;在復(fù)雜應(yīng)用的root組件中拟枚,調(diào)用this.setState,觸發(fā)子組件重新渲染吼渡,而這個過程很耗資源容为,容易引發(fā)卡頓。

js->native

路由切換操作:添加一個新的路由寺酪,Javascript線程需要讀取這個場景所需要的所有組件坎背,然后通過適當(dāng)?shù)拿畎l(fā)送給本地端,創(chuàng)建視圖寄雀。這個過程會花費(fèi)多個幀得滤,引起卡頓

這是因?yàn)閠ransition是由Javascript控制的盒犹。由此組件會在componentDidMount中做額外的計(jì)算懂更,這可能會導(dǎo)航在transition卡頓的第二個原因.

native->js

響應(yīng)觸摸事件:界面發(fā)生的事件是native轉(zhuǎn)發(fā)到j(luò)s的。如果此時js正在執(zhí)行耗時任務(wù)急膀,那么就來不及響應(yīng)這個事件沮协。例如可能出現(xiàn)點(diǎn)擊TouchableOpacity包裹的View時,透明度發(fā)生了變化卓嫂,但js端的響應(yīng)事件卻相對滯后慷暂。

卡頓的規(guī)避措施

場景一

Slow navigator transitions Navigator動畫由Javascript線程控制,轉(zhuǎn)換過程的每一幀晨雳,Javascript thread需要將新的x位置發(fā)送給主線程行瑞。如果javascript 線程被凍結(jié)。它就不能做這些餐禁,那么這些幀就不會被更新蘑辑,動畫就變得斷斷續(xù)續(xù)。

一勞永逸的解決方案是將基于 Javascript的動畫轉(zhuǎn)變?yōu)榛趍ain thread的動畫 useNativeDriver 其他情況應(yīng)該使用InteractionManager坠宴,為新的scene選擇最少的內(nèi)容數(shù)量以及動畫過程洋魂。

在相同的時間里,Javascript線程上做了大量的工作,導(dǎo)致幀被刪除副砍;如果在動畫期間衔肢,有大量的延遲類的工作,則可以考慮LayoutAnimation豁翎。Animated api當(dāng)前計(jì)算每一幀都是基于Javascript線程角骤,而LayoutAnimation利用了核心動畫,不會受到JS線程和主線程丟幀的影響LayoutAnimtion僅適用于fire-and-forget動畫(“靜態(tài)”動畫) - 如果動畫需要被中斷心剥,則你需要使用Animated邦尊。

場景二

在一個sceen里,移動一個View(Scrolling, translating, rotating), UI線程掉幀优烧。常見于蝉揍,帶透明背景的文本,在一個圖片之上畦娄∮终矗或者它的alpha混合的情況∥蹩ǎ可以使用shouldRasterizeIOS和renderToHardwareTextureAndroid來改進(jìn)性能杖刷。但最好不要亂用它,否則你的內(nèi)存會被用完驳癌,在使用這個屬性時滑燃,最好監(jiān)控性能和內(nèi)存的使用。如果你不計(jì)劃移動一個View, 則把這些屬性關(guān)閉颓鲜。

場景三

改變一個圖片大小的動畫不瓶,UI線程掉幀。在iOS, 每一次你調(diào)整一個圖片組件的寬和高灾杰,它都是從原始圖片中re-croped and scaled蚊丐。這個過程非常昂貴,特別是對于大圖來說艳吠。代替的麦备, 我們可以使用transform: [{scale}]樣式屬性動畫的改變大小,比如輕觸一個圖片昭娩,然后變?yōu)槿痢?/p>

場景四

My TouchableX view isn’t very responsive凛篙。有時,如果我們在相同的幀里改變透明度和顏色栏渺,以響應(yīng)觸摸事情呛梆。我們可能在onPress返回之后看不到作何的響應(yīng)。如果onPress里有一個setState, 它引發(fā)大量的工作磕诊,并且有一些幀被刪除掉填物,這時就會出現(xiàn)這種情況纹腌。一種解決方案是,將作何的動畫包裝在requestAnimationFrame處理器中滞磺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末升薯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子击困,更是在濱河造成了極大的恐慌涎劈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阅茶,死亡現(xiàn)場離奇詭異蛛枚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脸哀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門蹦浦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人企蹭,你說我怎么就攤上這事白筹≈悄” “怎么了谅摄?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長系馆。 經(jīng)常有香客問我送漠,道長,這世上最難降的妖魔是什么由蘑? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任闽寡,我火速辦了婚禮,結(jié)果婚禮上尼酿,老公的妹妹穿的比我還像新娘爷狈。我一直安慰自己,他們只是感情好裳擎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布涎永。 她就那樣靜靜地躺著,像睡著了一般鹿响。 火紅的嫁衣襯著肌膚如雪羡微。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天惶我,我揣著相機(jī)與錄音妈倔,去河邊找鬼。 笑死绸贡,一個胖子當(dāng)著我的面吹牛盯蝴,可吹牛的內(nèi)容都是我干的毅哗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼结洼,長吁一口氣:“原來是場噩夢啊……” “哼黎做!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起松忍,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蒸殿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸣峭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏所,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年摊溶,在試婚紗的時候發(fā)現(xiàn)自己被綠了爬骤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡莫换,死狀恐怖霞玄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拉岁,我是刑警寧澤坷剧,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站喊暖,受9級特大地震影響惫企,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陵叽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一狞尔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巩掺,春花似錦偏序、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刊殉,卻和暖如春殉摔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背记焊。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工逸月, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遍膜。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓碗硬,卻偏偏與公主長得像瓤湘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恩尾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,747評論 25 707
  • 網(wǎng)絡(luò)基礎(chǔ) URL 不同的協(xié)議 http協(xié)議 http協(xié)議優(yōu)缺點(diǎn) GET和POST請求 NSURLConnectio...
    下頁天閱讀 238評論 0 0
  • 散步的時候弛说,不經(jīng)意提到了我的一位姐姐,過了年就27歲了翰意。母親聽見了大吃了一驚:“澳救恕?都27了啊冀偶,這個27聽到了可真...
    _南方閱讀 412評論 0 0
  • 2017年的余額只剩下35天的時候醒第,我失眠了。原來进鸠,讓人最痛苦的事稠曼,莫過于想太多,而做太少客年∠挤或因?yàn)閼卸瑁蛞驗(yàn)?..
    槿瓊閱讀 246評論 0 0
  • 電商的發(fā)展讓很多人對實(shí)體店的未來充滿疑慮抵赢,實(shí)體書店欺劳、服裝店唧取、超市……已經(jīng)沒落了嗎? NO.NO.NO划提,在國外枫弟,有這...
    食聯(lián)天下閱讀 427評論 0 1