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

Taro性能優化之復雜列表篇

移動開發
本文將以復雜列表的性能優化為主旨,嘗試建立檢測指標,了解性能瓶頸,通過預加載、緩存、優化組件層級、優化數據結構等多種方式,實驗后提供一些技術方案的建議,希望可以給大家帶來一些思路。
作者 | Kenny,攜程高級前端開發工程師。2021年加入攜程,從事小程序/H5相關研發工作。

一、背景

隨著項目的不斷迭代,規模日益增大,而基于Taro3的運行時弊端也日漸凸顯,尤其在復雜列表頁面上表現欠佳,極度影響用戶體驗。本文將以復雜列表的性能優化為主旨,嘗試建立檢測指標,了解性能瓶頸,通過預加載、緩存、優化組件層級、優化數據結構等多種方式,實驗后提供一些技術方案的建議,希望可以給大家帶來一些思路。

二、問題現狀及分析

我們以酒店某一多功能列表為例(下圖),設定檢測標準(setData次數及該setData的響應時效作為指標),檢測情況如下:

圖片

圖片

指標

setData次數

渲染耗時(ms)

第一次進入列表頁

7

2404

下拉長列表更新

3

1903

多屏列表下 篩選項更新

2

1758

多屏列表下 列表項更新

2

748

由于歷史原因,該頁面的代碼,由微信的原生轉成的taro1,后續迭代至taro3。項目中存在小程序原生寫法可能忽略的問題。根據上面多次測出的指標值,以及視覺體驗上來看,存在以下問題:

2.1  首次進入列表頁的加載時間過長,白屏時間久

  • 列表頁請求的接口時間過長;
  • 初始化列表也是setData數據量過大,且次數過多;
  • 頁面節點數過多,導致渲染耗時較長;

2.2  頁面篩選項的更新卡頓,下拉動畫卡頓

  • 篩選項中節點過多,更新時setData數據量大;
  • 篩選項的組件更新會導致頁面跟著一起更新;

2.3  無限列表的更新卡頓,滑動過快會白屏

  • 請求下一頁的時機過晚;
  • setData時數據量大,響應慢;
  • 滑動過快時,沒有從白屏到渲染完成的過渡機制,體驗欠佳;

三、嘗試優化的方案

3.1  跳轉預加載API:

通過觀察小程序的請求可以發現,列表頁請求中,有兩個請求耗時較為長。

圖片

在Taro3的升級中,官方有提到預加載Preload,在小程序中,從調用 Taro.navigateTo 等路由跳轉 API 后,到小程序頁面觸發 onLoad 會有一定延時(約300ms,如果是分包新下載則跳轉時間更長),因此一些網絡請求可以提前到發起跳轉時一起去請求。于是我們在在跳轉前,使用Taro.preload預先加載復雜列表的請求:

// Page A
const query = new Query({
// ...
})


Taro.preload({
RequestPromise: requestPromiseA({data: query }),
})
// Page B
componentDidMount() {
// 在跳轉的過程中,發出請求,因為返回的是一個promise,所以需要在B頁面承接:
Taro.getCurrentInstance().preloadData?.RequestPromise?.then(res => {
this.setState(this.processResData(res.data))
})
}

用同樣的檢測方式反復測試后,使用preload的時,能提前300~400ms提前拿到酒店的列表數據。

圖片

圖片

左邊是沒使用preload的舊列表,右邊是預加載的列表,能明顯看出預加載后的列表會快一些。

圖片

然而在實際的使用中我們發現preload存在部分缺陷,對于承接頁面,如果接口較為復雜,會對業務流程的代碼有一定的入侵。究其本質,是前置了網絡請求,所以我們可以對網絡請求部分加入緩存策略,即可達到該效果,且接入成本會大大降低。

3.2  合理運用setData

setData 是小程序開發中使用最頻繁、也是最容易引發性能問題的API。setData 的過程,大致可以分成幾個階段:

  • 邏輯層虛擬 DOM 樹的遍歷和更新,觸發組件生命周期和 observer 等;
  • 將 data 從邏輯層傳輸到視圖層;
  • 視圖層虛擬 DOM 樹的更新、真實 DOM 元素的更新并觸發頁面渲染更新。

數據傳輸的耗時與數據量的大小正相關,舊的列表頁第一次加載的時候,一共請求了4個接口,setData短時間里有6次,數據量偏大的有兩次,我們嘗試的優化方式為,將數據量大的兩次分開,另外五次發現都是一些零散的狀態和數據,可以作為一次。

圖片

指標

setData次數

setData耗時(ms)

減少耗時百分比

第一次進入列表頁

3

2182

9.23%

進行完這一步的操作,平均能減少200ms左右,效果較小,因為頁面的節點數沒變,setData主要的耗時還分布于渲染時間。

3.3  優化頁面的節點數

根據微信官方文檔的說明,一個太大的節點樹會增加內存使用的同時,樣式重排時間上也會更長。建議一個頁面節點數量應少于 1000 個,節點樹深度少于 30 層,子節點數不大于 60 個。 

在微信開發者工具中分析該頁面兩個模塊存在大量的節點數。一個是篩選項模塊,一個是長列表的模塊。因為這部分功能較多,且結構復雜,我們采用了選擇性渲染。如在用戶瀏覽列表式,篩選項不生成具體節點。點擊展開篩選的時候再渲染出節點,對于頁面列表的體驗有一定程度的緩解。另一方面,對于整體布局的書寫上,有意識的避免嵌套過深的寫法,如RichText使用,部分選擇圖片代替等。

3.4  優化篩選項相關

3.4.1  改變動畫方式

在重構篩選項的過程中,發現在一些機型上,小程序的動畫效果不太理想,比如當打開篩選項tab的時候,需要實現一個向下拉出的效果,早期在實現的時候,會出現兩個問題:

  • 動畫會閃一下 然后再出現
  • 篩選頁面節點過多時,點擊響應過慢,用戶體驗差

圖片

舊的篩選項的動畫是通過keyframes方式實現了一個fadeIn的動畫,加在最外層,但是無論如何在動畫出現的那一幀,都會閃一下。分析下來,因為keyframes執行動畫造成的卡頓:

.filter-wrap {
animation: .3s ease-in fadeIn;
}


@keyframes fadeIn {
0% {
transform: translateY(-100%)
}
100% {
transform: translateY(0)
}
}

于是,嘗試換了一種實現方式,通過transition來實現transfrom:

.filter-wrap {
transform: translateY(-100%);
transition: none;
&.active {
transform: translateY(0);
transition: transform .3s ease-in;
}
}

圖片

3.4.2  維護簡潔的state

操作篩選項的時候,每操作一次都需要根據唯一id從篩選項的數據結構中循環遍歷,去找到對應的item,改掉item的狀態,然后將整個結構重新setState。官方文檔中提到關于setState,應該盡量避免處理過大的數據,會影響頁面的更新性能。 

針對這一問題,采取的辦法是:

  • 預先將復雜的對象扁平化,示例如下:

{
"a": {
"subs": [{
"a1": {
"subs": [{
"id": 1
}]
}
}]
},
"b": {
"subs": [{
"id": 2
}]
},


// ...
}

扁平化后的篩選項數據結構:

{
"1": {
"id": 1,
"name": "漢庭",
"includes": [],
"excludes": [],
// ...
},
"2": {
// ...
},


// ...
}

  • 不改變原有的數據,利用扁平化后的數據結構維護一個動態的選中列表:

const flattenFilters = data => {
// ...


return {
[id]: {
id: 2,
name: "全季",
includes: [],
excludes: []
// ...
},


// ...
}
}


const filters = [], filtersSelected = {}
const flatFilters = flattenFilters(filters)


const onClickFilterItem = item => {


// 所有的操作需要先拿到扁平化的item
const flatItem = flatFilters[item.id]


if (filtersSelected[flatItem.id]) {
// 已選中,需要取消選中
delete filtersSelected[flatItem.id]
}
else {
// 未選中,需要選中
filtersSelected[flatItem.id] = flatItem
// 取消選中排斥項
const idsSelected = Object.keys(filtersSelected)
const idsIntersection = intersection(idsSelected, flatItem.selfExcludes) // 交集
if (idsIntersection.length) {
idsIntersection.forEach(id => {
delete filtersSelected[id]
})
}


// 其他邏輯 (快篩,關鍵詞等)
}


this.setState({filtersSelected})
}

上面是一個簡單的實現,前后對比,我們只需要維護一個很簡單的對象,對其屬性進行添加或者刪除,性能有細微的提高,且代碼更為簡單整潔。在業務代碼中,類似這種通過數據結構轉換提升效率的地方有很多。

關于篩選項,可以對比下檢測的平均數據,減少200ms~300ms,也會得到一些提升:

指標

setData耗時舊

setData耗時新

減少耗時百分比

長列表下篩選項展開

1023

967

5.47%

長列表下點擊篩選項

1758

1443

17.92%

3.5  長列表的優化

早期酒店列表頁引入了虛擬列表,針對長列表渲染一定數目的酒店。核心的思路是只渲染顯示在屏幕的數據,基本實現就是監聽 scroll 事件,并且重新計算需要渲染的數據,不需要渲染的數據留一個空的 div 占位元素。

  • 加載下一頁有輕微的卡頓:

圖片

通過數據發現,下拉更新列表平均耗時1900ms左右:

指標

setData次數

setData耗時

下拉列表更新

3

1903

針對這個問題,解決方案是,提前加載下一頁的數據,將下一頁存入內存變量中。滾動加載的時候直接從內存變量中去取,然后setData更新到數據中。

圖片

  • 滑動速度過快會出現白屏(速度越快白屏時間越久,下方左圖):虛擬列表的原理就是利用空的View去占位,當快速回滾的時候,渲染的時候當節點過于復雜,特別是酒店帶有圖片,渲染就會變慢,導致白屏,我們進行了三種方案的嘗試:1)  使用動態的骨架圖代替原有的View占位 下方圖右:

圖片

圖片

2)  CustomWrapper

為了提升性能,官方推薦了CusomWrapper,它可以將包裹的組件與頁面隔離,組件渲染時不會更新整個頁面,由page.setData變為component.setData。

自定義組件是基于Shadow DOM實現的,對組件中的DOM和CSS進行了封裝,使得組件內部與主頁面的DOM保持了分離。圖片中的#shadow-root是根節點,成為影子根,和主文檔分開渲染。#shadow-root可以嵌套形成節點樹(Shadow Tree)

<custom-wrapper is="custom-wrapper">
#shadow-root
<view class="list"></view>
</custom-wrapper>

包裹的組件被隔離,這樣內部的數據的更新不會影響到整個頁面,可以簡單看下低性能客戶端下的表現。效果還是明顯的,同一時間點擊,右側彈窗出現的耗時平均會快200ms ~ 300ms (同一機型同一環境下測出),機型越低端越明顯。

圖片

(右側是CustomWrapper下的)

3)  使用小程序原生組件

用小程序的原生組件去實現這個列表Item。原生組件繞過Taro3的運行時,也就是說,在用戶對頁面操作的時候,如果是taro3的組件,需要進行前后數據的diff計算,然后生產新的虛擬dom所需要的節點數據,進而調用小程序的api去對節點進行操作。原生組件繞過了這一些列的操作,直接是是底層小程序對數據的更新。所以,縮短了一些時間。可以看一下實現后的效果:

圖片

指標

setData次數(舊)

setData次數(新)

下拉列表更新

3

1

setData耗時(舊)

  setData耗時(新)

  減少耗時百分比

1903

836

56.07%

可以看出原生性能提升很大,平均更新列表縮短1s左右,但是使用原生也有缺點,主要表現為以下兩個方面:

  • 組件包含的所有樣式 需要按照小程序的規范寫一遍,且與taro的樣式相互隔離;
  • 在原生組件中無法使用taro的API,比如createSelectorQuery這種;

對比三種方案,性能提升逐步加強。考慮到使用Taro原本的意義在于跨端,如果使用原生,就沒辦法達到這個目的,不過我們在嘗試是否可以通過插件,在編譯時生成對應原生小程序的組件代碼,以此解決這一問題,最終達到最優效果。

3.6  React.memo

當復雜頁面子組件過多時,父組件的渲染會導致子組件跟著渲染,React.memo可以做淺層的比較防止不必要的渲染:

const MyComponent = React.memo(function MyComponent(props) {
/* 使用 props 渲染 */
})

React.memo為高階組件。它與React.PureComponent非常相似,但它適用于函數組件,但不適用于 class 組件。

如果你的函數組件在給定相同props的情況下渲染相同的結果,那么你可以通過將其包裝在React.memo中調用,以此通過記憶組件渲染結果的方式來提高組件的性能表現。這意味著在這種情況下,React 將跳過渲染組件的操作并直接復用最近一次渲染的結果。

默認情況下其只會對復雜對象做淺層對比,如果你想要控制對比過程,那么請將自定義的比較函數通過第二個參數傳入來實現。

function MyComponent(props) {
/* 使用 props 渲染 */
}


function areEqual(prevProps, nextProps) {
/*
如果把 nextProps 傳入 render 方法的返回結果與
將 prevProps 傳入 render 方法的返回結果一致則返回 true,
否則返回 false
*/
}


export default React.memo(MyComponent, areEqual);

四、總結

本次復雜列表的性能優化我們前后經歷較久,嘗試了各種可能的優化點。從列表頁的預加載,篩選項數據結構和動畫實現的改變,到長列表的體驗優化和原生的結合,提升了頁面的更新和渲染效率,目前仍密切關注,繼續保持探索。

以下為最終效果對比(右側為優化后):

圖片

圖片


責任編輯:未麗燕 來源: 攜程技術
相關推薦

2021-07-05 14:55:28

前端優化圖片

2019-03-15 15:00:49

Webpack構建速度前端

2015-09-16 15:21:23

Android性能優化內存

2021-08-02 10:50:57

性能微服務數據

2015-09-16 14:37:50

Android性能優化運算

2015-09-16 13:54:30

Android性能優化渲染

2015-09-16 15:48:55

Android性能優化電量

2024-01-03 08:20:05

Java字符串性能

2018-07-18 12:12:20

Spark大數據代碼

2009-08-13 15:49:18

ASP.NET性能優化

2019-03-26 10:02:16

WebpackJavascript前端

2009-08-10 14:48:39

ASP.NET組件設計

2020-06-11 13:03:04

性能優化緩存

2009-08-13 16:22:18

ASP.NET性能優化

2011-05-27 16:00:10

DB2

2024-02-20 19:53:57

網絡通信協議

2010-04-13 11:26:54

IIS網站服務器性能

2016-12-21 12:46:47

數據倉庫SQLHive

2025-06-03 00:00:06

性能優化性能指標響應時間

2021-06-02 08:25:44

性能優化Repository
點贊
收藏

51CTO技術棧公眾號

中文字幕91爱爱| 国产真人做爰视频免费| 国内在线视频| 国产日韩欧美激情| 亚洲最大av网| 美日韩一二三区| 99re6这里只有精品| 精品国产一区二区亚洲人成毛片| 自慰无码一区二区三区| eeuss影院在线播放| 福利视频网站一区二区三区| 日韩av免费在线播放| 蜜臀久久精品久久久用户群体| 国产精品白浆| 欧美日韩国产天堂| 国产精品专区在线| 免费人成在线观看播放视频| aaa欧美日韩| 亚洲综合日韩在线| 无码人妻精品一区二区三区蜜桃91| 国产精品x453.com| 亚洲欧美日韩中文视频| 涩视频在线观看| 成人久久网站| 狠狠做深爱婷婷久久综合一区| 一本色道久久99精品综合| 天堂av在线免费观看| 国产成人亚洲精品狼色在线 | 性色av无码久久一区二区三区| 五月天亚洲一区| 精品精品欲导航| 天堂一区在线观看| 三级成人在线| 欧美日韩国产一区在线| 污污污污污污www网站免费| av基地在线| 久久久蜜桃精品| 精品国产乱码久久久久久丨区2区| 97免费观看视频| 日本一区中文字幕| 欧美综合第一页| www.99re7.com| 欧美日韩国产免费观看| 久久九九精品99国产精品| 麻豆视频免费在线播放| 精品国产精品国产偷麻豆| 国产丝袜一区二区三区免费视频| www.男人天堂| 国产伦精品一区二区三区免费优势 | 99精品久久久久久| 国产午夜精品一区| 熟妇人妻av无码一区二区三区| 国产麻豆精品久久一二三| 成人黄色片网站| 91av国产精品| 久99久精品视频免费观看| 国产一区视频在线播放| 国产又大又粗又长| 黄色日韩网站视频| 91视频国产精品| 国产精品一区二区av白丝下载 | 亚洲一区二区三区四区五区六区| 国产乱人伦精品一区| 日韩电影免费观看中文字幕| 欲求不满的岳中文字幕| 四虎884aa成人精品最新| 日韩av网址在线| 91丝袜在线观看| 欧美中文一区| 国产午夜一区二区| 国产精品麻豆一区| 亚洲天堂免费| 久久久久久久久网站| 日韩欧美激情视频| 美女视频一区免费观看| 国产精品中文字幕在线观看| 91精品国产乱码久久| 国产剧情在线观看一区二区| 国产精品视频免费观看| 三区在线观看| 国产精品嫩草影院av蜜臀| 正义之心1992免费观看全集完整版| 老司机免费在线视频| 一区二区三区精品视频| 国产精品999视频| 成人黄色免费短视频| 欧美日韩国产片| 99riav国产精品视频| 欧美一区 二区| 最近2019年日本中文免费字幕| 国产97免费视频| 亚洲一区二区成人| 国产精品视频自在线| www.国产免费| 国产午夜精品美女毛片视频| 翔田千里亚洲一二三区| 欧美hdxxx| 欧美伊人精品成人久久综合97| 免费欧美一级片| 国产成人精品一区二区免费看京 | heyzo高清国产精品| 欧美亚洲国产怡红院影院| 激情综合激情五月| 成人免费电影网址| 午夜剧场成人观在线视频免费观看| 最近中文字幕免费在线观看| 处破女av一区二区| 亚洲精品日韩成人| 日韩精品极品| 日韩欧美中文字幕公布| av男人的天堂av| 狠狠噜噜久久| 国产在线日韩在线| 日本在线一二三| 亚洲午夜国产一区99re久久| 色悠悠久久综合网| 偷拍自拍一区| 欧美极品欧美精品欧美视频 | 日韩av免费| 欧美精品一区二区三区一线天视频 | 中文字幕在线日本| www.亚洲免费av| 天天做天天爱天天高潮| 欧美成人h版| 日韩大片免费观看视频播放| 国产成人无码aa精品一区| 七七婷婷婷婷精品国产| 久久亚裔精品欧美| 91超碰免费在线| 日韩一区二区电影| 久草手机视频在线观看| 日韩国产精品大片| 蜜桃视频在线观看成人| 欧美裸体视频| 欧美精品一区视频| 国产在线观看你懂的| 国产二区国产一区在线观看| 在线码字幕一区| 成人精品国产| 色吧影院999| 精品一区二三区| 国产色综合久久| 国产福利一区视频| 国产99久久| 国产成人精品久久亚洲高清不卡| 四虎电影院在线观看| 欧美日韩国产一区二区| 手机av免费看| 久久九九电影| 日韩精彩视频| 国产精品黄色片| 啊v视频在线一区二区三区| 在线观看免费高清视频| 国产精品萝li| 国产精品久久久久久久av福利| 国产精品成人a在线观看| 成人免费看片视频| 午夜成年人在线免费视频| 日韩欧美综合在线| 国产一级一片免费播放放a| 不卡的av中国片| 香港三级韩国三级日本三级| 亚洲欧洲色图| 国产成人亚洲综合91| bbbbbbbbbbb在线视频| 欧美精品一二三| 顶臀精品视频www| 成人自拍视频在线观看| 国产一区二区在线视频播放| 国产成人手机高清在线观看网站| 国产精品高潮呻吟久久av无限 | а√天堂资源在线| 午夜精品123| 欧美偷拍一区二区三区| 久久国产精品一区二区| 人妻无码一区二区三区四区| 久久久久久亚洲精品美女| 久久久久久综合网天天| 男人天堂亚洲二区| 777色狠狠一区二区三区| 日日骚一区二区三区| 26uuu另类欧美亚洲曰本| 午夜宅男在线视频| 欧美日韩一区二区国产| 麻豆精品传媒视频| 日韩欧国产精品一区综合无码| 欧美国产日韩在线| 精品视频二区| 日韩三级免费观看| 日本黄色中文字幕| 亚洲精品视频在线看| 香蕉视频黄色在线观看| 久久99国产精品免费| 国产精品999视频| 国产精品久久久久一区二区三区厕所| av资源站久久亚洲| 日韩漫画puputoon| 欧美激情精品久久久久久久变态| 黑人与亚洲人色ⅹvideos| 欧美一二三区精品| 亚洲性猛交富婆| 无吗不卡中文字幕| 91视频青青草| 久久精品视频免费| 亚洲性图第一页| 青青草精品视频| 水蜜桃色314在线观看| 久久国产电影| 欧美另类视频在线| 99ri日韩精品视频| 国产美女久久精品| jizz内谢中国亚洲jizz| 久久99精品视频一区97| 98在线视频| 精品中文字幕久久久久久| 国产裸体无遮挡| 欧美亚洲精品一区| 日本中文字幕久久| 午夜不卡av免费| 强行糟蹋人妻hd中文| 中文字幕在线一区二区三区| 在线 丝袜 欧美 日韩 制服| 国产成人午夜精品影院观看视频| 伊人影院综合在线| 日韩国产精品久久久久久亚洲| 国产一区二区在线视频播放| 亚洲夜间福利| 免费观看亚洲视频| 亚欧美无遮挡hd高清在线视频| 欧美资源一区| 天堂99x99es久久精品免费| 国产九色91| 都市激情亚洲| 国产精品初高中精品久久 | 久久久影院一区二区三区| 成人资源在线| 成人综合色站| 国产亚洲观看| 51蜜桃传媒精品一区二区| 日日夜夜精品| 成人欧美在线观看| 天天综合在线观看| 成人福利免费观看| 亚洲青青一区| 成人h视频在线| 日本亚洲欧洲无免费码在线| 国产欧美在线视频| 91精品国产一区二区在线观看| 91久久精品国产91性色| 国产 日韩 欧美| 91美女高潮出水| 日日夜夜精品视频| 电影午夜精品一区二区三区| 成人黄色av网址| 精品欧美日韩在线| 亚洲第一二三区| 午夜精品短视频| 91蜜臀精品国产自偷在线| 中文字幕一区二区三区精彩视频| 色综合咪咪久久网| 国产91在线亚洲| 亚洲黄色天堂| 亚洲熟妇av一区二区三区| 日本特黄久久久高潮| 色91精品久久久久久久久| 国产尤物一区二区在线| 亚洲一区和二区| 91丨porny丨国产入口| 久久久久久久毛片| 亚洲色图在线播放| 国产无遮无挡120秒| 日韩欧美国产中文字幕| 不卡av电影在线| 欧美一级久久久| 亚洲欧美日韩成人在线| 伊人av综合网| 色黄网站在线观看| 欧美专区福利在线| 高清在线一区二区| 久久伊人一区二区| 91精品国产福利在线观看麻豆| 精品丰满人妻无套内射| 日韩极品在线观看| 亚洲热在线视频| 久久蜜桃av一区精品变态类天堂| 影音先锋男人看片资源| 亚洲午夜精品网| 高潮无码精品色欲av午夜福利| 欧美一激情一区二区三区| 日中文字幕在线| 久久精品国产视频| 在线最新版中文在线| 92国产精品久久久久首页 | 免费看黄色a级片| 国产欧美一级| 手机在线视频一区| 久久久精品一品道一区| 99精品久久久久| 色综合久久久久综合体| 国产人妖在线播放| 亚洲视频综合网| 岛国片av在线| 国产精品久久久久久婷婷天堂| 国产一区二区在线视频你懂的| 亚洲精品一区二区三区樱花| 亚洲第一区色| 亚洲怡红院在线| 国产欧美一区二区三区鸳鸯浴| 国产在线一二区| 91精品国产综合久久久久久| 免费国产在线观看| 韩国国内大量揄拍精品视频| 电影91久久久| 水蜜桃亚洲一二三四在线| 中文一区在线| av漫画在线观看| 亚洲三级在线免费| 中文字幕久久久久| 亚洲女人初尝黑人巨大| a级大胆欧美人体大胆666| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 日韩一级在线| 中文字幕永久免费| 亚洲精品一二三区| 国产尤物视频在线观看| 国产亚洲成av人片在线观看桃| 国产夫妻在线播放| 国产精品久久久久久久久婷婷| 亚洲男女av一区二区| 亚洲一级免费观看| 欧美激情自拍偷拍| 色老头一区二区| 亚洲天堂成人在线| 日本电影欧美片| 久久精品日产第一区二区三区| 亚洲欧洲另类| 人妖粗暴刺激videos呻吟| 亚洲宅男天堂在线观看无病毒| 99久久精品免费看国产交换| 精品国内自产拍在线观看| 六九午夜精品视频| 亚洲图片在线观看| 蜜臀av一区二区| 中国1级黄色片| 欧美日韩高清在线| 精品国产白色丝袜高跟鞋| 成人欧美一区二区三区黑人| 99久久夜色精品国产亚洲1000部| 污网站在线免费| 亚洲欧洲日产国码二区| 国产精品嫩草影院精东| 久久综合电影一区| 亚洲综合影院| 农民人伦一区二区三区| 91免费视频网址| 无码人妻熟妇av又粗又大| 中文字幕精品一区二区精品| 欧洲美女精品免费观看视频| 亚洲激情免费视频| 成人亚洲一区二区一| 久久久国产精品成人免费| 亚洲视频在线视频| 国产欧美88| 精品少妇在线视频| 久久久久99精品国产片| 一区二区三区黄色片| 欧美韩日一区二区| 亚洲区小说区图片区qvod按摩| 一级黄色香蕉视频| 自拍视频在线观看一区二区| 亚洲爱爱综合网| 4p变态网欧美系列| 日韩精品首页| 激情av中文字幕| 欧美亚洲动漫精品| 性欧美1819sex性高清大胸| 国产综合第一页| 日韩黄色小视频| 午夜精品一区二区三区视频| 亚洲成色999久久网站| 姬川优奈av一区二区在线电影| 亚洲一二区在线| 成人丝袜18视频在线观看| 麻豆成人免费视频| 精品久久国产精品| 日韩大胆成人| 天堂av2020| 欧美日韩国产色视频| 2019中文字幕在线视频| 国产日韩欧美亚洲一区| 卡一卡二国产精品 | 亚洲日韩视频| 精品人妻中文无码av在线| 日韩视频一区在线观看| 欧美大片免费高清观看| 草草草视频在线观看| 久久久久久久性| 亚洲男女视频在线观看| 国产精品中文字幕在线| 国产日韩综合|