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

關于 VS Code 優化啟動性能的實踐

新聞
本文主要是對CovalenceConf 2019: Visual Studio Code – The First Second 這次分享的介紹,CovalenceConf 是一個以 Electron 構建桌面軟件為主題的技術會議,這也是 VS Code 團隊為數不多的對外分享之一。

[[421135]]

本文主要是對   CovalenceConf 2019: Visual Studio Code – The First Second  這次分享的介紹,CovalenceConf 是一個以 Electron 構建桌面軟件為主題的技術會議,這也是 VS Code 團隊為數不多的對外分享之一(質量較高),主要分享了 VS Code 是如何優化啟動性能的。

TL ; DR

▐     開頭的一些內容

  1. VS Code 的指導原則之一是盡可能快的讓用戶可以進入編輯狀態

  2. 啟動速度優化并不復雜,但它是許許多多小改進的總和,沒有銀彈

  3. Monaco Editor  最早是 2011 年底開始的一個實驗項目,目的是構建一款在瀏覽器中運行的開發人員工具

▐     關于啟動性能優化

  • 性能優化基本的法則

  1. 測量,測量,還是測量,并基于此建立一個基準線 (VS Code 使用 Performance API,并對整個啟動過程中的關鍵節點打點)

  2. 建立監控,針對每個版本的性能變化快速做出優化措施

  3. 用一臺7年前(現在來說是9年前)的 ThinkPad 做測試,確保它能在1.8秒內啟動 VS Code

  4. 不要過多的專注于 Electron、V8 這些底層依賴,因為有一群聰明的人在不斷的優化它們,專注于加載代碼以及運行程序。

  • 確保代碼盡可能快的加載

  1. 使用 Rollup、Webpack 等構建工具將代碼打包成單文件,這可以節省約 400ms

  2. 壓縮代碼,可以節省約 100ms

  3. 使用 V8 Cached Data 將一些模塊代碼編譯成字節碼文件(一種中間態),這可以節省約 400ms, VS Code 自己使用 AMD Loader 實現了這個緩存,也可以直接用  v8-compile-cache  這個包。

  • 生命周期階段(Lifecycle Phases),分先后順序來做應該做的事?不要一股腦全部執行

  1. 梳理清楚所有關于啟動階段事情的優先級

  2. 保證資源管理器和編輯器初始化,然后再做其他不是非常重要的事

  • requestIdleCallback, 將不那么重要的工作放在瀏覽器空閑時間執行

  1. 參考  Idle Until Urgent  這篇文章

  • 通過一些小技巧使得界面「體感上」較快

  1. 切換編輯器時,使用 MouseDown 來替代 MouseUp / Click 事件,先確保 Tab 很快的切換

  2. 打開耗時較大的文件時,首先將面包屑、狀態欄等其他 UI 部分渲染出來,使得用戶感覺 UI 反應很快

  • 重復以上步驟

沒有銀彈

VS Code 是少有的核心功能完全使用 Web 技術構建的桌面編輯器,在這之前是 Atom,但師出同門(Electron) 的 Atom 最為人詬病的就是其性能問題。VS Code 自誕生那天起,保證 性能優先 就是最重要的一條準則,誠然相比老牌的 Sublime Text,VS Code 性能表現并不能稱得上優秀,但相比之下已經完全是可以接受的水平了。

社區也有很多開源編輯器采用了前后端分離技術,也就是使用 Web 技術構建編輯器 UI 部分,而核心的 TextBuffer 都使用 Native 實現,這類編輯器甚至可以替換 UI 層的技術實現,例如使用我們常見的 Electron,又或是 QT 等桌面端技術,因為編輯器涉及面太廣,這里暫時不再贅述。

最開始我是抱著來找黑魔法的想法來看這次分享的,然而當我結合代碼看了三遍分享后滿屏都是四個字: 沒有銀彈。

總結下來就 是幾個點 * 按照優先級劃分啟動順序,永遠確保文件樹和編輯器最快渲染出來,并且光標第一時間在編輯器內跳動(這意味著用戶可以開始編輯文件了) * 測量監控性能數據,每個版本都收集盡可能多的數據來直觀的表現性能 * 對于出現的性能瓶頸快速做出改進。

性能優化是一個長期的過程,并不是某個時間段集中精力優化一波就高枕無憂了,你可以在 VS Code 的 issue 列表里找到一系列標簽為 perf 和 startup-perf 相關的 issue,并且這些 issue 都有人長期跟蹤解決的。

從哪開始?

在這之前我們需要明確幾個首屏啟動性能相關的概念,這里列舉的并不是全部,有興趣的可以自行在  Web.Dev  查找其他指標。

| 縮寫 | 英文全稱 | 說明 | | -- | ----- | ------ | | FCP |  First Contentful Paint | 瀏覽器渲染DOM內容的第一個字節 | | LCP |  Largest Contentful Paint  | 可是區內最大塊的文本或圖像渲染時間 | | FID |  First Input Delay  | 用戶實現交互操作的相應時間,例如點擊事件有反應 | | FCI |  First CPU Idle | 首次CPU空閑時間 | | TTI |  Time to Interactive  | 頁面開始加載到穩定可交互的時間,所有按鈕點擊都有反應 |

我們不一定關注以上所有的指標,但有幾個對用戶體感差異較為明顯的指標可以重點關注一下,例如 LCP 、 FID 以及 TTI。

還有另一項指標 FMP (First Meaningful Paint 首次有效渲染時間) 不是很推薦,因為它無法直觀的識別頁面的主體內容是否加載完成,例如某些網站會在有意義的內容渲染前展示一個全屏的 Loading 動畫,這對用戶來講顯然是沒有任何意義的,而相比之下 LCP 更為純粹,它只看頁面主體內容、圖像是否加載完成。

這與 VS Code 的原則不謀而合,對于文本編輯器來說,性能好壞最直接的問題就是從點開圖標到我可以輸入文本需要多久?VS Code 的答案是 1 秒 (熱啟動在 500 毫秒左右)。

所以第一步永遠是測量,不管是 console.time 還是新的 Performance API,在關鍵的節點添加這些性能標記,通過大量的數據收集可以得到一個真實的性能指標。VS Code 選擇了 Performance API ,這樣更方便匯總上報數據。運行 Startup Performance 命令可以看到這些性能指標的耗時 (總耗時2s+, 實際上 TTI 是 977ms)。

數據收集除了能看到當前真實的性能指標,更能幫助我們發現耗時花在了哪些地方。要做到這一點,需要找到這些關鍵節點。VS Code 是基于 Electron ,除了常規的頁面渲染之外,還有一包括等待 Electron App Ready、創建窗口、LoadURL 等耗時,這部分的性能有專業的團隊來保障(Electron、V8),不需要關心太多。所以重點需要關心的是 UI 部分的呈現及可交互時間。

盡可能快地加載并執行 JavaScript

回到我們擅長的前端領域,當我們談到性能優化時,總是逃不開幾條金科玉律:

  1. 減小包體積,包括對 HTML、CSS、JavaScript 代碼的壓縮等

  2. 減小 HTTP 請求,使用服務端 gzip 壓縮

  3. 使用 Webpack、Rollup 等現代構建工具來抽離公共代碼,Code Splitting 代碼拆分等

所有這些優化的目的,都是為了盡可能快的加載并執行 JavaScript 代碼。在 SPA 大行其道的今天,JavaScript 加載越慢,就意味著用戶看到的白屏時間更久(于是又催生出了 SSR 這種方案)。

▐     V8 Code Cache

V8 Code Cache  的目的是減少對 JavaScript 代碼的解析與編譯開銷,我們知道 V8 使用 JIT (Just in time compilation) 來執行 JavaScript 代碼,也就是說在 JS 腳本執行之前,必須對其進行解析和編譯,這一步的開銷是較大的。而 Code Cache 技術是在首次編譯時將結果緩存下來,下一次加載相同的腳本時直接讀取磁盤上的緩存來執行,省去了解析、編譯的過程,從而使腳本執行更快。V8 提供了開放的 API,因此,任何使用 V8 的軟件都可以調用該 API,同時 Node.js 5.7.0 版本起 vm 模塊也提供了對該 API 的 包裝 。由于 VS Code 使用  AMD Loader  作為模塊加載器,所以內置實現了  V8 Code Cache 。

不過對于大多數應用來說,沒必要自己實現一遍緩存邏輯,直接使用  v8-compile-cache  ,在入口處引入 v8-compile-cache 即可。

  1. import 'v8-compile-cache'

經過一系列的優化,VS Code 的 JS Bundle 加載速度從一開始的接近 1.5 秒優化到了 0.5 秒。

生命周期,更聰明的排序

編輯器的啟動包含許多邏輯,例如快捷鍵、編輯器、文件瀏覽器、調試器等功能的初始化與事件綁定等等,每個看起來都是非常重要的核心功能,而當軟件體積不斷增大時,這些邏輯可能會像高速公路上的車輛一樣,如果毫無秩序,每一輛車都想以最快的速度通過,反而會導致所有車輛停滯不前,造成擁堵。

拆分生命周期的一個重要目的就是將這些核心功能的優先級進行排序,黃金原則就是盡可能快的讓用戶最關心的界面先渲染出來。對于 VS Code 來說,就是文件資源管理器和編輯器。VS Code 的核心功能都是通過 Contribution 來注冊的。在早期的版本中,這些貢獻點會在啟動時就全部一起進行注冊,這直接導致編輯器的加載被阻塞,最直觀的表現就是界面所有 UI 都已經渲染出來并且可操作時,編輯器內的文本還沒有加載出來(它們可能很大)。 

拆分生命周期階段本質上就是將這些貢獻點分階段來實例化,具體來說,VS Code 將整個啟動的生命周期分為了四個階段

  1. Starting 應用開始啟動階段,非常底層的依賴需要在該階段實例化

  2. Ready 核心服務已經實例化完成

  3. Restored 編輯器、UI 狀態已經恢復完成(前一次關閉時緩存的狀態)

  4. Eventually 準備就緒,意味著編輯器完全可用

生命周期執行的核心代碼 ```typescript // src/vs/workbench/common/contributions.ts

start(accessor: ServicesAccessor): void { const instantiationService = this.instantiationService = accessor.get(IInstantiationService); const lifecycleService = this.lifecycleService = accessor.get(ILifecycleService);

[LifecyclePhase.Starting, LifecyclePhase.Ready, LifecyclePhase.Restored, LifecyclePhase.Eventually].forEach(phase => { this.instantiateByPhase(instantiationService, lifecycleService, phase); }); }

instantiateByPhase(instantiationService: IInstantiationService, lifecycleService: ILifecycleService, phase: LifecyclePhase): void { // 當達到對應的階段時直接實例化貢獻點 if (lifecycleService.phase >= phase) { this.doInstantiateByPhase(instantiationService, phase); }

// 未達到對應階段時一直等待 else { lifecycleService.when(phase).then(() => this.doInstantiateByPhase(instantiationService, phase)); } } ``` 

正如分享的作者 Johannes Rieken 所說,這并不是非常復雜的技術問題,而是以一種更聰明的方式來對啟動過程重新排序。這樣一來,整體的啟動過程會更加的有序,對于一些不是那么重要的任務,將它們的優先級靠后一些,從而確保能在第一時間將編輯器呈現出來,使用戶進入可以編輯的狀態。

IdleCallback

  1. // busy busy busy busy 
  2. // busy busy busy busy 
  3. // busy busy busy busy 
  4. requestIdleCallback((dealline) => { 
  5.   // idle idle idle idle 
  6.   // idle idle idle idle 
  7.   // idle idle idle idle 
  8. }) 
  9. // busy busy busy busy 
  10. // busy busy busy busy 
  11. // busy busy busy busy 

requestIdleCallback 是一個瀏覽器提供的 API,用于在 CPU 空閑時間執行一些任務。相比 setTimeout,requestIdleCallback 的執行時機由瀏覽器來控制,因為瀏覽器知道何時才是空閑時間。利用 requestIdleCallback,可以將一些必要但不緊急的工作延后處理,例如常見的一些埋點上報邏輯,可能會在觸發某些高頻率的交互操作時執行,而如果將這些邏輯與事件處理放在一起,很容易影響操作體驗。

requestIdl eCallback 可以傳入第二個參數,表示超時時間。表示最晚多久以后來執行回調函數。typescript requestIdleCallback(processPendingAnalyticsEvents, { timeout: 2000 }); `

一般來說應該將執行時機交還給瀏覽器,讓瀏覽器自行決定何時調用回調,如果設置了超時時間,則可能因為執行順序被打亂。

Perceived Performance ,讓體感更快的小技巧

對于一些耗時的確會很長的操作,例如打開一個巨大的文件,顯然即便是性能最好的的優化手段,也無法將這種耗時降到毫秒級。但我們可以通過一些小的手段讓這種交互 感覺更快。例如在這個 Case 中,點擊打開一個大文件(2.5m)時,先將編輯器 Tab 以及面包屑渲染出來。

除此之外,對于切換編輯器 Tab 時,使用 MouseDown 而非 MouseUp 事件,一次點擊事件從觸發 MouseDown 到 MouseUp 中間的耗時平均是50ms,這意味著在切換編輯器時,鼠標點擊至少 50ms 后包括 Tab 以及面包屑才會有反應。我們可以寫一個很簡單的 Demo 來觀察這兩者的區別。

例如這張截圖中,點擊 package.json 時,文件內容還是另一個文件,而面包屑已經變成了 package.json。使用這種小技巧,在 VS Code 中切換編輯器時,會令用戶覺得「反應好快」, 

不建議在所有點擊事件觸發的地方都使用 MouseDown 來代替 MouseUp,因為復雜的 UI 可能還需要處理如拖動等事件,這會讓事件處理更加復雜。

最后

這篇分享的內容沒有太多看起來非常硬核的技術手段,更多的是對當前性能瓶頸的測量,以及更聰明的「重新排列組合」,或者說采用了一系列使體驗更好的策略,這對用戶體驗的提升是巨大的。 

 

責任編輯:張燕妮 來源: 淘系技術
相關推薦

2022-03-29 13:27:22

Android優化APP

2020-03-23 15:15:57

MySQL性能優化數據庫

2020-07-17 19:55:50

Vue前端性能優化

2010-07-06 09:07:09

2017-01-23 21:05:00

AndroidApp啟動優化

2025-06-19 09:53:30

Spring性能優化服務器

2019-12-13 10:25:08

Android性能優化啟動優化

2021-09-24 14:02:53

性能優化實踐

2019-08-02 11:28:45

HadoopYARN調度系統

2022-10-28 13:41:51

字節SDK監控

2019-05-21 09:40:47

Elasticsear高性能 API

2018-06-12 15:30:07

數據庫MySQLinsert

2011-08-11 09:45:25

2023-09-25 10:02:00

GitVS Code

2016-11-17 09:00:46

HBase優化策略

2012-12-24 09:55:15

JavaJava WebJava優化

2022-07-15 09:20:17

性能優化方案

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2021-02-05 05:28:31

恢復性能優化

2021-06-10 10:02:19

優化緩存性能
點贊
收藏

51CTO技術棧公眾號

日本一二三区不卡| 99精品视频国产| 9色在线视频网站| 毛片av中文字幕一区二区| 久久精品99久久久香蕉| 午夜性福利视频| 水蜜桃在线视频| 国产精品久久午夜夜伦鲁鲁| 亚洲美女黄网| 日韩欧美在线1卡| 成人免费性视频| 免费在线看v| 理论片日本一区| 国内精品久久久久| 欧美老女人性生活视频| y111111国产精品久久久| 91国产免费观看| 奇米777四色影视在线看| 亚洲av片一区二区三区| 美腿丝袜亚洲三区| 91国内在线视频| 久久精品亚洲a| 亚洲精华一区二区三区| 欧美一区二区性放荡片| 日本不卡在线观看视频| 操你啦视频在线| 久久久久久99久久久精品网站| 91精品国产综合久久久久久久久| 日韩欧美三级视频| 亚洲va在线| 亚洲人免费视频| 中文字幕人妻一区二区三区 | 欧美剧在线观看| 熟女俱乐部一区二区视频在线| 日本免费一区二区三区视频| 在线国产亚洲欧美| 日韩中文字幕在线视频观看| 最新超碰在线| 国产精品久久久久永久免费观看 | 亚洲国产中文字幕| 国产av不卡一区二区| 国产中文在线观看| 26uuu国产在线精品一区二区| 亚洲精品女av网站| 亚洲一区二区色| 日韩福利电影在线| 国产精品国语对白| 国语对白永久免费| 国产欧美日韩亚洲一区二区三区| 欧美黄色片在线观看| 午夜国产福利一区二区| 97久久视频| 最好看的2019的中文字幕视频| 国产成人精品免费视频大全最热| 一级片在线免费观看视频| 日韩 欧美一区二区三区| 欧美一区二区三区……| 好吊操这里只有精品| 好吊视频一区二区三区四区| 欧美床上激情在线观看| 国产三级国产精品国产国在线观看| 日本久久精品| 最新91在线视频| 国产精品久久久免费看| 99久久99久久精品国产片果冰| www.欧美精品| 午夜爱爱毛片xxxx视频免费看| 亚洲精品成人影院| 色综合91久久精品中文字幕| 久久国产一级片| 激情综合在线| 欧美一级大片在线免费观看| 国产又黄又猛又粗又爽| 日韩国产欧美在线观看| 国产美女直播视频一区| 91在线精品入口| 国产精品一区免费视频| 国产欧美韩日| 国模精品一区二区| 中文字幕中文字幕一区二区| 国产树林野战在线播放| 福利在线导航136| 黑丝美女久久久| 亚洲欧美视频二区| 国产aa精品| 亚洲黄页视频免费观看| 无码人妻精品一区二区中文| 久久精品99久久无色码中文字幕| 久久夜色精品亚洲噜噜国产mv| 久久久久久久极品内射| 国产精品亚洲产品| 成人激情视频在线| 日本免费网站在线观看| 国产亚洲一区字幕| 欧美三级午夜理伦三级老人| 91九色porn在线资源| 日本韩国欧美三级| 国产精品嫩草影视| 日韩aaa久久蜜桃av| 视频在线观看一区二区| 欧美国产日韩综合| 日韩电影一二三区| 91传媒视频在线观看| 欧美精品少妇| 亚洲黄色尤物视频| 一级在线免费视频| 国产精品nxnn| 日韩综合中文字幕| 天天综合网久久综合网| 狠狠网亚洲精品| 免费av在线一区二区| 二区三区四区高清视频在线观看| 欧美色视频日本高清在线观看| 国产探花在线看| 涩涩视频网站在线观看| 欧美三级韩国三级日本三斤| 波多野结衣办公室双飞| 首页国产精品| 欧美在线视频免费| 成人毛片在线精品国产| 国产精品久久久久久户外露出 | 免费日韩av片| 91夜夜未满十八勿入爽爽影院| 九色视频网站在线观看| 亚洲大片精品永久免费| 最新av免费在线观看| 国内黄色精品| 欧美在线视频在线播放完整版免费观看 | 国内久久视频| 成人av色在线观看| 国产对白叫床清晰在线播放| 亚洲成a人片在线不卡一二三区| 天天操狠狠操夜夜操| 国产免费久久| 啪一啪鲁一鲁2019在线视频| 欧美一区二区三区激情| 亚洲视频一区二区在线观看| 天堂av在线网站| 一区二区导航| 啪一啪鲁一鲁2019在线视频| 天天干天天舔天天射| 一区二区三区91| 亚洲一级片免费观看| 66视频精品| 91免费版网站入口| 麻豆视频在线免费观看| 欧美日韩精品高清| 黄大色黄女片18免费| 巨乳诱惑日韩免费av| 欧美日韩一区在线观看视频| 亚洲伊人av| 亚洲人线精品午夜| 波多野结衣电车痴汉| 久久蜜桃av一区精品变态类天堂| 成年人观看网站| 你微笑时很美电视剧整集高清不卡 | 国产精品一区二区三区在线| 69成人在线| 精品裸体舞一区二区三区| 激情五月少妇a| 国产福利91精品| 国产精品一色哟哟| 欧美一区二区三区久久| 日韩av免费看| 91亚洲欧美| 91精品国产综合久久久久| www.毛片com| 丰满亚洲少妇av| 激情深爱综合网| 精品一区在线| 国产精品丝袜白浆摸在线| 尤物网在线观看| 91精品国产麻豆| 国产精品6666| 久久欧美中文字幕| 久久久久久蜜桃一区二区| 日韩在线观看| 99国产视频| 天堂√中文最新版在线| 一本色道久久88综合亚洲精品ⅰ | 1024手机在线视频| 成人av免费在线| 亚洲人成色77777| 久久综合av| 国产精品加勒比| 日韩伦理三区| 久久久国产精品x99av| 超碰福利在线观看| 色综合久久中文综合久久牛| 四虎影视一区二区| av亚洲精华国产精华精华| 日本三区在线观看| 欧美ab在线视频| 麻豆精品视频| 精品国产一级| 国产成人啪精品视频免费网| 色综合久久久久综合一本到桃花网| 精品久久久久一区| 青青艹在线观看| 亚洲自拍与偷拍| www..com.cn蕾丝视频在线观看免费版 | 亚洲av无码国产精品久久不卡| 欧美性xxxx极品hd欧美风情| 亚洲综合视频网站| 国产午夜亚洲精品羞羞网站| 色哟哟网站在线观看| 视频一区欧美精品| 男人c女人视频| 日韩精品电影| 精品国产乱码久久久久久郑州公司| 欧美激情啪啪| 青青草一区二区| 男女视频在线| 精品国模在线视频| 九色在线免费| 亚洲精品99999| jizz中国少妇| 欧美日韩一二三| 性色av免费观看| 亚洲超碰精品一区二区| 手机在线免费看片| 国产精品每日更新在线播放网址| av在线播放网址| 国产成人免费视| 91丝袜超薄交口足| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久97超碰色| 国产精品欧美激情在线观看| 亚洲福利专区| 国产在线视频在线| 91精品国产91久久综合| 午夜精品一区二区三区四区| 色婷婷综合久久久久久| 春色成人在线视频| 欧美片网站免费| 成人疯狂猛交xxx| 久久麻豆视频| 国产女同一区二区| 成人性片免费| 国产精品视频内| www.26天天久久天堂| 国产91精品网站| 韩国成人漫画| 青青草精品毛片| 美脚恋feet久草欧美| 欧美综合在线观看| 亚洲综合电影| 国产精欧美一区二区三区| 另类专区亚洲| 国产精品极品尤物在线观看 | 91亚色免费| 一级毛片精品毛片| 国产精品xxx在线观看www| aaa国产精品视频| 国产专区一区二区三区| 日韩激情网站| 热re99久久精品国99热蜜月| 久久不见久久见中文字幕免费| 欧美日韩高清在线一区| 久草在线成人| 亚洲日本精品一区| 久久福利综合| 国产一级不卡视频| 激情欧美国产欧美| 动漫av网站免费观看| 日本色综合中文字幕| wwwwwxxxx日本| 国产精品一区久久久久| 国产污在线观看| 久久在线观看免费| 中文字幕黄色网址| 日韩理论片中文av| 国产性猛交普通话对白| 精品久久久久久国产| 999视频在线| 91精品国产色综合久久不卡电影| www久久久com| 亚洲精品在线看| 中文字幕日本在线| 久久99精品视频一区97| 美女露胸视频在线观看| 国产精品高清网站| 久久久久毛片免费观看| 精品视频第一区| 色777狠狠狠综合伊人| 久久久久久久香蕉| 久久久久国产一区二区| 亚洲自拍第三页| 久久女同性恋中文字幕| 特一级黄色录像| 色综合天天综合狠狠| 99在线精品视频免费观看软件 | 伊人激情综合| 国产综合免费视频| 国产在线麻豆精品观看| 国产乱了高清露脸对白| 国产精品久久综合| 亚洲 欧美 视频| 日韩一区二区中文字幕| 猫咪在线永久网站| 色综合天天狠天天透天天伊人 | 亚洲国产一区二区三区a毛片| 日韩精品你懂的| 99视频有精品| 日韩欧美综合视频| 在线观看中文字幕不卡| 国产小视频免费观看| 中文字幕亚洲一区二区三区| 国产盗摄一区二区| 国产精品啪视频| 日韩欧美黄色| www.射射射| 国产伦精品一区二区三区视频青涩| 欧美狂猛xxxxx乱大交3| 亚洲va欧美va天堂v国产综合| 97人人爽人人爽人人爽| 91福利精品视频| 六月婷婷中文字幕| 久久成年人视频| 欧美成人免费全部网站| 日韩.欧美.亚洲| 香蕉久久久久久久av网站| av天堂一区二区| 伊人色综合久久天天| 国产美女www爽爽爽视频| 一区二区欧美日韩视频| 国偷自产一区二区免费视频 | 国产乱女淫av麻豆国产| 久久久久久电影| 国产精品视频一区在线观看| 日韩大片免费观看视频播放| 国产探花视频在线观看| 91亚洲人电影| 自拍日韩欧美| av在线网站免费观看| 亚洲精选视频在线| av 一区二区三区| 久久99精品久久久久久噜噜| 亚洲一区二区三区免费| 老司机午夜免费福利视频| 国内外成人在线视频| 国产午夜精品理论片| 欧美久久一二区| 米奇精品一区二区三区| 成人黄色av播放免费| 五月激情久久久| 国内av免费观看| 亚洲成人午夜电影| 手机在线观看毛片| 欧美一级大胆视频| 精品一区不卡| 污污动漫在线观看| 亚洲国产精品黑人久久久| 午夜久久久久久久久久影院| 亚洲精品中文字幕av| 我爱我色成人网| 欧美亚洲免费在线| 免费亚洲电影在线| 熟女少妇内射日韩亚洲| 欧美精品欧美精品系列| 五月香视频在线观看| 日本欧美爱爱爱| 欧美日韩国产一区二区三区不卡 | 日韩av在线播放中文字幕| 91精彩刺激对白露脸偷拍| 在线观看一区二区视频| 国产51人人成人人人人爽色哟哟| 精品中文字幕在线| 国产日韩综合一区二区性色av| 久久亚洲国产| 精品国产一二区| 亚洲高清免费观看高清完整版在线观看 | 熟女人妻在线视频| 91高清视频免费看| 95在线视频| 亚洲一区二区三区视频播放| 在线日韩欧美| 国产精品无码一区二区三区免费| 在线免费观看日本欧美| 9色在线视频| 国产精品乱码视频| 一区二区国产在线观看| 久久精品三级视频| 欧美精选一区二区| 嫩草在线视频| 精品久久久久久综合日本| 久久亚洲影院| 国产a免费视频| 亚洲精品成人免费| 日韩一级视频| 久无码久无码av无码| 欧美国产一区二区| av一区二区三| 国产精彩精品视频| 综合天天久久| 亚洲第一视频区| 日韩亚洲电影在线| 麻豆久久久久| 日韩精品在线中文字幕| 99久久久久久99|