關(guān)于requestAnimationFrame()

首先屡贺,MDN的定義是:

window.requestAnimationFrame() 告訴瀏覽器——你希望執(zhí)行一個(gè)動(dòng)畫(huà)侮腹,并且要求瀏覽器在下次重繪之前調(diào)用指定的回調(diào)函數(shù)更新動(dòng)畫(huà)缓苛。該方法需要傳入一個(gè)回調(diào)函數(shù)作為參數(shù)嘴纺,該回調(diào)函數(shù)會(huì)在瀏覽器下一次重繪之前執(zhí)行

注意:若你想在瀏覽器下次重繪之前繼續(xù)更新下一幀動(dòng)畫(huà)几睛,那么回調(diào)函數(shù)自身必須再次調(diào)用window.requestAnimationFrame()

結(jié)論:

當(dāng)你準(zhǔn)備更新動(dòng)畫(huà)時(shí)你應(yīng)該調(diào)用此方法房轿。這將使瀏覽器在下一次重繪之前調(diào)用你傳入給該方法的動(dòng)畫(huà)函數(shù)(即你的回調(diào)函數(shù))∷回調(diào)函數(shù)執(zhí)行次數(shù)通常是每秒60次囱持,但在大多數(shù)遵循W3C建議的瀏覽器中,回調(diào)函數(shù)執(zhí)行次數(shù)通常與瀏覽器屏幕刷新次數(shù)相匹配必峰。為了提高性能和電池壽命洪唐,因此在大多數(shù)瀏覽器里,當(dāng)requestAnimationFrame() 運(yùn)行在后臺(tái)標(biāo)簽頁(yè)或者隱藏的<iframe> 里時(shí)吼蚁,requestAnimationFrame() 會(huì)被暫停調(diào)用以提升性能和電池壽命凭需。

關(guān)于其他:

瀏覽器渲染
  • 在地址欄中輸入U(xiǎn)RL后,當(dāng)前的瀏覽器進(jìn)程中的UI線程會(huì)啟動(dòng)一個(gè)網(wǎng)絡(luò)請(qǐng)求線程
  • 網(wǎng)絡(luò)請(qǐng)求線程請(qǐng)求到的數(shù)據(jù)會(huì)經(jīng)過(guò)安全驗(yàn)證肝匆,確認(rèn)安全后粒蜈,UI線程會(huì)開(kāi)啟一個(gè)渲染器進(jìn)程
  • 渲染器進(jìn)程中的主線程負(fù)責(zé)html解析和js的執(zhí)行。
  • 具體的解析過(guò)程就不贅述了旗国,解析出來(lái)Layout Tree后枯怖,為了顯示到屏幕上會(huì)進(jìn)行柵格化。這會(huì)在新開(kāi)辟的合成器線程中執(zhí)行
  • 合成器線程返回的合成器幀會(huì)被回傳給瀏覽器進(jìn)程能曾,最后顯示到屏幕上度硝。

以上是大致流程,有很多細(xì)節(jié)沒(méi)講清楚寿冕,比如合成器線程如何柵格化蕊程、html如何被解析,這些有機(jī)會(huì)放到以后解釋

那么requestAnimationFrame()發(fā)生在哪個(gè)階段驼唱?答案是渲染器進(jìn)程的主線程中藻茂,因?yàn)樵谠撝骶€程中不只會(huì)解析html還會(huì)執(zhí)行js

動(dòng)畫(huà)卡頓原因

以60幀動(dòng)畫(huà)為例
每一幀約為16ms,在一幀中,當(dāng)解析渲染html的用時(shí)小于16ms時(shí)辨赐,一幀中主線程會(huì)有空余時(shí)間优俘,這時(shí),js會(huì)被推入主線程執(zhí)行掀序。問(wèn)題在于js如果執(zhí)行時(shí)間太長(zhǎng)帆焕,比如20ms,會(huì)導(dǎo)致js不僅占滿(mǎn)了當(dāng)前幀的空余時(shí)間森枪,甚至把下一幀原本用來(lái)渲染的時(shí)間也占用了视搏,這會(huì)造成渲染的阻塞,顯示到頁(yè)面上县袱,就是動(dòng)畫(huà)可能會(huì)出現(xiàn)卡頓浑娜,掉幀

requestAnimationFrame()功效

往該函數(shù)中傳入1個(gè)回調(diào)函數(shù),把原先的js代碼塞到回調(diào)函數(shù)中式散,他會(huì)告訴瀏覽器筋遭,我有代碼必須在下一幀來(lái)臨前就執(zhí)行,這些代碼會(huì)在下一次渲染前執(zhí)行完畢暴拄。通常漓滔,我們這個(gè)回調(diào)函數(shù)里面做一些動(dòng)畫(huà)的更新,那么它可以保證下一次渲染前乖篷,dom已經(jīng)通過(guò)代碼更新了响驴,可以被渲染,這也就防止了頁(yè)面的阻塞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撕蔼,一起剝皮案震驚了整個(gè)濱河市豁鲤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲸沮,老刑警劉巖琳骡,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異讼溺,居然都是意外死亡楣号,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)怒坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炫狱,“玉大人,你說(shuō)我怎么就攤上這事剔猿”霞觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵艳馒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弄慰,這世上最難降的妖魔是什么第美? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮陆爽,結(jié)果婚禮上什往,老公的妹妹穿的比我還像新娘。我一直安慰自己慌闭,他們只是感情好别威,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著驴剔,像睡著了一般省古。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丧失,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天豺妓,我揣著相機(jī)與錄音,去河邊找鬼布讹。 笑死琳拭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的描验。 我是一名探鬼主播白嘁,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膘流!你這毒婦竟也來(lái)了絮缅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤睡扬,失蹤者是張志新(化名)和其女友劉穎盟蚣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卖怜,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屎开,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了马靠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奄抽。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甩鳄,靈堂內(nèi)的尸體忽然破棺而出逞度,到底是詐尸還是另有隱情,我是刑警寧澤妙啃,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布档泽,位于F島的核電站俊戳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馆匿。R本人自食惡果不足惜抑胎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渐北。 院中可真熱鬧阿逃,春花似錦、人聲如沸赃蛛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呕臂。三九已至破托,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诵闭,已是汗流浹背炼团。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疏尿,地道東北人瘟芝。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像褥琐,于是被迫代替她去往敵國(guó)和親锌俱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344