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

我發現了Vue.js中的性能陷阱

開發 前端
當我們構建好應用并開始查詢域時,內存占用爆表了。它幾乎沒法正常運行,不管換什么機器都會卡住不動,即使在強大的基于Intel i7處理器的系統上程序也會崩潰。問題是出在Vue.js上嗎?是Netlify嗎?還是因為我們的取巧代碼?我必須找出答案。

我內心深處對游戲的熱愛,讓我一直渴望能自己制作一些電子游戲。幾個月前我開始將這種夢想變為現實,并第一次參加了全球游戲大賽(Global Game Jam)。我和我的團隊使用 Vue.js 構建了一個名為“ZeroDaysLeft”的游戲:

https://zerodaysleft.netlify.com/

其形式是 Web 端的單頁面應用程序。這款游戲的主題是環境保護,我們考慮到商業活動對地球環境的影響,希望就這個話題做一些有益的探討。使用 Vue.js 制作的游戲并不多。我的團隊遲到了一天,然后用猜拳的方式選擇了我們要用的框架;我們飛快地寫完了代碼,并在周末結束時做出了游戲的可運行版本。在本地測試時一切都很順利。自然,我們為自己第一次寫出來的游戲作品感到自豪,并希望與世界分享它。

[[320557]]

可是問題出現了——當我們構建好應用并開始查詢域時,內存占用爆表了。它幾乎沒法正常運行,不管換什么機器都會卡住不動,即使在強大的基于 Intel i7 處理器的系統上程序也會崩潰。游戲大賽的時間限制把我們拉回了現實,我們決定擱置生產性能問題,這樣起碼我們能做出一款能在自己的設備上運行的完整游戲。就像大部分的“已完成”項目一樣,第二天我們就把它拋在腦后了。

但我自己沒法釋懷。它一直困擾著我。問題是出在 Vue.js 上嗎?是 Netlify 嗎?還是因為我們的取巧代碼?我必須找出答案。

調查性能下降的原因

我首先使用 Lighthouse 進行了快速測試。所幸 Firefox 為此提供了一個瀏覽器插件:

https://addons.mozilla.org/en-US/firefox/addon/google-lighthouse/

下面就是我得到的結果。

Vue.js/web/開發

89%的數字挺不錯的。實際上,與許多流行的網站相比,這個表現相當出色。這個測試指出了一些潛在問題,例如速度指數和第一次有意義且有內容的繪制步驟等。從理論上講,解決這些問題會進一步提高分數,但不一定能解決應用面臨的嚴重性能問題。

我們的游戲中有一些圖像和音頻素材資源,但是兩者都不至于讓游戲卡死在那里。我們也可以對這些已經優化過的資源再過度優化一遍,但這可能根本就無濟于事。

這個測試無法讓我們真正找出可能導致這一性能問題的原因。于是我開始想:“該不會是 Vue 的問題吧?”這種想法會冒出來也沒什么理由,但要是不檢查一下就是蠢了。我檢查了已部署站點的控制臺,結果空白一片。但警告往往不會在生產中顯示。當我在本地進行相同操作時,一堆 Vue 警告讓我吃了一驚。

Vue.js/web/開發

像大多數開發人員一樣,我對控制臺警告沒那么在意,覺得它們只是警告,而不代表錯誤;所以我一般會把注意力集中在其他地方?;蛟S消除這些警告可以解決我的生產問題,我決定深入研究每個問題并修復它們。

所有這些警告均來自我創建的、用來顯示名為 Cards.vue 選項的組件,因此這個組件可能需要大量重寫。

我決定按順序解決這些控制臺警告。

  1. > [Vue warn]: Avoid using non-primitive value as key, use string/number value instead. 
  2.  found in  
  3.  ---> <Cards> at src/components/Cards.vue 

Vue.js 有很多指令,讓我們能更直觀地使用框架,比如說 v-for 就可以快速將數組渲染為列表。使用它時,我們需要一個 :key 才能有效地重渲染組件。但我們將一個對象用作了一個鍵,這是非原始值,因此導致了這個錯誤。我決定將 index.description 用作一個新鍵,因為它是一個字符串,并且在值發生更改時可以更好地重新渲染。

  1. > [Vue warn]: Duplicate keys detected: '[object Object]'. This may cause an update error. 
  2. found in 
  3. ---> <Cards> at src/components/Cards.vue 

將 :key 更改為一個字符串(index.description)來解決上一個錯誤,就能解決這個重復鍵的錯誤。我們只能將字符串類型寫入 DOM,因此當我們傳遞一個要渲染的對象時,該對象將轉換為等效的字符串(即 [object Object]);并且因為這以前是我們的鍵,所以每個對象都將轉換為 [object Object](除非對象有不同的值),進而會出現重復鍵警告。現在既然鍵不是對象,警告就會消失,效率也會提升。

  1. > [Vue warn]: You may have an infinite update loop in a component render function. 
  2. found in 
  3. ---> <Cards> at src/components/Cards.vue 

就一個非常模糊的警告來說,這個警告似乎是最重要的:無限循環意味著內存消耗。這條消息并沒有告訴我們可能出了什么問題,但它確實暗示了問題與組件中的 render 函數有關。也許是因為我們寫的代碼比較取巧,因此觸發了不間斷的更新,并占用了大量的計算能力,以至于使瀏覽器和設備崩潰。

這條警告至少告訴我們要檢查 Cards.vue,所以我的第一個想法是檢查組件中的反應屬性,因為這可能會導致錯誤。反應屬性在更改后會觸發重新渲染。

我們正在顯示 index.days 和 index.description 中的數據。但我們不會更改這些數據,我們從 cardInfo 數組獲得 index。

  1. > v-for="index in cardInfo.sort(() => Math.random() - 0.7).slice(0,4)" 

我們使用這段代碼對數組中的元素進行隨機排序,然后將前四個元素顯示為玩家選擇的選項。當用戶單擊一個選項時將調用 effects() 函數,它除了會計算一個動作如何影響游戲狀態外,還使用 cardInfo 上的拼接原型刪除前四個元素。

在 Vue 這種使用虛擬 DOM 的框架里,用上諸如 cardInfo 之類的反應屬性后,每當數據屬性的值更改時都會觸發重新渲染。在我們的應用里,我們會直接使用 sort() 原型來更改它,然后刪除元素來重新排序。所有這些都會觸發“無限”的重新渲染,從而引發警告。

我決定更改數據過濾的邏輯,并停止對反應屬性 cardInfo 的多次更改。我安裝了 lodash.shuffle 并定義了一個計算屬性 shuffledList(),它將創建一個名為 list 的 cardInfo 副本。我對其應用了隨機排序操作,并返回了一個“frozen”結果,然后拆分開來顯示四張卡片。我們使用了 Object.freeze(),它將使我們返回的對象不可變,從而完全停止了所有重新渲染操作。

至此,問題解決了。

掉進框架的坑

老實說,當我剛開始調查性能下降原因的時候,還覺得我肯定要優化很多資源才能解決問題。最后這個結果說明,在使用許多框架抽象時我們都必須非常小心——特別是在 Vue 中更是如此,只有在必要時才使用某條指令,而且用法一定不能出錯,因為它們絕對有自己的代價。

這還讓我開始思考自己做過的其他工作,其中應用程序可能會因為框架而出現不必要的性能問題。大多數現代的前端框架都有很多抽象,使我們能更輕松地為 Web 制作應用程序。但我們應該牢記一點,那就是使用這些東西可能會引發潛在的性能問題。

我經常使用 Vue.js,所以決定探索一些我以前用過的指令,以前我用這些指令的時候完全沒考慮過它們可能對應用程序帶來的性能影響。其中有三條非常流行的指令進入了我的視線。

1. v-if 和 v-show

這兩條指令都是用來有條件地渲染元素的,但是它們背后的工作機制卻大不相同,因此用法也大相徑庭。v-if 一開始不會渲染組件,而只在條件為真時才渲染組件。這意味著當你多次切換組件的可見性時,就會不斷重新渲染。如果你要多次更改組件的可見性,那就不要使用這個功能。這會影響你的性能。

v-show 是一個很好的替代品。不管你是否啟用 CSS 都會渲染你的組件,但是只會根據條件是 true 還是 false 來決定組件是否可見。這種方法確實有其缺點,因為它不會將非必要組件的渲染推遲到你需要它們在屏幕上實際出現的時候。如果你的初始渲染沒那么復雜,那么它就很合適。

2. v-for

這條指令通常用來從數組中渲染列表。它有一個特殊的語法,形式為 item in list,其中 list 是源數據數組,而 item 是要迭代的數組元素的別名。默認情況下,Vue 在源數據數組上添加 watchers,每當發生更改時它就會觸發重新渲染。這種持續的重新渲染可能會對應用程序性能產生不利影響。如果你只想可視化對象,那么 Object.freeze() 是一個很好的解決方案,可以大大提高性能。但是請務必記住,你將無法更新組件或編輯對象數據。

在這個研究過程中我還意識到,Lighthouse 可能檢查的是以更直接的方式影響用戶體驗的應用性能指標,所以接下來我的疑問就是如何跟蹤服務器上的應用程序性能。

我們是不是太依賴直覺,是不是在假設開發人員知道自己在做什么,假設他們遵循的是最佳實踐?不管怎樣,這次經歷讓我對單頁應用程序的性能產生了不同的看法。大家可以在 GitHub 上查看上述項目的存儲庫:

https://github.com/Maria218/GlobalGameJamThing

 

責任編輯:趙寧寧 來源: 前端之巔
相關推薦

2024-05-20 08:25:55

2024-06-03 11:43:55

2020-05-18 08:42:23

CSS背景圖像前端開發

2021-10-29 11:45:26

Python代碼Python 3.

2025-06-04 08:10:59

2021-07-10 07:40:27

Excel數據分析大數據

2025-05-19 10:04:48

2020-06-01 14:02:25

Vue.js框架模板

2022-04-26 06:43:12

文檔TCPLinux

2022-11-30 09:18:51

JavaMyBatisMQ

2024-11-08 14:18:38

2021-05-13 16:34:20

TCP客戶端

2021-04-22 07:47:47

JavaJDKMYSQL

2021-05-08 06:14:28

Vue.js片段開發

2024-04-28 12:47:03

數據業務

2021-04-26 05:41:32

百度網盤秒傳

2020-10-27 08:07:17

Vue.js

2021-04-15 08:15:27

Vue.js源碼方法

2021-03-04 20:31:55

采集服務器異步

2024-11-05 09:47:08

VGG網絡模型
點贊
收藏

51CTO技術棧公眾號

自拍亚洲图区| 青青艹在线观看| 国产精品115| 欧美日韩色婷婷| 欧美一级爱爱| 国产情侣在线播放| 激情欧美丁香| 亚洲无限av看| 中文字幕第六页| 性欧美gay| 亚洲女子a中天字幕| 国产一区二区三区高清视频| 国产精品视频123| 99久久婷婷国产综合精品电影√| 欧美大片拔萝卜| 成人在线观看a| 欧美aaaxxxx做受视频| 久久综合国产精品| 亚洲一区二区三区毛片| 欧产日产国产69| 欧美激情麻豆| 一区二区三区天堂av| 95视频在线观看| 欧美激情福利| 日本高清不卡视频| 日本福利视频一区| 蜜桃视频在线观看www社区| 99麻豆久久久国产精品免费 | 日本不卡在线播放| 亚洲精品一区二区三区蜜桃| 日韩av中文在线观看| 国产+成+人+亚洲欧洲| 美女视频久久久| 亚洲精品小区久久久久久| 日韩欧美在线网站| 蜜臀视频一区二区三区| 不卡专区在线| 亚洲一区二区综合| 久久久久久久久网| 午夜激情视频在线观看| 久久精品日产第一区二区三区高清版| 国产精品swag| 国产高清精品软件丝瓜软件| 久久99热99| 国产精品久久久一区| 可以免费在线观看的av| 在线成人h网| 久久久久久国产精品美女| 看片网站在线观看| 一本一道久久a久久精品蜜桃| 一区二区亚洲欧洲国产日韩| 欧美一区二区三区成人精品| 美国十次av导航亚洲入口| 精品88久久久久88久久久| 图片区乱熟图片区亚洲| 24小时成人在线视频| 欧美人与性动xxxx| 天堂在线中文在线| 久久在线观看| 欧美成人video| 美女扒开腿免费视频| 91综合久久爱com| 精品国产一区二区国模嫣然| 久久无码专区国产精品s| 日韩精品一区国产| 欧美大肚乱孕交hd孕妇| 在线黄色免费网站| 亚洲最大在线| 国产一区二区三区在线免费观看| 中文天堂资源在线| 91综合久久| 欧美精品做受xxx性少妇| 国产a免费视频| 18成人免费观看视频| 91精品国产色综合久久不卡98口| 久久久久亚洲av成人毛片韩| 丝袜美腿成人在线| 91精品久久久久| 亚洲精品无码久久久| 97se亚洲国产综合自在线不卡 | 一区二区三区四区不卡视频| 91黄色在线看| 国模套图日韩精品一区二区| 欧美日韩综合一区| 麻豆精品国产传媒| 亚洲精品亚洲人成在线观看| 中文亚洲视频在线| 免费中文字幕在线| 亚洲一区国产| 国产精品丝袜久久久久久不卡| 99久久99久久久精品棕色圆| 成人免费毛片嘿嘿连载视频| 任我爽在线视频精品一| 国产福利视频在线观看| 亚洲超丰满肉感bbw| 999精品网站| 精品一区二区三区视频在线播放| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品乱码久久久久久久久久久久| 婷婷综合亚洲| 午夜精品三级视频福利| 夜夜爽8888| 成人av在线电影| 亚洲美女搞黄| 538在线视频| 欧美喷水一区二区| 精品中文字幕在线播放| 婷婷伊人综合| 欧洲一区二区视频| www.av网站| 欧美国产丝袜视频| 精品无码一区二区三区在线| 日韩在线电影| 亚洲欧美精品伊人久久| 免费无码毛片一区二区app| 99精品福利视频| 亚洲精品欧美日韩专区| 免费a级毛片在线观看| 亚洲一区二区三区在线播放| 成人免费在线观看视频网站| 青娱乐国产精品视频| 国产网站在线免费观看| 91久久久免费一区二区| av黄色一级片| 综合激情一区| 成人黄色av网站| 国产视频福利在线| 午夜电影久久久| 女人扒开双腿让男人捅 | 欧美精品一区二区三区在线| 国产日韩精品中文字无码| 久久成人精品| 精品不卡一区二区三区| 中文在线免费| 777xxx欧美| 欧美人与禽zoz0善交| 欧美一级播放| 久久精品成人一区二区三区蜜臀| 日本伦理一区二区| 日韩欧美一卡二卡| 99久久99久久精品国产| 裸体在线国模精品偷拍| 日本电影一区二区三区| 麻豆理论在线观看| 日韩成人在线观看| 久久午夜免费视频| www.66久久| 国产免费黄色小视频| japanese色系久久精品| 欧美激情a∨在线视频播放| 国产绿帽刺激高潮对白| 日韩一区在线看| 九九热精品国产| 亚洲天堂一区二区三区四区| 91精品国产综合久久久久久蜜臀| 欧美a在线看| 欧美精品久久天天躁| 5566中文字幕| 国产精品18久久久久久vr| 青青草免费在线视频观看| 外国成人毛片| 色综合久综合久久综合久鬼88| 99久久精品国产成人一区二区| 亚洲美女免费在线| 国产精品成人在线| 九九热久久免费视频| 日韩国产高清影视| 亚洲v国产v在线观看| 久久亚洲资源中文字| 日韩在线观看免费全| 国产一区二区女内射| 亚洲欧美另类久久久精品2019| 国产精品探花在线播放| 欧美激情综合色综合啪啪| 亚洲综合中文字幕在线| 搞黄网站在线看| 日韩成人中文字幕在线观看| www.国产com| 日本一区二区久久| 亚洲第一天堂久久| 欧美高清不卡| 久久久久一区二区| 欧美美女福利视频| 欧美第一黄色网| 成人久久精品人妻一区二区三区| 欧美日韩国产精品一区二区不卡中文| 白丝女仆被免费网站| 蜜臀av国产精品久久久久| 天天做天天躁天天躁| 伊人春色精品| 97伦理在线四区| 卡通欧美亚洲| 欧美国产精品人人做人人爱| 欧美在线观看在线观看| 337p亚洲精品色噜噜| 97免费在线观看视频| 国产精品久久99| 性久久久久久久久久久| 久久精品国产99久久6| 国产女主播自拍| 日本道不卡免费一区| 国产精品xxxx| 亚洲精品国产精品国| 免费观看久久av| 国产精品视频男人的天堂| 黄污视频在线观看| 中文字幕免费国产精品| 日本毛片在线观看| 欧美久久久一区| 五月婷婷激情视频| 一区二区三区四区视频精品免费 | 中文字幕 日韩有码| 亚洲午夜电影网| 男人的午夜天堂| 91亚洲精品一区二区乱码| 精品国产鲁一鲁一区二区三区| 亚洲欧美日韩国产| 黑人巨茎大战欧美白妇| 欧美手机在线| 久久av一区二区| 亚洲精品在线播放| 成人xvideos免费视频| 一区二区电影免费观看| 亚洲欧美日韩精品久久| 黄色成人一级片| 91精品国产色综合久久不卡电影 | 日本不卡二区高清三区| 久久久久高潮毛片免费全部播放| 成人写真福利网| 午夜日韩成人影院| 81精品国产乱码久久久久久| 久久人妻无码aⅴ毛片a片app| 国产无遮挡裸体免费久久| 成人羞羞国产免费| 国产精品久久久久久久久久齐齐| 欧美亚州一区二区三区| 2001个疯子在线观看| 欧美激情中文字幕在线| а√资源新版在线天堂| xxx欧美精品| 91青青在线视频| 中文字幕久热精品在线视频| 国产精品秘入口| 亚洲天堂第二页| 极品美乳网红视频免费在线观看| 亚洲另类图片色| 全部免费毛片在线播放网站| 日韩电影免费在线观看中文字幕| 亚洲精品国产精| 精品久久久久久综合日本欧美 | 亚洲国产成人爱av在线播放| 性一交一乱一色一视频麻豆| 欧美一区二区三区的| www.com欧美| 精品久久一区二区| 五月婷在线视频| 亚洲精品午夜精品| 国产在线电影| 中文字幕亚洲在线| 在线激情网站| 久久天堂av综合合色| 怡红院在线观看| 久久久久久久久久久免费 | 国产成人+综合亚洲+天堂| 欧美亚洲韩国| 国产精品视频xxx| 性欧美video另类hd尤物| 91精品久久久久久久久中文字幕| 欧美一级网址| 91视频99| 夜夜春成人影院| 亚洲欧美国产一区二区| 影音先锋成人在线电影| 国产96在线 | 亚洲| 日韩电影在线看| 日韩a一级欧美一级| 成人免费观看视频| 一级黄色录像毛片| 亚洲色图在线视频| 免费在线不卡视频| 欧美视频一二三区| 亚洲福利在线观看视频| 亚洲精品视频免费| а√资源新版在线天堂| 欧美亚洲国产另类| 在线高清欧美| 精品国产一区二区三区四区vr| 欧美男gay| 国产成人亚洲综合无码| 免费在线亚洲欧美| 天天色天天综合网| 91麻豆国产福利精品| 日韩亚洲欧美中文字幕| 亚洲福利视频一区二区| 国产精品第6页| 精品国产乱码久久久久久久久 | 我的公把我弄高潮了视频| 久久成人精品| 一级黄色高清视频| 久久久激情视频| 欧美成人精品欧美一级| 色呦呦日韩精品| www.五月婷| 一本色道久久88精品综合| h片在线观看| 成人国产精品久久久| 亚洲三级精品| 日韩精品在线观看av| 蜜臀久久久久久久| 中文字幕丰满孑伦无码专区| 亚洲欧洲综合另类在线| 无码人妻丰满熟妇区五十路| 日韩一区二区三区在线观看| 成人免费高清在线播放| 97视频在线观看视频免费视频 | √8天堂资源地址中文在线| 国产精品免费一区豆花| 欧美人体视频| 成人在线观看www| 欧美gay视频| 午夜欧美2019年伦理| 亚洲无码久久久久| 亚洲一区二区久久久| 美女在线视频免费| 国产激情一区二区三区在线观看| 香蕉久久网站| 成人免费在线观看视频网站| 久久综合视频网| 99热在线观看免费精品| 欧美刺激脚交jootjob| 久久五月精品| 国产美女精品视频| 日韩免费久久| 亚洲 欧美 日韩系列| 久久精品男人天堂av| 国产又大又黄视频| 日韩精品免费一线在线观看| 2019中文字幕在线电影免费| 国产chinese精品一区二区| 一区二区蜜桃| 性生活在线视频| 亚洲欧美偷拍卡通变态| 国产精品久久欧美久久一区| 色偷偷888欧美精品久久久| 亚洲国产尤物| 亚洲精品日韩在线观看| 日本欧美一区二区| 日韩av片在线免费观看| 欧美日韩国产中文| eeuss影院www在线播放| 国产精品亚洲综合天堂夜夜| 日韩在线视屏| 五月天丁香花婷婷| 亚洲欧美日本在线| 亚洲精华国产精华精华液网站| 欧美高清自拍一区| 大伊香蕉精品在线品播放| 日韩精品 欧美| 久久噜噜亚洲综合| 中文字幕一区2区3区| 精品久久国产精品| 亚洲91网站| 国产黄视频在线| 久久久精品免费观看| 中文字幕在线2019| 久久影院免费观看| xvideos.蜜桃一区二区| 99爱视频在线| 欧美国产视频在线| 国产肥老妇视频| 97国产一区二区精品久久呦| 久久99国内| 三区视频在线观看| 亚洲高清免费在线| 国产有码在线| 92国产精品视频| 亚洲精品日本| 国产精品无码无卡无需播放器| 777精品伊人久久久久大香线蕉| 免费在线观看的电影网站| 久久久久资源| 精品无码三级在线观看视频| 久久久久久久久久综合| 亚洲欧美999| 99久久99九九99九九九| 91丨porny丨探花| 米奇精品关键词| 欧美精品一区在线播放| 激情av综合| 艹b视频在线观看| 亚洲国产视频直播| 成人高清免费在线播放| julia一区二区中文久久94| 六月丁香综合| 免费日韩在线视频| 中文字幕日韩欧美| 国产日韩三级| 99re6在线观看| 色综合久久中文综合久久97| 99福利在线|