国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

【W(wǎng)eb技術(shù)】1107- 總結(jié) 5 種前端 API 請(qǐng)求緩存方案(干貨內(nèi)容)

共 8664字,需瀏覽 18分鐘

 ·

2021-10-17 23:37

作者:wsafight,原文:https://github.com/wsafight/personBlog/issues/2

在開發(fā) web 應(yīng)用程序時(shí),性能都是必不可少的話題。

對(duì)于webpack打包的單頁面應(yīng)用程序而言,我們可以采用很多方式來對(duì)性能進(jìn)行優(yōu)化,比方說 tree-shaking、模塊懶加載、利用 extrens 網(wǎng)絡(luò)cdn 加速這些常規(guī)的優(yōu)化。

甚至在vue-cli 項(xiàng)目中我們可以使用 --modern 指令生成新舊兩份瀏覽器代碼來對(duì)程序進(jìn)行優(yōu)化。

而事實(shí)上,緩存一定是提升web應(yīng)用程序有效方法之一,尤其是用戶受限于網(wǎng)速的情況下。提升系統(tǒng)的響應(yīng)能力,降低網(wǎng)絡(luò)的消耗。當(dāng)然,內(nèi)容越接近于用戶,則緩存的速度就會(huì)越快,緩存的有效性則會(huì)越高。

以客戶端而言,我們有很多緩存數(shù)據(jù)與資源的方法,例如 標(biāo)準(zhǔn)的瀏覽器緩存 以及 目前火熱的 Service worker。但是,他們更適合靜態(tài)內(nèi)容的緩存。例如 html,js,css以及圖片等文件。而緩存系統(tǒng)數(shù)據(jù),我采用另外的方案。

那我現(xiàn)在就對(duì)我應(yīng)用到項(xiàng)目中的各種 api 請(qǐng)求緩存方案,從簡(jiǎn)單到復(fù)雜依次介紹一下。

方案一 數(shù)據(jù)緩存

簡(jiǎn)單的 數(shù)據(jù) 緩存,第一次請(qǐng)求時(shí)候獲取數(shù)據(jù),之后便使用數(shù)據(jù),不再請(qǐng)求后端api。代碼如下:

const?dataCache?=?new?Map()

async?getWares()?{
????let?key?=?'wares'
????//?從data?緩存中獲取?數(shù)據(jù)
????let?data?=?dataCache.get(key)
????if?(!data)?{
????????//?沒有數(shù)據(jù)請(qǐng)求服務(wù)器
????????const?res?=?await?request.get('/getWares')

????????//?其他操作
????????...
????????data?=?...

????????//?設(shè)置數(shù)據(jù)緩存
????????dataCache.set(key,?data)

????}
????return?data
}?

第一行代碼 使用了 es6以上的 Map,如果對(duì)map不是很理解的情況下,你可以參考ECMAScript 6 入門 Set 和 Map 或者 Exploring ES6 關(guān)于 map 和 set的介紹,此處可以理解為一個(gè)鍵值對(duì)存儲(chǔ)結(jié)構(gòu)。

之后 代碼 使用 了 async 函數(shù),可以將異步操作變得更為方便。你可以參考ECMAScript 6 入門 async函數(shù)來進(jìn)行學(xué)習(xí)或者鞏固知識(shí)。

代碼本身很容易理解,是利用 Map 對(duì)象對(duì)數(shù)據(jù)進(jìn)行緩存,之后調(diào)用從 Map 對(duì)象來取數(shù)據(jù)。對(duì)于及其簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,直接利用此代碼即可。

調(diào)用方式:

getWares().then(?...?)
//?第二次調(diào)用?取得先前的data
getWares().then(?...?)

方案二 promise 緩存

方案一本身是不足的。因?yàn)槿绻紤]同時(shí)兩個(gè)以上的調(diào)用此 api,會(huì)因?yàn)檎?qǐng)求未返回而進(jìn)行第二次請(qǐng)求api。當(dāng)然,如果你在系統(tǒng)中添加類似于 vuex、redux這樣的單一數(shù)據(jù)源框架,這樣的問題不太會(huì)遇到,但是有時(shí)候我們想在各個(gè)復(fù)雜組件分別調(diào)用api,而不想對(duì)組件進(jìn)行組件通信數(shù)據(jù)時(shí)候,便會(huì)遇到此場(chǎng)景。

const?promiseCache?=?new?Map()

getWares()?{
????const?key?=?'wares'
????let?promise?=?promiseCache.get(key);
????//?當(dāng)前promise緩存中沒有?該promise
????if?(!promise)?{
????????promise?=?request.get('/getWares').then(res?=>?{
????????????//?對(duì)res?進(jìn)行操作
????????????...
????????}).catch(error?=>?{
????????????//?在請(qǐng)求回來后,如果出現(xiàn)問題,把promise從cache中刪除?以避免第二次請(qǐng)求繼續(xù)出錯(cuò)S
????????????promiseCache.delete(key)
????????????return?Promise.reject(error)
????????})
????}
????//?返回promise
????return?promise
}

該代碼避免了方案一的同一時(shí)間多次請(qǐng)求的問題。同時(shí)也在后端出錯(cuò)的情況下對(duì)promise進(jìn)行了刪除,不會(huì)出現(xiàn)緩存了錯(cuò)誤的promise就一直出錯(cuò)的問題。

調(diào)用方式:

getWares().then(?...?)
//?第二次調(diào)用?取得先前的promise
getWares().then(?...?)

方案三 多promise 緩存

該方案是同時(shí)需要 一個(gè)以上 的api請(qǐng)求的情況下,對(duì)數(shù)據(jù)同時(shí)返回,如果某一個(gè)api發(fā)生錯(cuò)誤的情況下。均不返回正確數(shù)據(jù)。

const?querys?={
????wares:?'getWares',
????skus:?'getSku'
}
const?promiseCache?=?new?Map()

async?queryAll(queryApiName)?{
????//?判斷傳入的數(shù)據(jù)是否是數(shù)組
????const?queryIsArray?=?Array.isArray(queryApiName)
????//?統(tǒng)一化處理數(shù)據(jù),無論是字符串還是數(shù)組均視為數(shù)組
????const?apis?=?queryIsArray???queryApiName?:?[queryApiName]

????//?獲取所有的?請(qǐng)求服務(wù)
????const?promiseApi?=?[]

????apis.forEach(api?=>?{
????????//?利用promise?
????????let?promise?=?promiseCache.get(api)

????????if?(promise)?{
????????????//?如果?緩存中有,直接push
????????????promise.push(promise)
????????}?else?{
?????????????promise?=?request.get(querys[api]).then(res?=>?{
????????????????//?對(duì)res?進(jìn)行操作
????????????????...
????????????????}).catch(error?=>?{
????????????????//?在請(qǐng)求回來后,如果出現(xiàn)問題,把promise從cache中刪除
????????????????promiseCache.delete(api)
????????????????return?Promise.reject(error)
????????????})
????????????promiseCache.set(api,?promise)
????????????promiseCache.push(promise)
????????}
????})
????return?Promise.all(promiseApi).then(res?=>?{
????????//?根據(jù)傳入的?是字符串還是數(shù)組來返回?cái)?shù)據(jù),因?yàn)楸旧矶际菙?shù)組操作
????????//?如果傳入的是字符串,則需要取出操作
????????return?queryIsArray???res?:?res[0]
????})
}

該方案是同時(shí)獲取多個(gè)服務(wù)器數(shù)據(jù)的方式。可以同時(shí)獲得多個(gè)數(shù)據(jù)進(jìn)行操作,不會(huì)因?yàn)閱蝹€(gè)數(shù)據(jù)出現(xiàn)問題而發(fā)生錯(cuò)誤。

調(diào)用方式

queryAll('wares').then(?...?)
//?第二次調(diào)用?不會(huì)去取?wares,只會(huì)去skus
queryAll(['wares',?'skus']).then(?...?)

方案四 添加時(shí)間有關(guān)的緩存

往往緩存是有危害的,如果我們?cè)谥佬薷牧藬?shù)據(jù)的情況下,直接把 cache 刪除即可,此時(shí)我們調(diào)用方法就可以向服務(wù)器進(jìn)行請(qǐng)求。這樣我們規(guī)避了前端顯示舊的的數(shù)據(jù)。但是我們可能一段時(shí)間沒有對(duì)數(shù)據(jù)進(jìn)行操作,那么此時(shí)舊的數(shù)據(jù)就一直存在,那么我們最好規(guī)定個(gè)時(shí)間來去除數(shù)據(jù)。該方案是采用了 類 持久化數(shù)據(jù)來做數(shù)據(jù)緩存,同時(shí)添加了過期時(shí)長數(shù)據(jù)以及參數(shù)化。代碼如下:首先定義持久化類,該類可以存儲(chǔ) promise 或者 data

class?ItemCache()?{
????construct(data,?timeout)?{
????????this.data?=?data
????????//?設(shè)定超時(shí)時(shí)間,設(shè)定為多少秒
????????this.timeout?=?timeout
????????//?創(chuàng)建對(duì)象時(shí)候的時(shí)間,大約設(shè)定為數(shù)據(jù)獲得的時(shí)間
????????this.cacheTime?=?(new?Date()).getTime
????}
}

然后我們定義該數(shù)據(jù)緩存。我們采用Map 基本相同的api

class?ExpriesCache?{
????//?定義靜態(tài)數(shù)據(jù)map來作為緩存池
????static?cacheMap?=??new?Map()

????//?數(shù)據(jù)是否超時(shí)
????static?isOverTime(name)?{
????????const?data?=?ExpriesCache.cacheMap.get(name)

????????//?沒有數(shù)據(jù)?一定超時(shí)
????????if?(!data)?return?true

????????//?獲取系統(tǒng)當(dāng)前時(shí)間戳
????????const?currentTime?=?(new?Date()).getTime()????????

????????//?獲取當(dāng)前時(shí)間與存儲(chǔ)時(shí)間的過去的秒數(shù)
????????const?overTime?=?(currentTime?-?data.cacheTime)?/?1000

????????//?如果過去的秒數(shù)大于當(dāng)前的超時(shí)時(shí)間,也返回null讓其去服務(wù)端取數(shù)據(jù)
????????if?(Math.abs(overTime)?>?data.timeout)?{
????????????//?此代碼可以沒有,不會(huì)出現(xiàn)問題,但是如果有此代碼,再次進(jìn)入該方法就可以減少判斷。
????????????ExpriesCache.cacheMap.delete(name)
????????????return?true
????????}

????????//?不超時(shí)
????????return?false
????}

????//?當(dāng)前data在?cache?中是否超時(shí)
????static?has(name)?{
????????return?!ExpriesCache.isOverTime(name)
????}

????//?刪除?cache?中的?data
????static?delete(name)?{
????????return?ExpriesCache.cacheMap.delete(name)?
????}

????//?獲取
????static?get(name)?{
????????const?isDataOverTiem?=?ExpriesCache.isOverTime(name)
????????//如果?數(shù)據(jù)超時(shí),返回null,但是沒有超時(shí),返回?cái)?shù)據(jù),而不是?ItemCache?對(duì)象
????????return?isDataOverTiem???null?:?ExpriesCache.cacheMap.get(name).data
????}

????//?默認(rèn)存儲(chǔ)20分鐘
????static?set(name,?data,?timeout?=?1200)?{
????????//?設(shè)置?itemCache
????????const?itemCache?=?mew?ItemCache(data,?timeout)
????????//緩存
????????ExpriesCache.cacheMap.set(name,?itemCache)
????}
}

此時(shí)數(shù)據(jù)類以及操作類 都已經(jīng)定義好,我們可以在api層這樣定義

//?生成key值錯(cuò)誤
const?generateKeyError?=?new?Error("Can't?generate?key?from?name?and?argument")

//?生成key值
function?generateKey(name,?argument)?{
????//?從arguments?中取得數(shù)據(jù)然后變?yōu)閿?shù)組
????const?params?=?Array.from(argument).join(',')

????try{
????????//?返回?字符串,函數(shù)名?+?函數(shù)參數(shù)
????????return?`${name}:${params}`
????}catch(_)?{
????????//?返回生成key錯(cuò)誤
????????return?generateKeyError
????}
}

async?getWare(params1,?params2)?{
????//?生成key
????const?key?=?generateKey('getWare',?[params1,?params2])?
????//?獲得數(shù)據(jù)
????let?data?=?ExpriesCache.get(key)
????if?(!data)?{
????????const?res?=?await?request('/getWares',?{params1,?params2})
????????//?使用?10s?緩存,10s之后再次get就會(huì)?獲取null?而從服務(wù)端繼續(xù)請(qǐng)求
????????ExpriesCache.set(key,?res,?10)
????}
????return?data
}

該方案使用了 過期時(shí)間 和 api 參數(shù)不同而進(jìn)行 緩存的方式。已經(jīng)可以滿足絕大部分的業(yè)務(wù)場(chǎng)景。

調(diào)用方式

getWares(1,2).then(?...?)
//?第二次調(diào)用?取得先前的promise
getWares(1,2).then(?...?)
//?不同的參數(shù),不取先前promise
getWares(1,3).then(?...?)

方案五 基于修飾器的方案四

和方案四的解法一致的,但是是基于修飾器來做。代碼如下:

//?生成key值錯(cuò)誤
const?generateKeyError?=?new?Error("Can't?generate?key?from?name?and?argument")

//?生成key值
function?generateKey(name,?argument)?{
????//?從arguments?中取得數(shù)據(jù)然后變?yōu)閿?shù)組
????const?params?=?Array.from(argument).join(',')
????try{
????????//?返回?字符串
????????return?`${name}:${params}`
????}catch(_)?{
????????return?generateKeyError
????}
}

function?decorate(handleDescription,?entryArgs)?{
????//?判斷?當(dāng)前?最后數(shù)據(jù)是否是descriptor,如果是descriptor,直接?使用
????//?例如?log?這樣的修飾器
????if?(isDescriptor(entryArgs[entryArgs.length?-?1]))?{
????????return?handleDescription(...entryArgs,?[])
????}?else?{
????????//?如果不是
????????//?例如?add(1)?plus(20)?這樣的修飾器
????????return?function()?{
????????????return?handleDescription(...Array.protptype.slice.call(arguments),?entryArgs)
????????}
????}
}

function?handleApiCache(target,?name,?descriptor,?...config)?{
????//?拿到函數(shù)體并保存
????const?fn?=?descriptor.value
????//?修改函數(shù)體
????descriptor.value?=?function?()?{?
????????const?key?=??generateKey(name,?arguments)
????????//?key無法生成,直接請(qǐng)求?服務(wù)端數(shù)據(jù)
????????if?(key?===?generateKeyError)??{
????????????//?利用剛才保存的函數(shù)體進(jìn)行請(qǐng)求
????????????return?fn.apply(null,?arguments)
????????}
????????let?promise?=?ExpriesCache.get(key)
????????if?(!promise)?{
????????????//?設(shè)定promise
????????????promise?=?fn.apply(null,?arguments).catch(error?=>?{
?????????????????//?在請(qǐng)求回來后,如果出現(xiàn)問題,把promise從cache中刪除
????????????????ExpriesCache.delete(key)
????????????????//?返回錯(cuò)誤
????????????????return?Promise.reject(error)
????????????})
????????????//?使用?10s?緩存,10s之后再次get就會(huì)?獲取null?而從服務(wù)端繼續(xù)請(qǐng)求
????????????ExpriesCache.set(key,?promise,?config[0])
????????}
????????return?promise?
????}
????return?descriptor;
}

//?制定?修飾器
function?ApiCache(...args)?{
????return?decorate(handleApiCache,?args)
}

此時(shí) 我們就會(huì)使用 類來對(duì)api進(jìn)行緩存

class?Api?{
????//?緩存10s
????@ApiCache(10)
????//?此時(shí)不要使用默認(rèn)值,因?yàn)楫?dāng)前?修飾器?取不到
????getWare(params1,?params2)?{
????????return?request.get('/getWares')
????}
}

因?yàn)楹瘮?shù)存在函數(shù)提升,所以沒有辦法利用函數(shù)來做 修飾器 例如:

var?counter?=?0;

var?add?=?function?()?{
??counter++;
};

@add
function?foo()?{
}

該代碼意圖是執(zhí)行后counter等于 1,但是實(shí)際上結(jié)果是counter等于 0。因?yàn)楹瘮?shù)提升,使得實(shí)際執(zhí)行的代碼是下面這樣

@add
function?foo()?{
}

var?counter;
var?add;

counter?=?0;

add?=?function?()?{
??counter++;
};

所以沒有 辦法在函數(shù)上用修飾器。具體參考ECMAScript 6 入門 Decorator此方式寫法簡(jiǎn)單且對(duì)業(yè)務(wù)層沒有太多影響。但是不可以動(dòng)態(tài)修改 緩存時(shí)間

調(diào)用方式

getWares(1,2).then(?...?)
//?第二次調(diào)用?取得先前的promise
getWares(1,2).then(?...?)
//?不同的參數(shù),不取先前promise
getWares(1,3).then(?...?)

總結(jié)

api 的緩存機(jī)制與場(chǎng)景在這里也基本上介紹了,基本上能夠完成絕大多數(shù)的數(shù)據(jù)業(yè)務(wù)緩存,在這里我也想請(qǐng)教教大家,有沒有什么更好的解決方案,或者這篇博客中有什么不對(duì)的地方,歡迎指正,在這里感謝各位了。

同時(shí)這里也有很多沒有做完的工作,可能會(huì)在后面的博客中繼續(xù)完善。

1. JavaScript 重溫系列(22篇全)
2. ECMAScript 重溫系列(10篇全)
3. JavaScript設(shè)計(jì)模式 重溫系列(9篇全)
4.?正則 / 框架 / 算法等 重溫系列(16篇全)
5.?Webpack4 入門(上)||?Webpack4 入門(下)
6.?MobX 入門(上)?||??MobX 入門(下)
7. 120+篇原創(chuàng)系列匯總

回復(fù)“加群”與大佬們一起交流學(xué)習(xí)~

點(diǎn)擊“閱讀原文”查看 120+ 篇原創(chuàng)文章

瀏覽 33
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚州无码一区| 天天草天天草| 操比在线| 99久久九九| 蜜芽av在线观看| 精品视频999| 亚洲电影中文字幕| 天天干天天干天天干| 成人免费A片视频| 亚洲高清无码网站| 国产精品6| 亚洲无码视频在线观看高清| 神马午夜三级| 日老女人的逼| 国产激情欧洲在线观看一区二区三区| 亚洲视频在线观看网站| 一级一A片一a免费看| 激情一区二区| 亚洲视频在线免费| 欧美在线视频一区| 亚洲一级二级三级| 伊人三级片| 国产精品久久久久久久久久久久久| 国产不卡在线| 91AV免费看| 四个熟妇搡BBBB搡BBBB| www.bbbb| 欧美在线视频你懂的| 色色热热| 午夜大香蕉| A片黄色视频| 天天干中文字幕| 激情六月| 国精品无码人妻一区二区三区| 一区二区视频在线| 免费无码在线看| 色婷视频| 国产美女自慰网站| 久久黄色成人视频| 国产在线无码观看| 中出欧美亚洲| 中文字幕北条麻妃在线| www.黄色视频| 特黄A级毛片| 西西444WWW无码精品| 一欧美日韩免费/看| 成熟的国模冰莲[2]| 美女综合网| 久久成人18免费网站波多野结衣| 北条麻妃性爱视频| 婷婷在线视频| 日日摸夜夜| 野花av| 人成在线视频| 一本一道无码| WWW亚洲视频| 91草视频| 亚洲aaa在线| 欧美第一色| 色婷婷av| 一级特黄妇女高潮AA片免费播放 | 国产美女一级特黄大片| 九九热8| 中文字幕在线免费| 国产美女精品视频| 日韩AV在线免费观看| 蜜臀AV一区二区| 黄片一区二区| 香蕉在线观看| 天天日天天舔| 免费高清无码| 久久精品中文字幕| 插插插综合| 亚洲天堂自拍| 奇米无码| 在线黄片视频| 欧美二区视频| 18禁www| 免费在线观看Av| 高清无码在线观看18| 日皮视频在线观看免费| 国产理伦| 国精品无码A区一区二区| 黄色av免费在线观看| 东北女人毛多又黑A片| 亚洲无码一区二区三区| 国产一毛a一毛a在线观看| 国产棈品久久久久久久久久九秃 | 久色天堂| 成人网站在线| 久久久久亚洲AV无码麻豆| 中文字幕一区二区三区人妻在线视频 | 亚洲精品天堂无码AV片| 中文字幕乱码中文字幕电视剧| 亚洲va欧美va天堂v国产综合 | 超碰九一| 日韩无码久久久| 亚洲综合色网站| 91欧美黑人| 中文字幕36页| 无码日韩精品一区二区免费96| 91天天爽| 巨い巨乳の少妇あジed2k| 亚洲av偷拍| 偷窥丶亚洲丶熟女| seseav| 99久久国产精| 人人操碰成人网| 国产成人在线免费| 神马午夜激情| 蝌蚪窝在线观看| 日本白浆| 偷偷操av| 麻豆成人无码精品视频| 日批无码| 吴梦梦《女教师时间暂停》| 亚洲综合社区| 欧美日韩在线观看中文字幕| 欧美午夜福利| 国内成人AV| 久久国产日韩| 精品无码在线观看| 日本欧美黄色| 毛片A| 久久国产乱子伦精品免费女,网站 一区二区三区免费观看 | 久久私人影院| 天天日bb| 一级片日韩| 国产精品中文| 国产3p露脸普通话对白| 中文字幕视频在线观看| 天天草天天干| 成人在线日韩| 国产又粗又长又硬黄色一级片| 久久久穴| 永久m3u8在线观看| 日本黄色影视| 99伊人| 91AV电影网| 久久久精品国产视频| 青娱乐超碰在线| 黄色一级视频网站| 大香蕉大香蕉免费网| 免费超碰| 国产一区二区三区免费视频| 高清无码不卡在线观看| 久久动图| 久久久国产精品黄毛片| 激情丁香婷婷| xxx一区二区| 五月天av在线观看| 色啪视频| 911精品人妻一区二区三区A片| www.91在线看| 北条麻妃在线播放一区| 亚洲国产一区二区三区| 青娱乐av在线| 成人在线H| 999国产精品视频| 国产裸体美女网站| 欧美夜夜| 2019国产精品| 国产最新AV| 俺来了俺去了www色官网| 熟女人妻人妻の视频| 成人夜间视频| 亚洲无套内射| 亚洲综合网在线观看| 亚洲日韩av在线| 日韩成人大片| 伊人三级| 国产中文字幕视频| 九九国产| 天天射日| 国产精品怡红院有限公司| 国产网站精品| 无码一区精品久久久成人| 国产亚洲成人综合| 在线观看免费完整版中文字幕视频| 亚洲黄色影视| 熟女伦乱| 日无码| 麻豆黄网| 黄色a视频| 国产有码在线观看| 色噜噜狠狠一区二区三区Av蜜芽| 在线色| 香蕉A片| 免费在线观看黄色视频| 国产办公室丝袜人妖| 丁香五月天激情网| 丁香花在线小说免费阅读| 俺也操| 国产成人综合网| 久久精品国产亚洲AV成人婷婷| 日本色情在线| 制服丝袜无码| 先锋影音av资源网| 国精产品久拍自产在线网站| 免费69视频看片| 欧美激情伊人| 中文字幕++中文字幕明步| 夜夜狠狠躁日日躁| 俺也操| 欧美一级婬片AAAA毛片| 五月天婷婷色色| 91麻豆精品国产91久久久久久 | 91蝌蚪91九色| 91理论片| 人妻18无码人伦一区二区三区精品| 爱爱视频无码| 婷婷五月天在线电影| 男女日日批黄色三级| 激情婷婷| 五月天婷婷影院| 国产成人AV在线| 搡BBBB| 日韩精品中文字幕无码| 成人黄色免费观看| 在线观看免费国产| 欧洲精品视频在线观看| 肏屄视频在线播放| 日韩免费黄色视频| 国产酒店自拍| 一本色道综合久久欧美日韩精品 | 日韩三级片av| 欧美日韩性爰视频| 三级片韩国AV| 欧美一在线一综合| 成人毛片在线播放免费| 欧美性爱超碰| 精品一区二区三区蜜桃臀www| 东京热无码视频| 亚洲无码二区| 无码高清视频| 韩国高清无码60.70.80| 加勒比DVD手机在线播放观看视频| 操一操| 五丁香在线观看AV| 色妞一區| 亚洲无码三级片在线观看| 91国产精品视频在线| 午夜成人福利视频| 日韩一级电影在线| 性爱AV| 日韩AV免费在线播放| 国产wwwww| 在线日韩国产| 91亚洲国产精品| 日本A在线播放| 亚洲另类图片小说| 亚洲黄色毛片| 日韩精品人妻中文字幕有| 日韩人妻码一区二区三区| JULIA超乳JULIA无码| 精品久久成人| www.91n| 黄色成人片| 精品免费国产一区二区三区四区的使用方法 | AV在线小说| 又大又粗AV| 天天舔天天操| 特级西西444WWW高清| 亚洲字幕在线观看| 97福利在线| 加勒比在线| 日韩国产高清无码| v天堂在线| 暗呦罗莉精品一区二区| 国产午夜成人视频| 亚洲AV黄片| 中文在线永久免费观看| 色婷婷视频在线观看| 国产精品久久久久的角色| 黄频视频| 91无码在线视频| 欧美一区二区三区在线观看| 国产性综合| 欧美成人高清| 亚洲图片激情乱伦小说| 亚洲网站在线免费观看| 国产思思99re99在线观看| 靠逼网站免费观看| 日韩精品一级| 俺来也俺就去www色情网| 黄色午夜福利| 国产成人三级| 国产香蕉视屏| 天天草夜夜操| 狠狠躁日日躁夜夜躁A片男男视频 精品无码一区二区三区蜜桃李宗瑞 | 尤物视频网| 精品免费视频| 美国高清无码| 亚洲AV无码蜜桃| 亚洲午夜免费视频| 免费AV大全| 99re99| 国产成人毛片18女人18精品| 国产成人精品久久二区二区91 | 天天干天| 五月婷综合| 国产videos| 婷婷性爱五月天| 一级av片| 久草超碰在线| 亚洲操逼网| 色噜噜在线观看| 亚洲欧美久久久| 免费三级网| 国产大鸡巴| 亚韩在线| 91麻豆精品国产91久久久久久| 中文字幕日韩高清| 99re视频在线观看| 国产无遮挡又黄又爽又| 精品久久免费视频| 亚洲AV成人精品一区二区三区 | 欧美精品18videosex性欧美 | 美女极度色诱图片www视频| 免费黄色成人视频| 亚洲人气无码AV| 猛男大粗猛爽h男人味| 五月天婷婷激情网| 亚洲AV成人无码精在线| 性爱AV| 国产老骚逼| 久久男人天堂| 中文人妻av| 91三级片在线观看| 亚洲无码一本道| 欧美日日| 秋霞午夜久久| 中文字幕免费高清网站| 黄色成人视频在线观看| 欧美色图1| 男女啪啪免费视频| a片在线免费观看| 干B网| 超碰在线网站| 好想被c秘好爽n网址| 四川性BBB搡BBB爽爽爽小说| 韩国无码观看| 日韩性视频| 日本国产黄色| 国产在线无码观看| 亚洲乱码国产乱码精品天美传媒| 在线日韩国产| 熟妇人妻中文AV| 日韩AV无码专区亚洲AV紧身裤| 青草视频在线免费观看| 成人AV婷婷| 成人高清无码在线观看| 伊人网视频在线| 婷婷激情中文字幕| 九九精品在线视频| 麻豆操逼| 成人一级黄色电影| caopro| www伦理片-韩国三级三级三级a三级-成人AV| 日韩一区二区无码视频| 亚洲精品一二三区| 亚洲日韩免费在线观看| 人成免费在线视频| 天天爱天天射| 久久一级A片| 精品在线第一页| 欧美国产在线观看综合| 99久久国产热无码精品免费| 俺来也俺就去www色情网| 人妻精品一区二区在线| 国产精品久久久久久无码人妻| 色欲99| 大蕉伊人网| 男女啪啪| 日韩性爱一区二区| 91成人视频在线免费观看| 欧美在线中文字幕| 国产高清无码免费在线观看 | 俺去俺来也在线www色官网| 偷拍一区二区三区| 俺来也俺就去www色情网| 欧美在线观看网站18| 91看片看婬黄大片| 亚洲视频无码| 在线亚洲一区| 日韩成人影片| 五月天婷婷无码| 色婷婷亚洲| 亚洲精品69| 黄色一级生活片| 亚洲成人免费网站| 国产对白视频| 亚洲婷婷在线| 久热免费视频在线观看| 91探花足浴店按摩店| 国产免费黄色片| 免费+无码+精品| 日韩免费观看视频| 在线免费亚洲视频| 欧美成人精品欧美一级私黄| 久操精品视频| 国产av毛片| 久久午夜无码鲁丝午夜精品| 国产精品成人无码a无码| 性欧美xxxx| 久久九九国产| 蜜桃无码视频小说网站| 我和岳m愉情XXXⅩ视频| 天堂素人| 一区二区国产精品| 国产淫乱视频| 中文字幕乱码中文字乱码影响大吗 | 国产精品福利导航| 九九九九精品视频| 中文字幕乱码中文字乱码影响大吗 | 理论在线视频| 国外成人视频| 91人妻无码精品一区二区三区| 精品第一页| 黄页网址在线观看| 亚洲一级一级黄色| 丁香五月在线观看| 国产99久久九九精品无码免费| 婷婷激情六月| 在线无码高清| 成人AV片导航| 五月色婷婷综合| 操逼视频在线免费观看| 麻豆911| 日韩欧美国产综合| 亚洲无码免费视频在线观看| 学生妹毛片视频| 免费播放片色情A片| 免费黄色小视频在线观看| 天天肏夜夜肏| 揉BBB搡BBB搡BBB| 蜜桃av秘无码一区二区三区| 免费观看黄色网| 水蜜桃视频在线播放| 口爆在线观看| 超碰极品| 翔田千里无码精品| 日韩精品一级| 麻豆视频在线播放| 国产中文字幕视频| 免费无码国产在线55| 久久久久无码精品亚洲日韩| 成人一区二区在线观看| 久久精品美臀| 熟女18p| 特级西西人体www高清大胆| 91日韩在线| 精品免费在线观看| 人人爱人人干人人操| 亚洲日韩电影| 91精品内射| 涩涩视频成人| www.91av| 九九色| 激情五月天综合网| 操逼网址| 中文字幕+乱码+中文字幕在线| 无码国产av| 亚洲成人少妇老妇a视频在线| 久久久国产一区| 国产A√| 亚洲无码手机在线观看| 麻豆蜜桃91无码| 黄色大片在线免费观看| 青青草原网站在线观看| 苍井空在线播放| 中文字幕偷拍| 国产亚洲精品午夜福利巨大软件| 亚洲天堂在线视频| 精品一区二区久久久久久久网站| 无码人妻av一区| 欧美亚洲视频| 无码人妻精品一区| 岛国无码AV在线观看| 日韩欧美不卡| 国产对白视频| 久久久三级片| 精品乱子伦一区二区三区免费播放| 蜜桃传媒在线播放| 亚洲成人网站视频| 人妻互换一二三区免费| 日韩高清无码三级片| 无码中文综合成熟精品AV电影| 一级久久| 久久99久久99精品免视看婷婷 | 青青草原网站在线观看| 自慰一区| 亚洲午夜视频| 大香蕉操| 欧美成年人视频| 日本黄色大全| 在线观看高清无码| 亚洲第1页| 久久国产一区| 国产精品久久久久野外| 国产一a毛一a免费观看| 国产AV无码影院| 乱伦精品| 琪琪色在线视频| 黄色电影视频在线| 日韩二| 乱伦三区| 超碰成人97| 人妻少妇被猛烈进入中文字幕| 香蕉伊人在线| 日韩AV一级| AV-ThePorn| 青青草原av| 亚洲永久视频| 高清无码在线视频观看| 午夜AV免费| 一级A片在线观看| 国产成人三级片在线观看| www.中文字幕| 亚洲国产精品久久久| 草草视频在线观看| 国产激情网址| 快播激情小说| 激情91| 精品视频免费| 中文字幕免费AV| 91久久精品一区二区三区| 亚洲天堂视频在线观看| 国产—a毛—a毛A免费| 日韩中文字幕无码中字字幕| 最近中文字幕中文翻译歌词| 日本黄色视频官网| 中文字幕+乱码+中文乱码91 | 99久久久| 在线免费观看一区| 欧洲黄网| 日韩AV免费在线观看| 国产乱子伦视频国产印度| 女人18片毛片90分钟免费明星 | 丁香婷婷色五月激情综合三级三级片欧美日韩国 | av大片在线观看| 美日韩毛片| 张柏芝BBw搡BBBB槡BBBBHDfree | 日本成人无码| 鸡巴操骚逼视频| 日本成人不卡| 大香蕉福利视频导航| 99热亚洲| 成人免费在线| 亚洲激情欧美| 国产熟女在线| 麻豆传媒一区| 久久久久久国际四虎免费精品视频 | 高清无码网站在线观看| 亚洲第一色在线| 91人妻无码| 日韩午夜福利视频| 特级西西444www大胆高清图片 | 乱子伦一区二区三区视频在线观看 | 国产免费A片| 亚洲三级视频在线观看| 四虎在线免费视频| 在线观看黄片网站| 青青av| 无码乱伦视频| 激情五月婷婷五月| 99久久婷婷国产综合精品| 欧美操大逼| 亚洲精品视频在线观看网站| 日韩电影无码| www.五月天.con| 做爱视频91| 中文字幕乱伦日本| 人妖黄片| 色综合色综合| 热久久精品| 91精品人妻少妇无码影院| 国产一级AV免费观看| 免费的黄色视频网站| 插穴网| 暗呦罗莉精品一区二区| 俺也操| 天天看天天射| 五月天啪啪| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 无码人妻丰满熟妇区17水蜜桃 | 国产一毛a一毛a在线观看| 你懂的在线视频| 中文字幕在线日韩| 欧美大香蕉在线视频| 豆花视频免费观看| 高清中文字幕在线A片| 亚洲欧美在线成人| 青草影视久久| 91狠狠综合| 人人操免费| 欧美插逼视频| 只有精品| 超碰在线天天| 久久五月天综合| 欧美精品欧美精品系列| 日本三级片网站在线观看| 欧美A区| 二区三区免费视频| 蜜臀久久久99久久久久久久| 国产白丝精品91爽爽久久| 亚洲伊人影院| 黑人精品XXX一区一二区| 夜夜躁狠狠躁| 波多野结衣高清av久久直播免| 2025中文在线观看最好看的电影 | 日韩AV资源网| 人人操人人看人人干| 91久久久裸身美女| 久久精品99视频| 五月色婷婷撸| 亚洲福利| 91天天综合| 色猫AV| 国产精品一区二区视频| 亚洲无码在线免费观看视频| 日皮视频免费看| 狠狠视频| 中文三级片| 一本之道高清数码大全| 日韩AV网站在线观看| 精品乱子伦一区二区三区下载| 日韩一级一级一级| 秋霞一区二区三区无码| 超碰人人在线| 中文字幕第4页| 免费看黄色大片| 婷婷久久综合久色综| 人妻少妇无码视频| 黄骗免费网站| AA久久| 亚洲AA| 91香蕉在线视频| 丁香啪啪| 国产麻豆一区二区三区| 99热国品| 国产综合久久久777777色胡同| 色噜噜狠狠一区二区三区| 天天日天天干天天爽| 北条麻妃二区三区| 亚洲综合伊人无码| 日韩欧美中文字幕在线观看| 激情性爱五月天| 操一操影院| 91绿帽人妻-ThePorn| 91人妻精| 亚洲艹逼| 99热精品在线播放| 爱视频福利| 日韩一级一级| 亚洲免费观看视频| 中文无码AV| 日韩a| 大鸡巴网站| 國產美女AV操逼網站| 香蕉婷婷亚洲丁香| 老司机AV91| 日本操鸡小视频| 吴梦梦一区二区三区| 国产乱伦精品视频| 一道本无码免费视频| 国产免费高清无码| 国产又粗又猛又黄又爽无遮挡| 成人无码www在线看免费| 婷婷五月天电影| 色情五月| 大香蕉伊人视频| 亚洲无码在线免费观看| 中文字幕av在线播放| 国产无码一区| 九九热精品| 国产一级片| 日日夜夜爽歪歪| 成人喷水亚洲一区无码| 一区二区三区在线播放| 免费看黄片网站| 日本高清视频九区| 骚妇p| 成人AV在线一区二区| 欧美性猛交XXXX乱大交| 亚洲国产区| 无码毛片在线观看| 国产亚洲欧美日韩高清| 一起操影院| jlzz18| 中文无码人妻少妇| 天天视频狠狠狠狠| 亚洲最新无码视频| 日本黄色大片网站| 老汉av| 日本黄色电影在线观看| 欧美AⅤ在线| 日本熟妇高潮BBwBBwBBw| 久久免费视屏| 91人妻无码精品一区二区| 成人AV免费在线观看| 男人先锋| 免费av在线| 奇米四色秒播| 国产女人18毛片水真多18| 欧美一区二区三区成人| 人成在线视频| 午夜福利100理论片| 99久久精品国产一区二区成人| 俺也去在线| 成人三级片在线| 国产成人一区二区三区| 91麻豆精品| 色天堂色天使| 噜噜噜网| 欧美日逼| 国产香蕉视频| 日日免费视频| 亚洲最新在线视频| 51国产视频| 天天爱av| 日本免费在线视频| 粉嫩小泬BBBB免费看-百度| 国产操逼视频网站| 久久无码一区二区三区| 一级免费视频| 免费看黄片网站| 伊人久久大综合中文无码| 污污的网站18| 黄色自拍视频| 东京热av一区二区| 99精品视频网站| 精品无码人妻一区二区三区| 西西人体大胆裸体A片| 高潮无码视频| 天天干天天操天天干| 国产一级内射| 午夜精品18码视频国产17c| 岛国av无码免费| 无套内射在线播放| 91在线无码精品秘网站| YOUjiZZ欧美大全| 少妇搡BBBB搡BBB搡小说| 久久婷婷五月综合伊人| 囯产精品久久久久久久| 国产56页| 狼人综合网| 亚洲wwwwww| 毛片a级| 天堂网久久| 国产午夜成人| h片在线| 午夜福利不卡视频| 蝌蚪窝免费在线视频| 亚洲无码中文字幕在线| 日韩高清无码片| 成人无码区免费| 蜜臀色欲AV无码人妻| 亚洲草比视频网| 乱伦AV网| 一插菊花综合视频| 无套免费视频欧美| 国产免费AV在线| 五月天网址| 欧美三级免费| av网站在线播放| 99在线国产| a免费在线观看| 欧美操人| 乱伦视频网站| 国产亚洲AV| 国产一级a毛一级a做免费的视频| 99精品视频在线免费观看| 国产精品久久久久久久久久久久久久久 | 一级国产黄色视频| 久久免费9| 精品国产毛片| 色骚综合| 一道本无码在线| 人人操人| 久久Av电影| www.jiujiujiu| 三级黄色视频在线观看| 久久久亚洲无码精品| 三级片中文字幕| 国产成人综合自拍| 欧一美一婬一伦一区二区三区自慰国 | 东京热高清无码| 青青操首页| 国产成人免费视频| 中文原创麻豆传媒md0052| 日韩精品无码AV| 久久久久无码精品国产91福利 | 久久xx| 五月天婷婷乱伦| 日本亚洲视频| 亚洲成人性爱视频| 97精品在线| 99视频精品| 五月天四房播播| 人人澡视频| 影音先锋资源站| 国产高清无码在线观看| 欧美干综合| 欧美三级理论片| 波多野在线视频| 免费爱爱视频| 色丁香在线| 无码福利视频| 欧一美一婬一伦一区二区三区黑人 | 3DAV一区二区三区动漫| 北条麻妃在线一区二区| 精品人妻午夜一区二区三区四区 | 国产精品美女毛片j酒店| 97人妻精品一区二区三区视频| 性久久久久| 黄色自拍视频| 青青色综合| 熟女乱论| 午夜黄色| 91视频黄| 日韩精品成人片| 天堂成人在线| 99热9| 大香蕉青青| 无码欧美成人| 农村一级婬片A片AAA毛片古装 | 亚洲一级在线观看| 国产在线欧美在线| 亚洲天堂三级片| 美腿丝袜中文字幕精品| 在线观看高清无码视频| 麻豆午夜福利| 黄片高清无码在线观看| 少妇白洁在线观看| AV资源在线| 午夜无码免费| 大香蕉尹人在线观看| 91婷婷五月天| 安徽少妇搡bbw搡bbbb| 亚洲色涩| 日本伊人大香蕉| 国产激情久久| 黃色毛片A片AAAA级20| 熟女中文| 婷婷丁香激情五月天| 一区二区Av| 国产高潮又爽又无遮挡又免费| 最新国产在线| 国产精品视频免费观看| 日韩日逼网站| 欧美性BBB槡BBB槡BBB| 小h片在线观看| 欧美爱爱试看| 精品久久一区二区三区四区| 午夜影音| 美女久草| 91亚洲精品国偷拍自产在线观看| 亚洲精品乱码久久久久久蜜桃91| 丝袜制服中文字幕无码专区| 日韩激情一区二区| 亚洲AV无码乱码国产精品蜜芽 | 在线日韩视频| 久久日韩无码| 无码精品人妻| 99久久婷婷国产综合精品草原| 亚洲wwwwww| 蝌蚪久久| 黄色免费大片| 黄色成人视频网站| 亚洲自拍中文字幕| 黄网在线免费观看| 中文字幕视频在线直播| 草逼视频网站| 蜜芽无码| 无码国产传媒精品一区| 黄色视频在线免费观看网站| 亚洲免费在线视频观看| 大地8免费高清视频观看大全| www久久99| 三级黄色视频| 五月亭亭在线视频| 欧美后门菊门交3p| 国产精品9| 91精品久久久久久综合五月天 | 翔田千里在线一区二区三区| 精品无码人妻一区二区媚黑| 欧美日韩无码| 色伊人久操视频| 国产精品综合| 亚州AV无码| 欧美特黄AAA| 日韩人妻丝袜中文字幕| 欧一美一婬一伦一区| 台湾色综合| 精品国产污污免费网站入口| 91在线视频观看| 国产免费av网站| 亚洲AV无码一区| 亚洲精品无码永久|