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

探索Node.js異步Hooks

開發(fā) 前端
你聽說過 Node.js 的`async hooks` [1]模塊嗎?如果沒有,那你應(yīng)該了解一下。

[[391346]]

 你聽說過 Node.js 的`async hooks` [1]模塊嗎?如果沒有,那你應(yīng)該了解一下。

盡管它是與 Node.js 9 一起發(fā)布的新特性,但是因?yàn)樵撃K仍處于測(cè)試階段,我并不建議將其用于生產(chǎn)環(huán)境,不過你仍然應(yīng)該對(duì)它有所了解。

簡(jiǎn)而言之,Node.js 中的異步掛鉤,具體來說是 async_hooks 模塊,提供了一個(gè)清晰易用的 API 去追蹤 Node.js 中的異步資源。

該 API 最簡(jiǎn)單的使用方式就是用 JS 中的 require import:

  1. const async_hooks = require('async_hooks'); 

我們?cè)谶@里討論的異步特性指的是Node.js創(chuàng)建的具有關(guān)聯(lián)回調(diào)的對(duì)象,與回調(diào)可能被調(diào)用多少次沒有關(guān)系。這就有很多種類了例如:Promises、創(chuàng)建服務(wù)的操作、超時(shí)等。

請(qǐng)記住,大多數(shù)語言都可以關(guān)閉資源。其中一些通過容器關(guān)閉,其他的則是通過語言本身關(guān)閉。所以你的回調(diào)函數(shù)可能自始至終都沒有被調(diào)用過。但是沒有關(guān)系,AsyncHook 不會(huì)區(qū)分這些不同的情況。

這篇文章的目的是為了更深入的探討hooks,并且嘗試通過一些示例幫助你更深入的理解。準(zhǔn)備好了嗎?

👋 在探索異步掛鉤時(shí),你可能還希望了解 AppSignal forNode.js[2]。我們?yōu)槟闾峁?duì)Node.js Core,Express,Next.js,Apollo Server,node-postgres和node-redis的現(xiàn)成支持[3]。

API使用

我總是覺得官方文檔過于復(fù)雜以及苛刻。這就是為什么我通常會(huì)選擇傳統(tǒng)、友好的博客文章。

讓我們首先了解一下Async Hooks API提供的 5 個(gè)可用事件函數(shù):

  •  init: 顧名思義,當(dāng)特定的異步資源初始化時(shí)會(huì)調(diào)用它。僅作記錄,此時(shí),我們已經(jīng)將鉤子與異步資源相關(guān)聯(lián)。
  •  before 和 after: 這與普通語言中的函數(shù)的執(zhí)行前和執(zhí)行后非常相似。在資源執(zhí)行之前和之后分別調(diào)用它們。
  •  destroy: 很明顯,無論資源的回調(diào)函數(shù)發(fā)生了什么,只要資源被銷毀就會(huì)調(diào)用它。
  •  promiseResolve: promiseResolve與Promise有關(guān),當(dāng)你的Promise調(diào)用它的 resolve 函數(shù)時(shí),掛鉤就會(huì)觸發(fā)此函數(shù)。

非常的簡(jiǎn)單直接,接下來讓我們看一個(gè)基本的例子:

  1. const myFirstAsyncHook = async_hooks.createHook({ init, before, after, destroy, promiseResolve }); 

是的,你必須先創(chuàng)建每個(gè)事件函數(shù),然后再將其分配給createHook函數(shù)。另外,必須顯式啟用該掛鉤:

  1. myFirstAsyncHook.enable(); 

讓我們繼續(xù)看一個(gè)更加完整的例子: 

  1. const fs = require("fs");  
  2. const async_hooks = require("async_hooks");  
  3. // Sync write to the console  
  4. const writeSomething = (phase, more) => {  
  5.    fs.writeSync(  
  6.       1,  
  7.       `Phase: "${phase}", Exec. Id: ${async_hooks.executionAsyncId()} ${  
  8.             more ? ", " + more : ""  
  9.         }\n`  
  10.    ); 
  11. };  
  12. // Create and enable the hook  
  13. const timeoutHook = async_hooks.createHook({  
  14.    init(asyncId, type, triggerAsyncId) {  
  15.       writeSomething(  
  16.          "Init",  
  17.          `asyncId: ${asyncId}, type: "${type}", triggerAsyncId: ${triggerAsyncId}` 
  18.       );  
  19.    },  
  20.    before(asyncId) {  
  21.       writeSomething("Before", `asyncId: ${asyncId}`);  
  22.    },  
  23.    destroy(asyncId) {  
  24.       writeSomething("Destroy", `asyncId: ${asyncId}`);  
  25.    },  
  26.    after(asyncId) {  
  27.       writeSomething("After", `asyncId: ${asyncId}`);  
  28.    },  
  29. });  
  30. timeoutHook.enable();  
  31. writeSomething("Before call");  
  32. // Set the timeout  
  33. setTimeout(() => {  
  34.    writeSomething("Exec. Timeout");  
  35. }, 1000); 

這個(gè)例子通過眾所周知的原生函數(shù) setTimeout 去追蹤超時(shí)的異步執(zhí)行過程。

在我們深入研究之前,先快速瀏覽一下第一個(gè)函數(shù) writeSomething 。你也許很好奇為什么在我們已經(jīng)有函數(shù)可以在控制臺(tái)輸出的情況下仍然創(chuàng)建了一個(gè)新的函數(shù)去完成相同的功能。

原因是你不能使用任何 console 函數(shù)去測(cè)試異步鉤子,因?yàn)樗鼈儽旧砭褪钱惒降摹R虼水?dāng)我們?cè)谙旅嫣峁┝艘粋€(gè) init 函數(shù)時(shí),它會(huì)產(chǎn)生一個(gè)無限循環(huán)。該函數(shù)會(huì)調(diào)用 console 的 log ,此日志又會(huì)再次觸發(fā)初始化,以此類推,陷入死循環(huán)。

這就是為什么我們需要重新寫一個(gè)“同步”日志功能。

好了,現(xiàn)在我們回過頭去看代碼。我們的異步鉤子提供了四個(gè)功能:init、 before、 after 以及 destory。而且,我們還在超時(shí)之前和執(zhí)行期間打印一條消息,所以你可以看到整個(gè)過程是如何線性進(jìn)行的。

在你的命令行執(zhí)行 node index.js,你會(huì)得到如下圖所示的結(jié)果:

觀察下鉤子是如何一步一步執(zhí)行追蹤的。看起來是一種很有趣的跟蹤方式,尤其是當(dāng)你考慮將數(shù)據(jù)輸入到監(jiān)視工具中或者是你已經(jīng)使用的日志追蹤工具。

一個(gè)Promise例子

讓我們看看我們的示例在Promise下的執(zhí)行效果。思考下面這些代碼片段: 

  1. const calcPow = async(n, exp) => {  
  2.    writeSomething("Exec. Promise");  
  3.    return Math.pow(n, exp);  
  4. };  
  5. (async() => {  
  6.    await calcPow(3, 4);  
  7. })(); 

你也可以用之前的 setTimeout 示例來替代這個(gè)例子。在這段代碼中,我們有一個(gè)異步函數(shù)用來進(jìn)行冪運(yùn)算。同時(shí)也有一個(gè)相同的函數(shù)在異步塊中被調(diào)用。到目前為止,Node.js創(chuàng)建了兩個(gè)Promise。

下圖是日志記錄的結(jié)果:

奇怪的是,我們有兩個(gè)Promise,卻調(diào)用了三次 init 函數(shù)。不用擔(dān)心,這是因?yàn)镹ode.js團(tuán)隊(duì)在版本12中引入了異步執(zhí)行性能方面的一些最新改進(jìn)。你可以點(diǎn)擊此處[4]了解更多信息。

盡管如此,執(zhí)行過程依然符合我們的預(yù)期。

解析:鉤子函數(shù)的性能與度量

Node.js提供的另一個(gè)非常有趣的API是性能評(píng)估API[5],既然我們?cè)谶@里討論度量,為什么不結(jié)合兩者的功能來了解我們可以收獲什么呢?

可以通過 perf_hooks 獲得該API,該API讓我們能夠用與W3C Web Performance API[6]相似的方式來獲得性能/用戶時(shí)間軸指標(biāo)。

將它與異步鉤子相結(jié)合我們可以做一些事情,比如追蹤異步函數(shù)執(zhí)行完畢需要的時(shí)間。讓我們看另外一個(gè)例子: 

  1. const async_hooks = require("async_hooks");  
  2. const {  
  3.    performance,  
  4.    PerformanceObserver  
  5. } = require("perf_hooks");  
  6. const hook = async_hooks.createHook({  
  7.    init(asyncId) {  
  8.       performance.mark(`init-${asyncId}`);  
  9.    },  
  10.    destroy(asyncId) {  
  11.       performance.mark(`destroy-${asyncId}`);  
  12.       performance.measure(  
  13.          `entry-${asyncId}`,  
  14.          `init-${asyncId}`,  
  15.          `destroy-${asyncId}`  
  16.       );  
  17.    },  
  18. });  
  19. hook.enable();  
  20. const observer = new PerformanceObserver((data) =>  
  21.    console.log(data.getEntries())  
  22. );  
  23. observer.observe({  
  24.    entryTypes: ["measure"],  
  25.    buffered: true  
  26. });  
  27. setTimeout(() => {  
  28.    console.log("I'm a timeout");  
  29. }, 1200); 

既然我們只是追蹤記錄執(zhí)行時(shí)間,就沒有必要用之前用的中間事件函數(shù)。用 init 和 destroy 就足夠了。

就像異步鉤子那樣,性能API通過創(chuàng)建觀察者來工作。不過,無論什么時(shí)候開始或者結(jié)束,你都必須明確標(biāo)記每個(gè)事件的id。這樣,當(dāng)我們調(diào)用API的 measure 函數(shù)時(shí),它將匯總收集到的數(shù)據(jù)并將其立即發(fā)送給觀察者,觀察者將為我們記錄全部的日志。

注意了,這里我們使用了兩次 console.log 函數(shù)。第一次是無影響的因?yàn)樗谟^察者中執(zhí)行。但是第二次它在 setTimeout 函數(shù)中執(zhí)行,另一個(gè)異步中的異步,這意味著在最后它會(huì)產(chǎn)生不同的輸出。

下圖是日志記錄:

本示例本并沒有考慮事件類型之間的差異。在這里,我們?cè)谕粶y(cè)量場(chǎng)景中發(fā)生了超時(shí)和異步日志操作。

但是,考慮到生產(chǎn)環(huán)境,建議你創(chuàng)建一個(gè)更強(qiáng)大的機(jī)制在每次調(diào)用 init 時(shí)存儲(chǔ)事件類型,并在稍后調(diào)用 destroy 函數(shù),倒霉的沒有接收到參數(shù)類型時(shí)檢查存儲(chǔ)是否依然存在。

異步資源

Async Hooks中的另一個(gè)有用功能是 `AsyncResource`[7] 類。每當(dāng)你為框架或庫(kù)創(chuàng)建自己的資源時(shí),它都會(huì)為你提供幫助。

只需輸入以下代碼即可使用: 

  1. const AsyncResource = require('async_hooks').AsyncResource; 

用這種方式,你可以使用它實(shí)例化一個(gè)新對(duì)象,并手動(dòng)定義其每個(gè)階段在整個(gè)代碼中何時(shí)開始。舉個(gè)例子: 

  1. const resource = new AsyncResource('MyOwnResource');  
  2. someFunction(function someCallback() {  
  3.    resource.emitBefore();  
  4.    // do your stuff...  
  5.    resource.emitAfter();  
  6. });  
  7. someOnClose() {  
  8.    resource.emitDestroy();  

這仍是資源生命周期的一個(gè)示例,如果要綁定本地的C++代碼,我們更建議使用它。我將為你提供官方文檔中的一個(gè)很好的例子[8]來簡(jiǎn)化它。

結(jié)論

就像我們討論的那樣,異步鉤子仍處于實(shí)驗(yàn)階段。因此,要謹(jǐn)慎使用它。

由于 hooks 僅在 Node.js 8 及更高版本中可用,因此你可以考慮遷移 Node.js 版本(很多時(shí)候這是不太合適的方法)或使用社區(qū)中的替代工具,例如 async-tracer[9]。 

 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2025-01-13 00:00:00

2021-01-26 08:07:44

Node.js模塊 Async

2020-12-08 06:28:47

Node.js異步迭代器

2021-08-12 01:00:29

NodejsAsync

2011-12-23 13:58:57

node.js

2021-12-01 00:05:03

Js應(yīng)用Ebpf

2021-03-04 23:12:57

Node.js異步迭代器開發(fā)

2022-03-20 06:40:31

Node.jsperf_hooks性能數(shù)據(jù)

2013-11-01 09:34:56

Node.js技術(shù)

2015-03-10 10:59:18

Node.js開發(fā)指南基礎(chǔ)介紹

2021-03-16 16:16:41

GeneratorWebsockets前端

2023-06-30 08:05:41

2021-09-07 07:53:43

工具

2011-11-01 10:30:36

Node.js

2011-09-08 13:46:14

node.js

2011-09-02 14:47:48

Node

2011-09-09 14:23:13

Node.js

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2021-12-25 22:29:57

Node.js 微任務(wù)處理事件循環(huán)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产亚洲一区二区三区在线播放 | 久久在线精品视频| 婷婷激情综合五月天| 91小视频xxxx网站在线| 成人性色生活片免费看爆迷你毛片| 欧美日韩999| 国产美女喷水视频| www.久久草.com| 婷婷一区二区三区| 亚洲在线视频一区二区| 天堂网av在线播放| 久久97超碰国产精品超碰| 欧美精品久久一区二区| 国产又粗又猛又爽又黄的视频小说| 一区二区三区免费在线看| 在线免费精品视频| 国产精品网站免费| 国产剧情在线| 久久精品亚洲乱码伦伦中文| yy111111少妇影院日韩夜片| 国产亚洲久一区二区| 在线精品在线| 蜜臀久久99精品久久久无需会员| x88av在线| 九色丨蝌蚪丨成人| 日韩欧美电影在线| gai在线观看免费高清| 极品美女一区| 午夜精品久久久久久久久| 美女黄色片网站| 东凛在线观看| 久久久蜜臀国产一区二区| 国产 高清 精品 在线 a| 91成人国产综合久久精品| 久久九九国产| 欧美在线一区二区视频| 久久久久99精品成人片毛片| 一区二区蜜桃| 成人激情视频网站| 亚洲影院污污.| 国产精品伦一区二区三区| 久久先锋影音| 日本高清久久天堂| 国产做受高潮漫动| 97精品国产一区二区三区| 在线色欧美三级视频| 蜜臀av一区二区三区有限公司| www.成人网| 亚洲精品在线三区| 丝袜熟女一区二区三区| 中文字幕一区二区三区中文字幕| 国产乱理伦片在线观看夜一区 | 无码人妻熟妇av又粗又大| 亚洲精品美女91| 午夜精品福利在线观看| 日韩久久久久久久久| 影音先锋久久| 国外成人在线直播| 亚洲精品国产精品乱码| 红桃视频在线观看一区二区| 日韩精品免费综合视频在线播放 | 一个色在线综合| 日本五级黄色片| 丰满诱人av在线播放| 久久99精品国产91久久来源| 亚洲国产精品一区二区久久| 精品久久久久久久久久久久久久久久久 | 中文在线字幕观看| 日韩一区免费| 亚洲国产另类 国产精品国产免费| 亚洲视频天天射| 欧美wwwwww| 亚洲一级黄色片| 美女久久久久久久久久| 国产精品原创| 亚洲色图丝袜美腿| 黄色成人在线免费观看| 伦xxxx在线| 亚洲在线观看免费| 欧美 日韩精品| 国产极品嫩模在线观看91精品| 国产伦一区二区三区| 亚洲成精国产精品女| 中文字幕99| 在线观看的网站你懂的| 午夜精品aaa| youjizzxxxx18| 国产精品66| 亚洲欧洲99久久| 视频一区二区三区免费观看| 蝌蚪视频在线播放| 国产精品久久久久永久免费观看| 黄色网zhan| 天堂电影一区| 欧美一区二区三区视频在线 | 久久久久国产精品厨房| 日本成人性视频| 人成在线免费网站| 欧美精品日韩精品| 国产精品久久久久久久9999| 中文字幕精品一区二区三区在线| 性欧美video高清bbw| 精品一区二区久久| 国产精品69久久久久| 亚洲精品国产一区黑色丝袜| 国产三级一区| 亚洲成人教育av| 亚洲色图 激情小说| 日本三级久久| 九九视频直播综合网| 波多野结衣一二区| 国产自产v一区二区三区c| 久久久久免费网| 欧美男男激情freegay| 国产精品天天摸av网| 欧美精品99久久| 欧美不卡在线观看| 亚洲天堂av图片| 国产一级一级片| 成人羞羞网站入口| 欧洲精品毛片网站| 永久免费看片在线播放| 国产毛片一区二区| 正在播放一区| 美女网站视频一区| 亚洲精选一区二区| 国产91在线播放| 男插女视频网站| 精品国产美女| 午夜精品一区二区三区在线视频| 91片黄在线观看喷潮| 成人黄页毛片网站| 欧美 国产 精品| 国产999精品在线观看| 日韩精品视频在线免费观看| 国产精品第九页| 成人三级伦理片| 激情五月六月婷婷| 免费av在线播放| 欧美日韩一级大片网址| 亚洲一区视频在线播放| 国产精品x453.com| 国产精品人成电影| 成人一区二区不卡免费| 精品国产户外野外| 亚洲少妇一区二区三区| 一区二区三区国产精华| 91亚洲国产成人精品性色| 性开放的欧美大片| 欧美日韩日日夜夜| 亚洲天堂av中文字幕| 免费成人av在线播放| 日韩欧美一区二区三区四区| 成人国产精选| 日韩少妇与小伙激情| 亚洲精品欧美一区二区三区| 又色又爽又黄无遮挡的免费视频| 国产欧美日韩视频一区二区| 欧美两根一起进3p做受视频| 教室别恋欧美无删减版| 欧洲成人免费视频| www在线免费观看| 欧美日韩中文精品| 5566中文字幕| 国产一区二区三区视频在线播放| 四虎4hu永久免费入口| 欧美色999| 欧美中文字幕一区| 五月婷婷六月香| 日本视频在线一区| 中文字幕av日韩精品| 欧州一区二区三区| 色偷偷88888欧美精品久久久 | 精品精品国产高清一毛片一天堂| 久久精品美女视频| 99精品国产91久久久久久| 人妻无码视频一区二区三区| 99久久.com| 国产高清一区二区三区| jk漫画禁漫成人入口| 日本一区二区视频在线| 久久久久久有精品国产| 亚洲 国产 日韩 欧美| 亚洲欧洲精品成人久久奇米网| 两根大肉大捧一进一出好爽视频| 精品久久视频| 91观看网站| 成人国产二区| 久久久久99精品久久久久| 不卡视频免费在线观看| 一本在线高清不卡dvd| 欧美做受喷浆在线观看| 开心九九激情九九欧美日韩精美视频电影 | 国产经典久久久| 婷婷成人影院| 亚洲jizzjizz日本少妇| 中文在线8资源库| 日韩在线播放视频| 天天摸天天碰天天爽天天弄| 亚洲国产精品久久一线不卡| 超薄肉色丝袜一二三| 福利一区二区在线| 亚洲欧美日韩综合一区| 国产精品传媒| 国产一区二区在线免费视频| 中文字幕中文字幕在线十八区| 亚洲国产精品久久久久秋霞不卡| 中文字幕一区二区三区四区免费看 | 精品无人码麻豆乱码1区2区| 国产一区二区网| 亚洲国产一成人久久精品| 美女黄毛**国产精品啪啪| 秋霞午夜一区二区三区视频| 国产精品免费久久久久久| 538在线视频| 久99九色视频在线观看| 日韩免费网站| 亚洲视频在线观看| 天堂成人在线观看| 精品日韩在线观看| 国产伦精品一区二区三区免.费| 色狠狠一区二区三区香蕉| 成年人免费看毛片| 夜夜嗨av一区二区三区中文字幕| 天天色天天综合| 国产日韩欧美高清在线| 人妻丰满熟妇av无码久久洗澡| 丰满白嫩尤物一区二区| 在线成人免费av| 久久国产生活片100| 日韩一级片播放| 亚洲欧美成人综合| 欧美极品欧美精品欧美| 日韩香蕉视频| 国产精品69久久久| 狠狠入ady亚洲精品| 国产人妻人伦精品| 欧美激情视频一区二区三区免费| 永久免费在线看片视频| 国产精品成人av| 中文字幕精品在线播放| 亚洲精品国产偷自在线观看| 亚洲欧美影院| 亚洲91中文字幕无线码三区| 一区二区三区日韩视频| 亚洲高清影视| 日本a在线天堂| 亚洲天堂男人| 国产精品va无码一区二区| 国产欧美成人| 人妻丰满熟妇av无码区app| 丝袜国产日韩另类美女| 91极品视频在线观看| 久久成人羞羞网站| 女王人厕视频2ⅴk| 国产.精品.日韩.另类.中文.在线.播放| 欧美色图校园春色| 成人精品gif动图一区| 91丝袜在线观看| 91看片淫黄大片一级在线观看| 免费毛片视频网站| 国产精品人成在线观看免费| 三上悠亚作品在线观看| 亚洲综合色成人| 亚洲午夜18毛片在线看| 在线视频国内自拍亚洲视频| 亚洲精品一区二区二区| 91精品一区二区三区久久久久久| 精品乱子伦一区二区| 日韩h在线观看| 国产福利在线视频| 毛片精品免费在线观看| 成人av影院在线观看| 日韩免费高清在线观看| 欧美三级电影网址| 国产精品一区二区三区不卡| 精品在线观看入口| 视频一区二区视频| 欧美日韩国产高清| 国产a级片免费观看| 精品一区二区免费视频| 中文字幕人妻一区二区三区| 国产日韩一级二级三级| 波多野结衣在线网址| 婷婷综合五月天| 一区精品在线观看| 精品国产自在久精品国产| 你懂得网站在线| 欧美理论电影在线播放| 老司机2019福利精品视频导航| 国产日韩亚洲欧美| 加勒比中文字幕精品| 亚洲人成网站在线观看播放| 精品成人久久| 黄色永久免费网站| 成人av午夜电影| 亚洲少妇xxx| 精品久久久久久久久中文字幕 | 婷婷在线精品视频| 色哟哟精品一区| xxxx国产精品| 中文字幕亚洲图片| 在线天堂资源www在线污| 91在线观看免费高清| 国产一区二区在线| 大陆av在线播放| 精品影视av免费| av网在线播放| 偷窥少妇高潮呻吟av久久免费| 国产美女无遮挡永久免费| 亚洲人高潮女人毛茸茸| 丁香高清在线观看完整电影视频 | 欧美国产欧美亚洲国产日韩mv天天看完整| 卡通欧美亚洲| 久久96国产精品久久99软件| 中文乱码免费一区二区三区下载| 日韩精品一区二区三区色欲av| 懂色av一区二区三区免费观看| 我要看一级黄色录像| 在线视频欧美精品| 欧美91精品久久久久国产性生爱| 欧美激情在线观看视频| 99久久久成人国产精品| 亚洲图片小说在线| 日韩av中文字幕一区二区三区| 国产麻豆天美果冻无码视频| 亚洲国产视频网站| 精品人妻一区二区三区麻豆91 | 夜夜躁日日躁狠狠久久88av| 草美女在线观看| 91手机在线视频| 久久久久久美女精品| 黄色小视频免费网站| 国产欧美精品一区| 性色av免费观看| 亚洲欧美精品一区| 超碰aⅴ人人做人人爽欧美| 精品一区二区三区视频日产| 伊人久久大香线蕉综合热线 | 九色成人免费视频| 欧美久久亚洲| 成人国产在线看| 国产成人在线视频播放| 欧美国产精品一二三| 欧美一级国产精品| 日本性爱视频在线观看| 91精品国自产在线观看| 亚洲欧美伊人| jjzz黄色片| 精品国产1区2区| 免费在线视频一级不卡| 国产成人欧美在线观看| 欧美精品一二| 亚洲一区日韩精品| 亚洲天堂2016| 亚洲免费一级片| 97视频免费在线看| 美女亚洲一区| 污污动漫在线观看| 最新国产精品久久精品| www.蜜臀av| 91国产美女在线观看| 久久99视频| 在线免费观看av的网站| 成人免费在线视频观看| 亚洲av无码乱码在线观看性色| 午夜精品久久久99热福利| 久久93精品国产91久久综合| 日韩精品你懂的| 一区二区三区在线影院| 天天插天天干天天操| 国产不卡av在线| 亚洲欧美色图| 理论片大全免费理伦片| 色香色香欲天天天影视综合网| 91ph在线| 国产不卡一区二区三区在线观看| 99在线|亚洲一区二区| 免费看91的网站| 欧美成人精品二区三区99精品| 日本在线啊啊| 综合一区中文字幕| av在线不卡观看免费观看| 亚洲中文无码av在线| 欧美成人手机在线| 国产精品免费大片| 久久人人爽人人片| 91高清视频在线| 免费男女羞羞的视频网站在线观看| 欧美人与物videos另类| 国产九色精品成人porny| 在线观看亚洲欧美| 久久久久999| 神马久久一区二区三区| 蜜桃视频无码区在线观看| 在线中文字幕一区二区| 国产乱妇乱子在线播视频播放网站| 日韩少妇中文字幕| 99这里都是精品| 国产精品丝袜黑色高跟鞋|