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

前端 api 請(qǐng)求緩存方案

共 8486字,需瀏覽 17分鐘

 ·

2020-11-10 18:01

(給前端大學(xué)加星標(biāo),提升前端技能.

作者:wsafight

https://github.com/wsafight/personBlog/issues/2

在開(kāi)發(fā) web 應(yīng)用程序時(shí),性能都是必不可少的話題。對(duì)于webpack打包的單頁(yè)面應(yīng)用程序而言,我們可以采用很多方式來(lái)對(duì)性能進(jìn)行優(yōu)化,比方說(shuō) tree-shaking、模塊懶加載、利用 extrens 網(wǎng)絡(luò)cdn 加速這些常規(guī)的優(yōu)化。
甚至在vue-cli 項(xiàng)目中我們可以使用 --modern 指令生成新舊兩份瀏覽器代碼來(lái)對(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) { // 沒(méi)有數(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ù)來(lái)進(jìn)行學(xué)習(xí)或者鞏固知識(shí)。

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

調(diào)用方式:

getWares().then( ... )// 第二次調(diào)用 取得先前的datagetWares().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ù)源框架,這樣的問(wèn)題不太會(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緩存中沒(méi)有 該promise if (!promise) { promise = request.get('/getWares').then(res => { // 對(duì)res 進(jìn)行操作 ... }).catch(error => { // 在請(qǐng)求回來(lái)后,如果出現(xiàn)問(wèn)題,把promise從cache中刪除 以避免第二次請(qǐng)求繼續(xù)出錯(cuò)S promiseCache.delete(key) return Promise.reject(error) }) } // 返回promise return promise}

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

調(diào)用方式:

getWares().then( ... )// 第二次調(diào)用 取得先前的promisegetWares().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ù),無(wú)論是字符串還是數(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)求回來(lái)后,如果出現(xiàn)問(wè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ù)組來(lái)返回?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)問(wèn)題而發(fā)生錯(cuò)誤。

調(diào)用方式:

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

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

往往緩存是有危害的,如果我們?cè)谥佬薷牧藬?shù)據(jù)的情況下,直接把 cache 刪除即可,此時(shí)我們調(diào)用方法就可以向服務(wù)器進(jìn)行請(qǐng)求。

這樣我們規(guī)避了前端顯示舊的的數(shù)據(jù)。但是我們可能一段時(shí)間沒(méi)有對(duì)數(shù)據(jù)進(jìn)行操作,那么此時(shí)舊的數(shù)據(jù)就一直存在,那么我們最好規(guī)定個(gè)時(shí)間來(lái)去除數(shù)據(jù)。

該方案是采用了 類 持久化數(shù)據(jù)來(lái)做數(shù)據(jù)緩存,同時(shí)添加了過(guò)期時(shí)長(zhǎng)數(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來(lái)作為緩存池    static cacheMap =  new Map()
// 數(shù)據(jù)是否超時(shí) static isOverTime(name) { const data = ExpriesCache.cacheMap.get(name)
// 沒(méi)有數(shù)據(jù) 一定超時(shí) if (!data) return true
// 獲取系統(tǒng)當(dāng)前時(shí)間戳 const currentTime = (new Date()).getTime()
// 獲取當(dāng)前時(shí)間與存儲(chǔ)時(shí)間的過(guò)去的秒數(shù) const overTime = (currentTime - data.cacheTime) / 1000
// 如果過(guò)去的秒數(shù)大于當(dāng)前的超時(shí)時(shí)間,也返回null讓其去服務(wù)端取數(shù)據(jù) if (Math.abs(overTime) > data.timeout) { // 此代碼可以沒(méi)有,不會(huì)出現(xiàn)問(wè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,但是沒(méi)有超時(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}

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

調(diào)用方式:

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

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

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

// 生成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無(wú)法生成,直接請(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)求回來(lái)后,如果出現(xiàn)問(wè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ì)使用 類來(lái)對(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ù)提升,所以沒(méi)有辦法利用函數(shù)來(lái)做 修飾器?
例如:

var counter = 0;
var add = function () { counter++;};
@addfunction foo() {}

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

@addfunction foo() {}
var counter;var add;
counter = 0;
add = function () { counter++;};

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

調(diào)用方式

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

總結(jié)

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

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

??愛(ài)心三連擊

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

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 中文字幕中文字幕无码| 国产熟女乱伦视频| 六月丁香婷| 揉BBB搡BBB搡BBB| 中文字幕的色| 青娱乐偷拍| 男人的天堂视频网站| 中文无码高清视频| 噜噜色av| 日韩中文字幕在线观看| 久草免费在线视频| 欧美日韩国产在线播放| 日本天堂在线视频| 日韩精品免费一区二区在线观看| 亚洲无码人妻| 亚洲天堂免费| 91免费在线看| 91超碰在线播放| A级黄色毛片| 丁香五月激情中文字幕| 免费福利在线观看| 加勒比精品在线| 狠狠干网站| 欧美激情视频一区| 怡春院日韩| 亚洲网站在线观看| 白浆av| 久久XXX| 青青草原成人视频| 国产精品中文字幕在线观看| 91在线看18| 免费一级片| 河南少妇搡BBBB搡BBBB| 午夜无码精品一区二区三区99午| 激情五月天黄色| AV大片在线观看| 一级aa视频| 精品欧美片在线观看步骤| 综合网伊人| 五月婷在线| 亚洲免费黄色视频| 自拍视频一区| 久久永久免费| 成人综合大香蕉| 性毛片| 蕉久中文字慕| 91综合娱乐| 九色PORNY国产成人| 无码日韩视频| 国产精品揄拍100视频| 91亚洲国产精品| 尤物视频入口| 中国最大成人网站| 成人做爱免费网站| 人人爱人人摸| 久色伊人| 亚洲欧美另类在线| 日韩精品视频一区二区| 中文字幕在线视频免费观看| 亚洲精品中文字幕成人片| 黄色av免费网站| 国产真人无码| 婷婷色大师| 一级操逼视频免费观看| 亚洲视频偷拍| 国产高潮视频| 色婷婷在线免费视频| 足交在线播放| 天天插天天插| 亚洲天堂2016| 亚洲欧美国产视频| 在线观看免费完整版中文字幕视频 | 色色无码| 三级成人av| 色婷婷AV一区二区三区之e本道| 久久精品一区| 99视频在线精品| 欧美日本亚洲| 亚洲伊人在线| 麻豆国产91在线播放| 国产欧美综合在线三区| 成人性爱视频在线播放| 伊人网成人| 人妻爽爽| 精品不卡| 欧美+日韩+国产+成人+在线| 成人特级毛片全部免费播放| 在线看一区二区三区| 翔田AV无码秘三区| 91麻豆精品在线| 亚洲精品久久久久久久久久久| 亚洲AV无码一区二区三竹菊| 女同久久另类99精品国产91| 日韩无码中文字幕| 狠狠狠狠狠狠狠狠狠| 91白浆| 久久婷婷在线| 夜夜骚精品人妻av一区| 精品无码一区二区Av蜜桃| 五月天黄色视频| 影音先锋男人资源网| 久久国产无码| 91av一区| 免费视频一区| 超碰在线人人| 秋霞一区二区三区无码| 无码日韩人妻精品久久蜜桃| a片在线免费观看| 二区三区免费| 国产午夜福利在线| 影音先锋色资源站| 香蕉三级片| 日韩精品一| 人人妻人人爽人人精品| 国精品无码A区一区二区| 91爱爱视频| 人成在线视频| 青青草手机视频| 亚洲秘无码一区二区三区电影| 亚洲欧美一区二区三区在线| 在线不卡无码| 97人人草| 日日摸日日添日日躁AV| 黄色91| 在线播放91灌醉迷J高跟美女 | 欧美日韩中文| 亚洲中文字幕无码爆乳av| 久久久成人免费电影| 免费无码婬片AAAAA片| 青春草在线观看视频| 嫩BBB搡BBBB搡BBBB-百度| 国产中文在线| 亚洲自拍小说| 亚洲中文字幕av天堂| AV无码中文| 老妇bbw| 三上悠亚无码破解69XXX| 丁香五月天婷婷久久| 国产成人精品免高潮在线人与禽一 | 黃色毛片A片AAAA级20| 特级特黄AAAAAAAA片| 亚洲AV无码久久寂寞少妇多毛 | 婷婷深爱五月丁香网| 91丨PORNY丨丰满人妻网站| 91白丝在线观看| 国产伊人大香蕉| 日本AⅤ| 四虎永久在线精品无码| 亚洲精品人人| 亚洲欧美日本在线| 在线免费观看黄色| 亚洲一区二区AV| 黄色成人视频网站在线观看| 水蜜桃网址| 国产精品无码在线播放| 国产三级国产三级国产普通话| 七十路の高齢熟妇无码| 国产香蕉视频在线播放| 九九草影院| 久草超碰在线| 成人免费精品视频| 欧美亚洲综合在线观看| 免费一级黄色视频| 国产美女在线观看| 超碰自拍私拍二区三区区| 91精品国产麻豆国产自产在线| 精品91在线视频| 天天干天天爽| a在线观看视频| 亚洲热视频在线观看| 成人AV在线看| 黄片福利| 亚洲码无| 国产欧美日韩综合在线视频| 狠狠干| 欧美性爱福利| 成人亚洲综合| 婷婷色777777| 无码视频在线观看免费| 九九自拍视频| 无码人妻一区二区三区三| 婷婷激情五月| 好吊看视频| 97在线精品| 色婷婷综合视频| 久久高清免费视频| 一区二区免费看| 一级在线播放| 中文字幕乱码在线| 91性爱嫩逼视频| 操b视频网站| 国产综合久久久7777777 | 国产精品国内自产拍| 91成人视频18| 亚洲a网| 后入av| 国产精品操逼网站| 女神思瑞精品一区二区三区| 久久99精品久久久久久| 亚洲有码在线观看| 国产精品乱伦片| 五月天亚洲激情| 一级片在线| 国产AV一区二区三区四区| 51精品日本| 天天日天天综合| 精品人妻中文字幕视频| 色婷婷丁香五月| 日韩无码一级片| 欧美女人操逼| 精品欧美乱码久久久久久| 欧美日韩一区视频| 中文字幕无码一区二区三区一本久| 麻豆蜜桃wwww精品无码| 麻豆三级电影| 亚洲高清视频在线| 67194熟女| A国产| 欧美人操逼视频| 中文在线A∨在线| 欧美激情xxx| www.天天射视频| 日韩一区二区三区在线观看| 亚洲理论片| 欧一美一婬一伦一区二区三区黑人| 欧美日韩一级A片| 国产日韩一区二区三区| 3p视频网站| 夜夜嗨AV一区二区三区啊| 久久久久久无码日韩欧美电影| 伊人网在线观看| 成人三级片网站| 日韩黄页网站| 黄色成人视频在线免费观看| 国产小电影在线| 午夜福利影视| 欧美亚洲自拍偷拍| 成人福利视频在线观看| 丰滿人妻-区二区三区| 国产黄色Av| AAA亚洲| 操逼网视频| 操一炮在线视频| 四虎精品| 狠狠撸在线| 水蜜桃一区| 色诱av| 怡春院av| 嫩草在线视频| 99热免费观看| 亚洲操操| 亚洲小说欧美激情另类A片小说| 日本欧美在线播放中文| 色亭亭影院| 免费在线观看AV片| 欧美三级视频在线| 120分钟婬片免费看| 超碰自拍| jizz亚洲| 黄色三级网站| 天天爱天天操| 亚洲第一区欧美日韩| 欧美色视频在线观| 色老板在线视频| 三级电影久久麻豆| 翔田千里无码流出两部| 夜夜骚| 在线免费小黄片| 巨爆乳肉感一区二区三区视频| 亚洲AAA电影| 亚洲AAA电影| 性爱xxxxx| 足交在线播放| www.啪啪啪| 久久久久久久免费无码| 日本在线网站| 蜜臀av在线播放| 男人天堂大香蕉| 玖玖资源站中文字幕| 亚洲人成免费| 狠狠天天| 极品一区| 99爱视频| 色色色色色欧美网| 内射学生妹J亅| 丁香六月婷| 亚洲AV人人夜夜澡人人| 国产美女精品视频| 四虎影院在线| 国产日韩欧美一区二区| 操逼视频在线看| 天天射日日干| 内射视频网站| 黄色插逼视频| 国产天堂av| 国产1级a毛a毛1级a毛1级| 欧美视频一| 欧美特黄一级视频| 偷拍精品视频| 国产精品成人在线| 亚洲黄色免费在线观看| 麻豆精品| 农村新婚夜一级A片| 成人做爰100部片视频| 亚洲AV综合色区无码国产播放| 水蜜桃视频网站在线观看| 国产一区二区三区四区五区六区七区| 鲁一鲁在线视频| 青青色视频| 久久国产精品一区二区三区| 天天操天天插| 欧美黄片在线| 操屄视频播放| 日本亚洲精品秘入口A片| 国产ts在线观看| 欧美一级婬片AAAAAA片| 在线免费看AV| 亚洲国产成人精品女人| 久久夜色精品噜噜亚洲AV| 亚洲欧美高清视频| av福利在线| 无码中文字幕在线视频| 不卡av在线| 午夜小电影| 精品伊人大香蕉| 逼逼AV| 午夜69成人做爱视频网站| 人人澡人人爽人人精品| AA片在线观看视频在线播放| 在线高清无码不卡| 在线a视频免费观看| 国产毛片毛片| 五月婷婷一区| 成人在线网站| 国产免费AV片在线无码| 国产日本在线观看| 国产一级婬片A片免费无成人黑豆| 天天日天天插| 女人自慰网站在线观看| 高清无码不卡视频| 国产男女AV| 91婷婷五月天| 最新精品视频| 国产内射久久| 操操色| 日韩久久网| 性饥渴欧美老妇XXXXX| 成人自拍视频在线| 黄色一及片| 99热综合| av在线观看网站| 成人午夜福利高清视频| 亚洲欧美成人电影| 欧美亚洲中文| 操逼视频免费| 人人爱人人干人人操| 大香蕉伊人综合网| 色日韩| 久久人妻视频| 在线观看内射视频| 小處女末发育嫩苞AV| 国产高清毛片| 精品黄色视频| 青青草大香蕉| 国产一毛a一毛a在线观看| 97精品欧美91久久久久久久| 国产成人无码一区二区在线| 在线免费高清无码| 久久久久97| 玖玖资源在线| 日韩wuma| 在线免费看A片| 日韩欧美中文| 刘玥一级婬片A片AAA| 中文字幕第2页| 欧美精品A级片| 免费看黄色视频的网站| 伊人久色| 久久久精品国产视频| 欧美在线色| 91人人爽| 日韩精品极品视频在线观看免费| 黄片视频在线免费观看| AV无码国产| av东方在线| 特级西西人体大胆无码| 狼友视频免费观看| 成人午夜av| 狠狠干综合| 欧美69成人| 亚洲色婷婷综合| 黄色激情AV| 免费在线黄色视频| 狠狠干狠狠操| 国产一区一区| 色男人色天堂| 成人黄色AV网站| 国产草逼视频| 无码国精品一区二区免费蜜桃| 日韩欧美第一页| 成人精品| 麻豆一区在线观看| 91亚洲国产| 亚洲日韩字幕| www欧美| 日逼老女人| 欧美第一区| 能看的黄色视频| 一级片久久| 午夜五月天| 亚洲成人影片在线观看| 蜜桃精品在线| 久久久久亚洲AV无码专区| 成人激情五月天| 无码一区二区av| 久久做爱视频| 中文字幕播放| caopor在线| 黄色成人视频网站在线观看| 久久国产高清| 逼特逼视频网站| 亚洲色图另类| 亚洲第一成人网站| 美女操逼图| 久久三级片| 性爱一级| 男女网站在线观看| 激情内射网站| 天堂素人约啪| 老湿机福利视频| 中国少妇xxx| 性满足BBWBBWBBW| 先锋资源男人站| 内射国产| 亚洲丝袜av| 日韩免费视频在线观看| 日本三级片网址| 少妇一区二区三区| 伊人日逼| 久久久国产精品视频| 精品视频999| 无码免费视频| 99Re66精品免费视频| 大香蕉人妻| av无码一区二区| av福利电影在线| 欧美V∧| 久久久少妇| 97激情| 大香蕉免费| 91中文字幕| 欧美一级在线免费观看| 性爱视频91| 中文字幕精品在线观看| 97超碰中文字幕| 中文字幕国产| 日本视频一区二区三区| 狠狠se| 国产乱子伦真实精品| 91狠狠色丁香婷婷综合久久精品 | 人人色人人操人人干| 日韩性网| 大香蕉精品视频在线| 青草五月天| 国产精品欧美一区二区三区苍井空 | 国产欧美在线免费观看| 日韩成人无码视频| 日韩特一级| 久草大香蕉在线视频| 大香伊人| 黄色电影a片| 一级免费爱爱视频| 欧美福利导航| 日本综合视频| 影音先锋三级资源| 日本一区二区三区在线视频| 久久中文字幕视频| 久久成人久久| 91精品一区二区| 欧美亚洲自拍偷拍| 91在线无码精品入口电车| 99免费视频在线观看| 成人黄色视频免费| 久久久精品一区| 亚洲中文字幕一区| 国内免费AV| 日批网站在线| 精品无码久久久久久久久app| 四虎AV| 国产又猛又黄又爽| 伊人色色色| www.欧美日韩| 小黄片免费在线观看| 72成人网| 欧美色图网址| av免费网站| 中文字幕人成人乱码亚洲电影| 成人网站在线看。| av一二三区| 亚洲色情网站| 加勒比精品在线| 桃花岛tⅴ+亚洲品质| 中文无码字幕视频| 成年人毛片| 亚洲国产精品成人久久蜜臀| 日本免费黄| 9久精品| 午夜无码在线观看视频| 性色网| 先锋成人AV| 俺来也听听婷婷| 一区二区三区四区日韩| 日韩A| AV在线无码| 欧美高清视频| 日本欧美一区二区三区| 久久人人网| 精品操逼| 四虎精品成人无码A片| 熟女国产| 日本中文字幕在线观看视频| 插菊花综合网亚洲| 日韩人妻精品中文字幕免费| 超碰啪啪| 超碰在线网站| 久久精品女同亚洲女同13| 中文字幕一区三区人妻视频| 木下凛凛子AV888AV在线观看 | 亚洲午夜视频在线观看| 美女乱伦| 视频二区| 成人一区视频| 息子交尾一区二区三区| 在线成人视频网站大香蕉在线网站 | 久久99深爱久久99精品| 福利视频二区| 人妻黄色视频| 成人免费A片在线观看直播96| 日韩欧美中文在线观看| 久久午夜无码鲁片午夜精品男男| 成人无码专区| 久热精品在线观看| 99热热久久| 亚洲欧美日韩高清| 久热亚洲| 加勒比无码视频| 午夜性爱网址| 超碰日日夜夜| 97中文在线| 少妇被躁到高潮无码| 欧美操比视频| 伊人99热| 婷婷五月精品中文字幕| 2025AV天堂| 天天日天天添| 高潮AV在线观看| 伊人精品A片一区二区三区| 黄色A片免费视频| 亚洲高清无码中字| 91就去干| 三级AV在线免费观看| 亚洲性爱在线| 亚洲一区二区在线| 五月丁香婷婷综合| 人人摸人人射| 天天操免费视频| 婷婷丁香五月综合| 色婷婷在线无码精品秘人口传媒| 婷婷国产精品| 国产亚洲三级| 欧美黄色片网站| 翔田千里91| 无码秘蜜桃吴梦梦| 高清无码不卡在线观看| 超碰一区二区三区| 999热视频| 国产成人AV一区二区三区在线观看| 大香煮伊在75| 特一级黄色电影| 思思热精品在线| 欧美日本一区二区三区| 成年人性生活免费视频| 人妻北条麻妃在线| 日本午夜影院| 日韩中文字幕区| 欧美成人免费精品| 91久久久久久久久| 午夜一区二区三区免费| 亚洲精品无码中文| 色男人的天堂网| 五月婷婷成人| 日韩免费高清无码视频| 999这里只有精品| 操b视频在线播放| 日韩少妇无码| 自拍超碰在线| 抽插免费视频| 成人三级毛片| 欧美一级网站| 亚洲色欧美| 伊人色五月| caoporen| 国产日韩性爱视频| 精品无码二区| 福利所导航| 熟妇偷拍| 国产中文字幕第一页| 大香蕉综合久久| 欧美激情视频一区二区| 中文字幕第10页| 91在线免费视频观看| 免费在线看a| 丁香激情网| 国产熟妇码视频黑料| AV三级无码| 午夜H片| 2021国产精品视频| 久久H| 一级成人毛片| 国产看片网站| 天天干B| 精品午夜福利| 白浆av| 免费黄色成人网站| 国产在线| 亚洲成人视频在线播放| 撸一撸av| 免费看黄在线看| 国产熟妇毛多久久久久一区| 99久视频| 婷婷五月丁香五月| 日韩高清无码免费看| 免费观看A级毛片| 亚洲人成人无码一区二区三区| 黄色片一区二区| 日韩无码性爱| 欧美第一页| 日韩中文字幕无码人妻| 亚洲一区高清无码| 中文字幕在线观看日本| 人人骚| 成人视频网站18| 狠狠撸狠狠撸| 猛男大粗猛爽H男人味| 波多野结衣一级婬片A片免费下载 囯产精品久久久久久久久免费无码 | 色欲久久久| 成人无码交配视频国产网站| 怡红院AV| 污视频在线观看免费| 人人操狠狠操| 色综合天天综合成人网| 免费看黃色AAAAAA片| 亚洲欧美大香蕉视频网| 精品一区二| 三级中文无码| 人人干人人操人人摸| 亚洲A∨| 日韩AV免费网站| 国产一区二三区| 91资源超碰| 91狠狠综合| 性欧美一区二区| a无码视频在线观看| 一级A片免费视频| 北条麻妃无码| 蜜乳av红桃嫩久久| 大香蕉网在线| 午夜香蕉视频| 国产无码自拍| 国产香蕉在线播放| 成人免费一区| 超碰人人操人人| 乱伦无码高清麻豆视频一区二区 | 美日韩在线观看| 亚洲欧洲日本在线| 高清无码波多野结衣| 日韩综合在线| 欧美日韩黄色极品| 亚洲污| 亚洲精品视频在线| 亚洲一区视频在线| 一级免费A片| 成人网在线观看| 人妖和人妖互交性XXXX视频| 丁香五月婷婷久久| 婷婷天堂站| 午夜人妻无码| 日韩欧美成人在线视频| 午夜性爱网| 一卡二卡久久| 人人香蕉| 中文在线视频| 自慰喷水在线观看| AV片在线免费观看| 中文字幕的色| 91看片看婬黄大片女跟女| 伊人久久电影| 做aAAAAA免费视频| 国产精品91在线| 亚洲天堂自拍| 强伦人妻一区二区三区视频| 九九九中文字幕| 日本三级片网站在线观看| 五月六月婷婷| 学生妹一级J人片内射视频| 91高清国产| 欧美黄色成人网站| 亚洲中字幕新| 日韩啪啪啪网站| 欧美成人小视频| 在线日韩国产| 黄色小视频免费观看| 国产日本在线视频| 青娱乐91视频| 蜜桃视频在线观看18| 91瑟瑟| 精品小视频| 五月天婷婷综合网| 特黄AV| 成人性爱视频免费在线观看| 西西4444WWW无码精品| 国产精品久久久久久亚洲毛片| 北条麻妃性爱视频| 一区二区三区精品| 色欲五月天| 日本无码一区二区三三| 91视频网站免费| 日韩电影一区| 乱伦激情视频| 激情五月综合网| 嫩BBB搡BBB搡BBB四川| 午夜免费视频1000| 久久A√一区二区| 在线观看免费A片| 毛片69| 黄色操逼| 性猛交╳XXX乱大交| 俺来操| 午夜午夜福利理论片在线播放| 亚欧成人网站| 青青草成人免费在线视频| 精品人妻一区二区三区在线视频不卡| 97精品视频| 日韩香蕉视频| 欧美性爱香蕉视频| 大香蕉中文网| 99极品视频| 日韩人妻斩| 人人爱人人爽人人操| 东京热av在线| 亚洲国产精品成人综合色在线婷婷 | 秋霞91| 操屄视频在线| 精品国产精品国产精品国产网站| 午夜神马福利| 91视频亚洲| 91小视频| 亚洲无码高清电影| 人人草人人摸人人看| 西西444WWW无码视频软件 | 韩国三级HD久久精品| 亚洲高清免费| 亚洲三级网| 成人免看一级a一片| 欧美一级黄色A片| 精品无码9| 拍拍视频| 在线观看成人18| 黄色福利网址| 黄色视频在线免费播放| 午夜性爱网址| 无码人妻一区二区三区免费九色| 欧美成人中文字幕在线| 久久欧洲成人精品无码区| 我想看操逼| 免费在线观看中文字幕| 婷婷色网站| 日韩中文字幕在线高清| 黄色福利视频| 亚洲A片V一区二区三区| 欧美成人精品一级| 久久人妻熟女中文字幕av蜜芽| 翔田千里91| 伊人性视频| 五月丁香欧美| 97国产资源| 天天色天天干天天| 一级免费黄片| 国产三级在线免费观看| 亚洲色婷婷五月| 中文字幕在线观看亚洲| 成人日皮视频| 中文字幕成人在线播放| 逼特逼在线观看| 欧美成人黄色小说| 久久综合大香蕉| 色色天堂成人电影| 国产欧美综合一区二区三区| 久久综合17p| 国产免费精彩视频| 日韩拍拍| 国产啊啊啊| 激情综合网五月| 18禁激韩| 中文字幕第一区| 无码av无码AV| 日本在线不卡视频| 一级性爱毛片| 张柏芝BBw搡BBBB槡BBBBHDfree| 91乱子伦国产乱子伦!| 草久精品| 中文字幕第27页| 午夜AV在线免费观看| 97在线观看免费| 蜜桃视频在线观看18| 久久精品国产AV| 亚洲无码专区视频| 91女人18片女毛片60分钟| 精品人妻一区二区三区含羞草| 91麻豆国产福利精品| 日本暖暖视频| 免费A网站| 91久久爽久久爽爽久久片| 欧美日韩中文在线视频| 成功精品影院| 国产精品18禁| 99精品久久| 久久久久久99| 伊人青青操| JiZZjiZZ亚洲成熟熟妇 | 人人操AV| 欧美大吊在线| 中文字幕乱伦视频| 99精品在线观看视频| 日韩人妻无码视频| 亚洲影音先锋资源| 婷婷婷色| 国产黄色三级| A∨无码免费| av无码av天天av天天爽| 日韩精品一区二区在线观看| 亚洲无码不卡| 国产一毛a一毛a在线观看| 婷婷婷色| 91在线无码精品秘| 免费一级无码婬片A片AAA毛片| 强行征服邻居人妻HD高清日本| 影音先锋av资源在线| 亚洲无码不卡| 大香蕉美女视频| 成年人免费视频在线观看| 国产视频99| 青青娱乐亚洲无| www.五月天.con| 福利在线播放| 成人做爰100片免费看| 日韩欧美高清无码| 亚洲精品成AV人片天堂无码| 日本操B| 成人久操| 中文在线观看免费视频| 日本黄网站| 人妻少妇被猛烈进入中文字幕| 另类性爱视频| 日韩午夜剧场| 国产在线观看欧美| 亚洲免费视频一区| 久热网| 日韩成人视屏| 黄色片无码| 中文无码在线视频| AV网站入口| 蜜桃av无码一区三区| 亚洲第一色网| 手机AV网站| 麻豆传媒免费观看| 天天干一干| 亚洲AV无码成人网站国产网站| 婷婷69| 日本一级黄色电影| 人妻无码蜜桃视频| 91AV一区二区| A片免费网站| 成人h网站在线观看| www俺来也com| www.97色色| 一本色道久久综合狠狠| 欧美日韩高清一区二区三区| 日本www色| 精品国产免费无码久久噜噜噜AV | 农村一级婬片A片| 秘亚洲国产精品成人网站| 91无码电影| 免费av毛片| 欧美操BB| 91蜜臀| 水蜜桃视频在线播放| 黄片午夜| 日本三级网址| 精品无码视频在线|