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

Vue3 的模板編譯優(yōu)化

共 5424字,需瀏覽 11分鐘

 ·

2020-11-26 22:49

Vue3 正式發(fā)布已經(jīng)有一段時(shí)間了,前段時(shí)間寫了一篇文章(《Vue 模板編譯原理》)分析 Vue 的模板編譯原理。今天的文章打算學(xué)習(xí)下 Vue3 下的模板編譯與 Vue2 下的差異,以及 VDOM 下 Diff 算法的優(yōu)化。

編譯入口

了解過 Vue3 的同學(xué)肯定知道 Vue3 引入了新的組合 Api,在組件 mount 階段會(huì)調(diào)用 setup 方法,之后會(huì)判斷 render 方法是否存在,如果不存在會(huì)調(diào)用 compile 方法將 template 轉(zhuǎn)化為 render。

//?packages/runtime-core/src/renderer.ts
const?mountComponent?=?(initialVNode,?container)?=>?{
??const?instance?=?(
????initialVNode.component?=?createComponentInstance(
??????//?...params
????)
??)
??//?調(diào)用?setup
??setupComponent(instance)
}

//?packages/runtime-core/src/component.ts
let?compile
export?function?registerRuntimeCompiler(_compile)?{
??compile?=?_compile
}
export?function?setupComponent(instance)?{
??const?Component?=?instance.type
??const?{?setup?}?=?Component
??if?(setup)?{
????//?...調(diào)用?setup
??}
??if?(compile?&&?Component.template?&&?!Component.render)?{
???//?如果沒有?render?方法
????//?調(diào)用?compile?將?template?轉(zhuǎn)為?render?方法
????Component.render?=?compile(Component.template,?{...})
??}
}

這部分都是 runtime-core 中的代碼,之前的文章有講過 Vue 分為完整版和 runtime 版本。如果使用 vue-loader 處理 .vue 文件,一般都會(huì)將 .vue 文件中的 template 直接處理成 render 方法。

//??需要編譯器
Vue.createApp({
??template:?'
{{?hi?}}
'

})

//?不需要
Vue.createApp({
??render()?{
????return?Vue.h('div',?{},?this.hi)
??}
})

完整版與 runtime 版的差異就是,完整版會(huì)引入 compile 方法,如果是 vue-cli 生成的項(xiàng)目就會(huì)抹去這部分代碼,將 compile 過程都放到打包的階段,以此優(yōu)化性能。runtime-dom 中提供了 registerRuntimeCompiler 方法用于注入 compile 方法。

主流程

在完整版的 index.js 中,調(diào)用了 ?registerRuntimeCompilercompile 進(jìn)行注入,接下來我們看看注入的 compile 方法主要做了什么。

//?packages/vue/src/index.ts
import?{?compile?}?from?'@vue/compiler-dom'

//?編譯緩存
const?compileCache?=?Object.create(null)

//?注入?compile?方法
function?compileToFunction(
?//?模板
??template:?string?|?HTMLElement,
??//?編譯配置
??options?:?CompilerOptions
):?RenderFunction?
{
??if?(!isString(template))?{
????//?如果?template?不是字符串
????//?則認(rèn)為是一個(gè)?DOM?節(jié)點(diǎn),獲取?innerHTML
????if?(template.nodeType)?{
??????template?=?template.innerHTML
????}?else?{
??????return?NOOP
????}
??}

??//?如果緩存中存在,直接從緩存中獲取
??const?key?=?template
??const?cached?=?compileCache[key]
??if?(cached)?{
????return?cached
??}

??//?如果是?ID?選擇器,這獲取?DOM?元素后,取?innerHTML
??if?(template[0]?===?'#')?{
????const?el?=?document.querySelector(template)
????template?=?el???el.innerHTML?:?''
??}

??//?調(diào)用?compile?獲取?render?code
??const?{?code?}?=?compile(
????template,
????options
??)

??//?將?render?code?轉(zhuǎn)化為?function
??const?render?=?new?Function(code)();

?//?返回?render?方法的同時(shí),將其放入緩存
??return?(compileCache[key]?=?render)
}

//?注入?compile
registerRuntimeCompiler(compileToFunction)

在講 Vue2 模板編譯的時(shí)候已經(jīng)講過,compile 方法主要分為三步,Vue3 的邏輯類似:

  1. 模板編譯,將模板代碼轉(zhuǎn)化為 AST;
  2. 優(yōu)化 AST,方便后續(xù)虛擬 DOM 更新;
  3. 生成代碼,將 AST 轉(zhuǎn)化為可執(zhí)行的代碼;
//?packages/compiler-dom/src/index.ts
import?{?baseCompile,?baseParse?}?from?'@vue/compiler-core'
export?function?compile(template,?options)?{
??return?baseCompile(template,?options)
}

//?packages/compiler-core/src/compile.ts
import?{?baseParse?}?from?'./parse'
import?{?transform?}?from?'./transform'

import?{?transformIf?}?from?'./transforms/vIf'
import?{?transformFor?}?from?'./transforms/vFor'
import?{?transformText?}?from?'./transforms/transformText'
import?{?transformElement?}?from?'./transforms/transformElement'

import?{?transformOn?}?from?'./transforms/vOn'
import?{?transformBind?}?from?'./transforms/vBind'
import?{?transformModel?}?from?'./transforms/vModel'

export?function?baseCompile(template,?options)?{
??//?解析?html,轉(zhuǎn)化為?ast
??const?ast?=?baseParse(template,?options)
??//?優(yōu)化?ast,標(biāo)記靜態(tài)節(jié)點(diǎn)
??transform(ast,?{
????...options,
????nodeTransforms:?[
??????transformIf,
??????transformFor,
??????transformText,
??????transformElement,
??????//?...?省略了部分?transform
????],
????directiveTransforms:?{
??????on:?transformOn,
??????bind:?transformBind,
??????model:?transformModel
????}
??})
??//?將?ast?轉(zhuǎn)化為可執(zhí)行代碼
??return?generate(ast,?options)
}

計(jì)算 PatchFlag

這里大致的邏輯與之前的并沒有多大的差異,主要是 optimize 方法變成了 ?transform 方法,而且默認(rèn)會(huì)對(duì)一些模板語法進(jìn)行 transform。這些 transform 就是后續(xù)虛擬 DOM 優(yōu)化的關(guān)鍵,我們先看看 transform 的代碼 。

//?packages/compiler-core/src/transform.ts
export?function?transform(root,?options)?{
??const?context?=?createTransformContext(root,?options)
??traverseNode(root,?context)
}
export?function?traverseNode(node,?context)?{
??context.currentNode?=?node
??const?{?nodeTransforms?}?=?context
??const?exitFns?=?[]
??for?(let?i?=?0;?i?????//?Transform?會(huì)返回一個(gè)退出函數(shù),在處理完所有的子節(jié)點(diǎn)后再執(zhí)行
????const?onExit?=?nodeTransforms[i](node,?context)
????if?(onExit)?{
??????if?(isArray(onExit))?{
????????exitFns.push(...onExit)
??????}?else?{
????????exitFns.push(onExit)
??????}
????}
??}
??traverseChildren(node,?context)
??context.currentNode?=?node
??//?執(zhí)行所以?Transform?的退出函數(shù)
??let?i?=?exitFns.length
??while?(i--)?{
????exitFns[i]()
??}
}

我們重點(diǎn)看一下 transformElement 的邏輯:

//?packages/compiler-core/src/transforms/transformElement.ts
export?const?transformElement:?NodeTransform?=?(node,?context)?=>?{
??//?transformElement?沒有執(zhí)行任何邏輯,而是直接返回了一個(gè)退出函數(shù)
??//?說明?transformElement?需要等所有的子節(jié)點(diǎn)處理完后才執(zhí)行
??return?function?postTransformElement()?{
????const?{?tag,?props?}?=?node

????let?vnodeProps
????let?vnodePatchFlag
????const?vnodeTag?=?node.tagType?===?ElementTypes.COMPONENT
????????resolveComponentType(node,?context)
??????:?`"${tag}"`
????
????let?patchFlag?=?0
????//?檢測(cè)節(jié)點(diǎn)屬性
????if?(props.length?>?0)?{
??????//?檢測(cè)節(jié)點(diǎn)屬性的動(dòng)態(tài)部分
??????const?propsBuildResult?=?buildProps(node,?context)
??????vnodeProps?=?propsBuildResult.props
??????patchFlag?=?propsBuildResult.patchFlag
????}

????//?檢測(cè)子節(jié)點(diǎn)
????if?(node.children.length?>?0)?{
??????if?(node.children.length?===?1)?{
????????const?child?=?node.children[0]
????????//?檢測(cè)子節(jié)點(diǎn)是否為動(dòng)態(tài)文本
????????if?(!getStaticType(child))?{
??????????patchFlag?|=?PatchFlags.TEXT
????????}
??????}
????}

????//?格式化?patchFlag
????if?(patchFlag?!==?0)?{
????????vnodePatchFlag?=?String(patchFlag)
????}

????node.codegenNode?=?createVNodeCall(
??????context,
??????vnodeTag,
??????vnodeProps,
??????vnodeChildren,
??????vnodePatchFlag
????)
??}
}

buildProps 會(huì)對(duì)節(jié)點(diǎn)的屬性進(jìn)行一次遍歷,由于內(nèi)部源碼涉及很多其他的細(xì)節(jié),這里的代碼是經(jīng)過簡(jiǎn)化之后的,只保留了 patchFlag 相關(guān)的邏輯。

export?function?buildProps(
??node:?ElementNode,
??context:?TransformContext,
??props:?ElementNode['props']?=?node.props
)?
{
??let?patchFlag?=?0
??for?(let?i?=?0;?i?????const?prop?=?props[i]
????const?[key,?name]?=?prop.name.split(':')
????if?(key?===?'v-bind'?||?key?===?'')?{
??????if?(name?===?'class')?{
???????//?如果包含?:class?屬性,patchFlag?|?CLASS
????????patchFlag?|=?PatchFlags.CLASS
??????}?else?if?(name?===?'style')?{
???????//?如果包含?:style?屬性,patchFlag?|?STYLE
????????patchFlag?|=?PatchFlags.STYLE
??????}
????}
??}

??return?{
????patchFlag
??}
}

上面的代碼只展示了三種 patchFlag 的類型:

  • 節(jié)點(diǎn)只有一個(gè)文本子節(jié)點(diǎn),且該文本包含動(dòng)態(tài)的數(shù)據(jù)TEXT = 1
<p>name:?{{name}}p>
  • 節(jié)點(diǎn)包含可變的 class 屬性CLASS = 1 << 1
<div?:class="{?active:?isActive?}">div>
  • 節(jié)點(diǎn)包含可變的 style 屬性STYLE = 1 << 2
<div?:style="{?color:?color?}">div>

可以看到 PatchFlags 都是數(shù)字 1 經(jīng)過 左移操作符 計(jì)算得到的。

export?const?enum?PatchFlags?{
??TEXT?=?1,?????????????//?1,?二進(jìn)制?0000?0001
??CLASS?=?1?<1,???????//?2,?二進(jìn)制?0000?0010
??STYLE?=?1?<2,???????//?4,?二進(jìn)制?0000?0100
??PROPS?=?1?<3,???????//?8,?二進(jìn)制?0000?1000
??...
}

從上面的代碼能看出來,patchFlag 的初始值為 0,每次對(duì) patchFlag 都是執(zhí)行 | (或)操作。如果當(dāng)前節(jié)點(diǎn)是一個(gè)只有動(dòng)態(tài)文本子節(jié)點(diǎn)且同時(shí)具有動(dòng)態(tài) style 屬性,最后得到的 patchFlag 為 5(二進(jìn)制:0000 0101)。

"{?color:?color?}">name:?{{name}}</p>
patchFlag?=?0
patchFlag?|=?PatchFlags.STYLE
patchFlag?|=?PatchFlags.TEXT
//?或運(yùn)算:兩個(gè)對(duì)應(yīng)的二進(jìn)制位中只要一個(gè)是1,結(jié)果對(duì)應(yīng)位就是1。
//?0000?0001
//?0000?0100
//?------------
//?0000?0101??=>??十進(jìn)制?5
patchFlag

我們將上面的代碼放到 Vue3 中運(yùn)行:

const?app?=?Vue.createApp({
??data()?{
????return?{
??????color:?'red',
??????name:?'shenfq'
????}
??},
??template:?`

???name:?{{name}}


??
`

})

app.mount('#app')

最后生成的 render 方法如下,和我們之前的描述基本一致。

function render() {}

render 優(yōu)化

Vue3 在虛擬 DOM Diff 時(shí),會(huì)取出 patchFlag 和需要進(jìn)行的 diff 類型進(jìn)行 &(與)操作,如果結(jié)果為 true 才進(jìn)入對(duì)應(yīng)的 diff。

patchFlag 判斷

還是拿之前的模板舉例:

<p?:style="{?color:?color?}">name:?{{name}}p>

如果此時(shí)的 name 發(fā)生了修改,p 節(jié)點(diǎn)進(jìn)入了 diff 階段,此時(shí)會(huì)將判斷 patchFlag & PatchFlags.TEXT ,這個(gè)時(shí)候結(jié)果為真,表明 p 節(jié)點(diǎn)存在文本修改的情況。

patchFlag
patchFlag?=?5
patchFlag?&?PatchFlags.TEXT
//?或運(yùn)算:只有對(duì)應(yīng)的兩個(gè)二進(jìn)位都為1時(shí),結(jié)果位才為1。
//?0000?0101
//?0000?0001
//?------------
//?0000?0001??=>??十進(jìn)制?1
if?(patchFlag?&?PatchFlags.TEXT)?{
??if?(oldNode.children?!==?newNode.children)?{
????//?修改文本
????hostSetElementText(el,?newNode.children)
??}
}

但是進(jìn)行 ?patchFlag & PatchFlags.CLASS 判斷時(shí),由于節(jié)點(diǎn)并沒有動(dòng)態(tài) Class,返回值為 0,所以就不會(huì)對(duì)該節(jié)點(diǎn)的 class 屬性進(jìn)行 diff,以此來優(yōu)化性能。

patchFlag
patchFlag?=?5
patchFlag?&?PatchFlags.CLASS
//?或運(yùn)算:只有對(duì)應(yīng)的兩個(gè)二進(jìn)位都為1時(shí),結(jié)果位才為1。
//?0000?0101
//?0000?0010
//?------------
//?0000?0000??=>??十進(jìn)制?0

總結(jié)

其實(shí) Vue3 相關(guān)的性能優(yōu)化有很多,這里只單獨(dú)將 patchFlag 的十分之一的內(nèi)容拿出來講了,Vue3 還沒正式發(fā)布的時(shí)候就有看到說 Diff 過程會(huì)通過 patchFlag 來進(jìn)行性能優(yōu)化,所以打算看看他的優(yōu)化邏輯,總的來說還是有所收獲。




推薦閱讀




我的公眾號(hào)能帶來什么價(jià)值?(文末有送書規(guī)則,一定要看)

每個(gè)前端工程師都應(yīng)該了解的圖片知識(shí)(長(zhǎng)文建議收藏)

為什么現(xiàn)在面試總是面試造火箭?

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

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 黄色三级电影| 国产午夜成人免费看片无遮挡| 大鸡巴操B视频| 亚洲精品乱码久久久久久按摩观| 江苏妇搡BBBB搡BBBB| 黄色a视频| 免费中文字幕av| 亚洲天堂无| 亚洲第一a| 美国无码黄片| 大香蕉国产视频| 精品1234| 狠狠干2021| 亚洲免费观看高清完整版| 在线观看亚洲中文字幕| 亚洲精品少妇| 日屄视频免费看| 日本成人视频在线免费播放| 精品国产乱子伦一区二区三区最新章| 午夜福利成人视频| 岛国无码破解AV在线播放| 国产aa片| 国产又爽又黄免费网站在| 亚洲午夜福利视频在线观看 | 爱爱视频免费看| 欧美日韩精品一区二区| 狠狠操在线观看| 亚洲中文字幕人妻| 三级毛片在线| 91在线一区| 苍井空一区二区三区四区| 狠狠干,狠狠操| 日韩国产欧美精品一区| 18国产免费视频| 成人片网址| 亚洲免费成人网站| 台湾成人视频| 91国产视频在线观看| 亚洲v区| 久久精品免费电影| 九九热在线精品视频| 欧美一级免费视频| 精品成人Av一区二区三区| 亚洲人在线观看| 成人大战香蕉最新视频| 国产激情综合五月久久| 在线中文字幕网站| 毛片福利| 婷婷五月在线视频| 国产一区二区AV| 欧美理论片在线观看| 久久国产片| 黄色免费在线观看| 黄色高清无码视频| 日本中文字幕网站| 亚洲欧美日韩另类| 国产在线观看不卡| 色婷婷在线综合| 九九九视频在线观看| 无码AV电影在线观看| 亚洲无码十八禁| 特黄A级毛片| 麻豆成人无码| 444444免费高清在线观看电视剧的注意| 午夜亚洲国产一区视频网站| 成人网肏逼视频| 91视频网站| 丁香婷婷色五月| 中文字幕第4页| 欧美黄色电影网站| 国产精品97| 国产丨熟女丨国产熟女视频| 伊人成色| 国内自拍视频在线观看| av中文在线观看| 亚洲免费高清视频| 国产又爽又黄免费网站校园里 | 国产综合精品久久久久成人AV| 婷婷五月AV| 黄片免费视频观看| 小泬BBBBBB免费看| 超碰人人爽| 麻豆自拍偷拍| 四季AV一区二区夜夜嗨| 亚洲综合色色| 国产操比视频| 亚洲精品国产精品国自产曰本| 香蕉网址| 国产人人看| 丁香五月AV| 亚洲无码A片在线观看| 91色噜噜狠狠色婷婷| 欧美激情亚洲| 操啊操| 黄色高清无码| 免费观看av| 色婷婷综合久久久中文字幕| 91久久爽久久爽爽久久片| 97爱| 国产无码AV大片| 欧美精品A级片| 国产精品怡红院有限公司| 亚色网址| 人妻超碰在线| 午夜免费AV| 国产—级a毛—a毛免费视频| 超碰免费视| 欧洲a视频| 欧美激情视频一区| 欧美成人三级在线播放| 国产熟妇码视频app| 无码人妻少妇| 九九九无码| 日韩av在线电影| 97在线视频免费观看| 色婷婷综合激情| 天天操人妻| 91夫妻视频| 亚洲91精品| 超碰免费在线观看| 国产又爽又黄免费视频网站| 欧美午夜精品久久久| 日韩精品影视| 天天日天天干天天爽| 艹在线观看| 2018中文字幕第一页| 秋霞福利影院| 谁有毛片网址| 日本精品中文字幕| 亚洲va国产天堂va久久en | 思思99热| 大香蕉精品| 免费在线成人网| 麻豆精东一区二区欧美国产| 日韩大屌操| 国产SUV精品一区二区| 亚洲一区二区视频在线观看| 亚洲69v久久久无码精品| 97国产在线观看| www.99国产| 久久国产黄色视频| 91婷婷五月天| 91精品久久久久久久| 国产高清av| 激情久久五月天| 日韩精品免费一区二区在线观看| 色资源在线观看| 一级a性色毛片| 99热在线观看免费精品| 台湾成人视频| 国产色av| 无码天堂| 77q视频| 中国操逼电影| 18禁一区二区| 精品久久电影| 男人天堂社区| 国产女人在线| 一品国精和二品国精的文化意义| 色婷婷欧美在线播放内射| 99热激情在线| 五月丁香婷婷色色| 亚洲成人AV在线播放| 久久国产劲爆∧v内射| 无码视频网站| 中文字幕无码一区二区| 你懂的在线免费观看| 成年视频网站| 欧美精品18| 欧美老妇操逼| 人妻在线你懂的| 久久久久久99| 日韩一级片在线| 无码精品一区二区在线| 俺也去啦WWW色官网| 99re久久| 欧美性国产| AA片免费| 77777精品成人免费A片| 成年人视频在线免费观看| 97操逼| 波多野结衣网址| 婷婷免费| 久久福利电影| 日韩爆乳在线| 性V天堂| 97综合| 五月丁香激情六月| 国产精品自拍在线观看| 色五月AV| 国产一二三四区| 成年人视频网站| 一级国产片| 一级A片黄色| 久久久久久久麻豆| 国产56页| 丝袜诱惑AV| 国产成人久久精品麻豆二区| 免费日韩无码| 日韩欧美高清第一期| 色接久久| 欧美东京热视频| 深夜av| 国产黄色一级| 成人国产在线| 色色色色色色网站| 可以看的黄色视频| 69er小视频| 一级婬片A片AAAA毛片A级| 无码免费视频| 亚洲无码十八禁| 91大神在线观看入口| 国产看片网站| 亚洲成人在线播放| 国产精品白浆| 黄色片a片| 欧美性爱-熊猫成人网| 福利视频一区二区三区| 欧美日韩第一页| 伊人网综合| 蜜臀久久99精品久久一区二区| 九久热| 日逼视频免费| 搡BBBB搡BBBB搡BBB| 豆花无码视频一区二区| 综合色色婷婷| 专业操老外| 久久久三级片| 伊人99在线| 国产久久在线观看| 五月网站| 先锋影音一区二区三区| 五月天综合在线| 噜噜在线| 无码中文字幕在线观看| 蜜桃在线一区| 国产精品久久久久久精| 操小骚逼视频| 国产精品秘入口18禁网站| 大香蕉色视频| av手机版| A片免费在线观看| 伊人三级片| 国产3级片| 国产中文字幕在线播放| 日韩人妻无码网站| 中文字幕日本人妻| 天堂中文字幕| 激情aaa| 黄色电影网页| 奇米色色色| 免费观看久久久| 想要xx视频| 无码在线电影| 综合导航无码| 国产夫妻AV| 亚洲成人综合在线| www.a日逼| 亚洲黄色在线观看视频| 操操操影院| 亚洲不卡| 日韩在线成人中文字幕亚洲| 99久在线精品99re8热| 日韩免费在线视频| 人人妻日日摸狠狠躁视频| 911精品国产一区二区在线| 久久久久久国产| 久久免费毛片| 日本久久综合| 国产日韩欧美在线| 欧美大鸡巴在线观看| 福利视频二区| 香蕉婷婷亚洲丁香| 老太老熟女城中层露脸60| 三级片无码视频| 西西4444www无码精品| 蜜臀久久99精品久久久| 伊人久久大香线蕉av一区| 日韩性AV| www.三级片| 中文字幕中文字幕| 91大熟女91大腚女人| 中文字幕丰满熟妇人妻| 欧美天堂在线| 亚洲高清毛片一区二区| 精品熟妇| 爆乳一区二区三区AV| 黄频视频| 日本爱爱免费视频| 免费欧美三级片| 91色秘乱码一区二区| 99热国产精品| 日韩av无码电影| 日本爱爱视频免费| 综合成人在线| 欧美久久久久久| 国产成人一区二区| 99热激情在线| 综合五月| 水蜜桃视频网站在线观看| 国产操逼大全| 免费无码高清| 99国产免费| 日韩一级在线播放| 大香蕉视频国产| 操逼中文字幕| 黄色视频网站在线观看| 国产A片大全| 91探花国产综合在线精品| 91麻豆天美传媒在线| 黑人巨大精品欧美| 成人黄色电影| 粉嫩av一区二区白浆| 嫩草亚洲小泬久久夂| 无码做爰欢H肉动漫网站在线看 | 亚洲一区二区在线播放| 一区二区三区不卡视频| 北条麻妃成人视频| 免费的操逼视频| 广西少妇BBwBBwBBw| 日韩AV小电影| 性A免费在线播放| 成人毛片AV无码| 精品欧美一区二区三区| 一级a一级a免费观看免免黄‘/| 大香蕉网伊人| 五月婷婷中文版| 国产成人a亚洲精品无码| 久久人操| 中文字幕成人A片| 亚洲三级在线| aaa三级黄片| 中国女人操逼视频| 伊人成人免费视频| 免费一级无码婬片A片APP直播| 蝌蚪窝在线视频观看| 免费操B视频| 苍井空中文字幕在线观看| 成人欧美精品区二区三| 精品AV无码一区二区三区| 日本中文在线观看| 短发妹子双人啪啪秀| 欧美日韩中文字幕在线视频| 天天日夜夜爽| 中文字幕在线观看有码| 一区视频| 大地av| 特一级黄色片| 中文精品在线| 91精品一区| 插插插综合| 超碰乱伦| 1插菊花网| AV资源在线| 国产1区2区3区中文字幕| 无码欧美| 五月丁香婷婷基地| 秋霞福利视频| 二区精品| 男人天堂网站| 日韩精品成人片| 日韩中文字幕在线| 欧洲性爱视频| AV成人| 久久另类TS人妖一区二区| 乱伦无码高清麻豆视频一区二区 | 五月天在线观看| 天天天做夜夜夜夜爽无码| 91视频在线免费看| 亚洲啊v| 8x8x黄色| 亚洲欧洲视频在线观看| 精品一区二区三区免费毛片| 嗯啊在线视频| 2025国产精品| 视频一区中文字幕| 午夜精品久久久久久久99黑人 | 精品国产三级片| 黄网在线观看视频| 免费看黄A级毛片成人片| 少妇熟女视频一区二区三区 | 国产AV影片| 国产18女人水真多免费看| 午夜天堂网| 欧美喷水视频| 亚洲视频免费完整版在线播放| 超碰观看| 人人干人人摸人人操| 草草影院第一页YYCCC| 免费的av| 日韩av高清| 香蕉网站操逼片| 久一精品| 久久久在线视频| 国产又爽又黄免费网站校园里| 日韩一区二区三区无码| 男女嫩草视频| 在线观看无码av| 亚州精品成人片| 91色婷婷综合久久中文字幕二区 | jk在线观看| 男人操女人视频网站| 一级A片60分钟免费看| 人妻在线免费视频| 国产在线不卡年轻点的| 狠狠干中文字幕| 欧美一区二区三区成人| 欧美日韩一二三区| 黄色视频毛片一一| 男人天堂99| 中文字幕在线日亚洲9| 又大又粗AV| 国产高清无码在线| 一本无码视频| 日韩大屌操| 亲子乱一区二区三区视频| 女生自慰网站免费| 色婷婷av| 九九色| 视频一二三区| 国产精品免费在线| 怡春院AV| 亚洲中文字幕第一| 色哟哟精品| 精品人妻一区二区三区阅读全文| 日韩在线中文字幕亚洲| 五月香婷婷| 亚洲成人精品AV| 日本精品视频| 亚洲午夜久久久久久久久红桃 | 永久免费黄色视频网站| 蜜桃av秘无码一区二区三区| 欧美视频基地| 午夜亚洲AV永久无码精品麻豆| 18禁黄网| 69人妻人人澡人人爽久久| 精品欧美激情精品一区| 刘玥91精一区二区三区| 婷婷国产成人精品视频| 免费看毛片中文字幕| 中文字幕无码高清| AV第一福利大全导航| 日韩一级一片内射视频4K| 六月丁香网| 欧美日在线观看| 中文字幕乱码免费综合久久| 亚洲精品第一页| 在线se| 欧美激情无码炮击| 亚州精品人妻一二三区| 91麻豆福利| 亚洲va欧美va天堂v国产综合 | 91精品久| www91久久| 伊人网在线视频观看| 大鷄巴成人A片视频| 人妻体体内射精一区二区| 亚洲无码综合| 黄片免费看网站| 奇米狠狠777| 久久久精品| 黄色视频在线观看国产| 91妻人人澡人人爽人人精品| 韩国日本美国免费毛片| 秋霞午夜| 国产乱子伦一区二区三区在线观看| 亚洲精品国产精品乱码不卡√香蕉 | 欧美高潮喷水| 日韩一级片在线| 操逼不卡视频| 国产av中文字幕| 翔田千里在线播放| sm视频网站| 日韩黄色视频| 亚洲日韩激情| av无码精品一区| 亚洲色图一区二区| 亚洲最大成人网站| 精品成人一区二区三区| 人人操人人操人人操人人操| 亚洲性生活| 91亚洲精品视频| 二区三区免费视频| 成人免费av| 欧美成人图片视频在线| 黄网在线免费观看| 中文字幕操逼| 久久秘成人久久无码| 牛牛成人在线视频| 性无码一区二区三区| 天天操天天射天天日| 日本熟妇在线| 美女黄色视频永费在线观看网站 | 欧美精品三级| 亚洲日韩三级片| 亚洲成人无码高清| 三洞齐开Av在线免费观看| 丁香成人五月天| 中文在线观看免费视频| 一本久久综合亚洲鲁鲁五月天| 东方美美高清无码一区| 国产精品久久久久久久久久久免费看 | 日本91视频| 啪啪网站免费观看| 夜夜撸一撸| 亚洲Japanese办公室制服 | 国产成人三级片| 亚洲AV播放| 色悠悠中文字幕| 国产精品9999久久久久仙踪林 | 亚洲中文字墓| 国产激情网址| 久久黄色视| 黄片伊人| 操大爷影院| 黄色a级片| 亚洲黄色在线免费观看| 亚洲三级网站在线观看| 黑人AV在线| 日韩av毛片| 国产黄片免费视频| 69成人精品| 亚洲中文自拍| 玩弄小怮女在线观看| 另类老妇videos另类| 看黄片com| 亚洲AV无码乱码国产精品黑人 | 日韩性爱一区二区| 免费在线观看黄色视频网站| 日韩小视频在线观看| 91AV免费在线观看| 一级a片在线播放| 北条麻纪视频| 久久一级片| 骚逼av| 熟女视频91| 欧美熟妇一区二区| 国产有码在线观看| 日韩乱轮小说与视频| 91青青| 你懂的视频网站| 国产男女无套免费视频| 免费人成视频在线| 国产精品色情A级毛片| 中国免费看片| 无码人妻丰满熟妇bbbb| www.天天操| 一级中国毛片| 黄网站在线免费| 日韩精品观看| 97中文在线| 亚洲欧美日韩黑料吃瓜在线观看| 日韩激情| 欧美色图综合网| 亚洲一区三区| 日韩人妻无码电影| 中文字幕乱码中文乱码图片 | 性爱视频久久| 日本中文不卡| 爆操视频| 亚洲vs天堂vs成人vs无码| 天天干天天操天天| 人成在线免费视频| www.天天射| 婷婷激情av| 操操操无码| 午夜视频成人| 欧美成人乱码一区二区三区| 黑人无码一二三四五区| 精品视频一区二区| 无码人妻一区二区三区| 欧美色999| 高清无码中文字幕在线观看| 大香蕉AV在线观看| 想要xx视频| 青娱乐无码视频| 日韩A级视频| 久久免费看视频| 欧洲黑种人日P视频| 91精品婷婷国产综合久久竹菊| 午夜三级福利| 91蜜桃网| 免费观看一区二区三区| 99久热在线精品视频| 日本黄色直播| 无码精品黑人| 熟妇操逼视频| 亚洲日韩中文字幕无码| 亚洲欧美在线综合| 日韩在线| 天天操天天干天天日| 亚洲91在线| 国产黄在线观看| 伊人成人小说| 激情丁香六月| 69er小视频| 91视频在线网站| 中文字幕成人网站| 日韩在线中文字幕| 久久久久久久AV| 激情二区| 久草大香蕉在线视频| 99精品视频北条麻妃国产版| 欧洲黑人成人A版免费视频| 一级黄色录像片| 国产精品一区在线观看| 无码人妻一区二区三区| 92无码| 亚洲中午字幕| 天天干中文字幕| 91网站免费在线观看| 中文字幕久热| 狠狠干伊人| AV天天干| 久久中文娱乐网| 狠狠操电影| 成人免费乱码大片a毛片蜜芽| 黄片网站在线免费观看| 91亚洲精品国产成人| 欧美日韩色视频| 男人的天堂婷婷| 韩日成人| 一区在线看| 亚洲精品国产成人| 国产成人精品a视频| 精品无码一区二区人妻久久蜜桃 | 69成人在线电影| 韩国无码视频在线观看| 亚洲高清无码中字| 88av在线播放| 国产黄在线| 中文字幕无码Av在线| 国产精品国产三级国产专区52| 囯产一级黄片| 中文字幕无码精品三级在线欧美| 伊人婷婷久久| 亚洲护士无码| 大香蕉伊人免费| 天天综合网站| 久久九九国产精品怡红院| 中文无码网站| 欧美三级在线观看视频| 91一区二区在线播放精品| 水蜜桃成人在线| 91福利资源| 欧美日韩一区二区三区四区五区六区| 国产精品色呦呦| 人妻懂色av粉嫩av浪潮av| 中文字幕无码A片久久| 亚洲天堂AV2025| 热久久在线| 亚洲成人性爱在线| 91精品91久久久中77777| 久久私拍视频| 国产精品在线免费| 激情五月天开心网| 精品人妻一区二区三区蜜桃| 欧美性综合网| 国产A片大全| 国产乱论视频| 日本无码网站| 久久国产精品免费视频| 国产人妖TS重口系列网站观看| 人人妻人人超| 欧美成人性爱图片| 欧美在线视频播放| 亚洲福利在线观看视频| 日韩欧美二区| 水密桃网站| 成人国产在线观看| 黄片大全在线观看| 六月激情| 少妇一区二区三区| 在线播放中文字幕| 国产精品天天AVJ精麻传媒| 激情导航| 水多多成人网站A片| AV青青草原| 麻豆视频在线播放| 翔田千里无码一区| 91极品视觉盛宴| 精品动漫一区二区三区| yw在线播放| 亚洲理伦| 美女乱伦| 97一区二区三区| 国产女人在线观看| 四虎精品一区二区三区| 综合久久99| 色香蕉视频在线观看| 日韩aaaa| 天天干天天射天天| 揉BBB搡BBB搡BBB| 国产三级精品三级在线观看| 中文字幕在线日本| 久草手机视频在线观看| 国产精品93333333| 中文无码在线视频| 超碰在线中文字幕| 精品一二三区| 午夜福利啪啪啪| 丁香花中文字幕| 欧美精品在线免费观看| 97人人操人人| 俺也来www俺也色com| 成人午夜福利视频| 日韩一二三四区| 大香蕉网伊人| 大香蕉伊在线观看| 国产黄色录像| 黄色3A片在线观看| 男女视频网站在线观看| 日皮视频| 无码五区| 国产AV中文| 琪琪色在线视频| 一区二区三区四区无码视频| 欧美熟女18| 色色天堂成人电影| 久久久久久久久久久久久久久久久久免费精品分类视频 | 丁香五月激情中文字幕| 色色色91| 黄A在线| 日本内射在线播放| 亚洲成人一级片| 一本一道AV| 少妇搡BBBB搡BBB搡澳门| 99偷拍| 色色一级| 免费视频久久久| 免费国产成人看片在线| 18禁av在线| 国产成人亚洲综合A∨婷婷| 精品国产三级| 三级视频在线观看| 国产高清毛片| 国产欧美综合在线观看| 色欧美视频| 婷色五月天| 撸一撸在线| 亚洲视频一区二区三区| 91大神在线免费看| 狠狠色噜噜狠狠狠7777米奇网| 亚洲三级在线免费观看| 中文字幕黄色片| 黄色网址在线免费观看| 日韩A级毛片| 亚洲色吧| 成人国产AV网站| 欧产日产国产swag| 久久久成人免费视频| 一二三区视频| 西西888WWW大胆无码| 爱操逼综合网| 九色PORNY国产成人| 女生被操网站| 亚洲日本三级片| 夜夜躁狠狠躁| 欧美日韩国产91| 在线激情网站| 国产精品三级在线观看| 久久婷婷秘精品日产538| 青草社区在线观看| 调教人妻视频| 国产精品理论片| 谁有毛片网址| 口爆吞精在线观看| 91在线无码精品秘国产色多多| 2025最新偷拍| 凸凹翔田千里无码| 婷婷午夜福利| 男人在线天堂| 亚洲天堂无码视频| 无码免费视频| 成人毛片一区二区三区| 男人操女人免费网站| 黄色99| 中文字幕在线观看AV| 99热这里有精品| 亚洲AV综合色区无码国产播放| 毛片大香蕉| 亚洲无码精品一区二区三区| 欧美操逼视频网站| 日韩中文在线观看| 99re热在线视频| 久久久久久大香蕉| 三级无码电影| 西西444WWW大胆无视频软件亮点 | 日韩精品免费| 日韩AV毛| 在线观看亚洲中文字幕| WWW久久| 六月婷婷综合| VA电影| 国语偷拍| www.婷婷六月天| 天天日天天干天天日| 午夜无码在线观看视频| 欧美一区二区三区系列电影| 狠狠干在线观看| 91成人视频在线播放| 亚洲吹箫| 亚洲无码人妻在线| 婷婷五月天基地| 亚洲中文字幕在线免费观看视频| 超碰天天干天天摸| 欧美亚韩| 色中色在线视频| 久久久久久久久久久高清毛片一级| 偷拍三区| 婷婷五月天色综合| www.五月天婷婷| 国产欧美日本| 五月停亭六月,六月停亭的英语| 亚洲丁香五月激情| 亚洲日韩AV无码| 天天射天天日天天干| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 粉嫩99国产精品久久久久久人妻| 综合偷拍| 操逼网站大全| 欧美五月在线网址| 日韩免费片| 成人大香蕉网站精品免费| 91在线精品无码秘入口苹果| 成人国产AV网站| 影音先锋男人资源网| 国产成人精品电影| 欧美三级长视频| 69乱伦视频| 特级A级毛片| 亚洲天堂无码在线| 亚洲午夜影院在线| 翔田千里在线播放| 免费日逼| 日本三级黄色视频| 逼特逼在线视频| 国产精品黄色电影| 懂色av懂色av粉嫩av分享吧| 亚洲成年人在线| 国产综合久久久7777777| 六月婷婷五月丁香| 亚洲成人精品一区| 蜜桃精品视频在线观看| 免费观看无码视频| 亚洲无码A区| 亚洲AV无码精品久久一区二区| 亚洲精品蜜桃| 黄色成人视频网站在线观看| 大香蕉9999| 亚洲成人视频在线| 综合网视频| 大香蕉9999| 国产毛片在线看| 91国产视频在线播放| 一区二区在线免费观看| 国产激情| 国产操穴| 中文字幕电影| 中文字幕在线观看AV| 天堂在线视频免费| 中国婬乱a| 国产亚洲欧美在线| 五月丁香在线播放| 蜜桃视频网址| 久久av电影| 伊人免费视频在线观看| 日韩黄色免费电影| 成人三级片视频| 麻豆MD传媒MD0071| 欧美经典自拍狼友| 无码免费婬AV片在线观看| 夜色福利在线| 久久久久久91| 黄色一级在线| 丰满人妻一区二区免费看| 亚洲一级黄色电影| 91丨九色丨熟女老版| 一级黄色片在线观看| 日韩精品91| 久久久久久久久免费看无码| 911精品国产一区二区在线| 中文无码一区二区三区| 久久国产乱子伦精品免费女,网站 一区二区三区免费观看 | 婷婷色777777| 天天激情站| 人人妻人人爽人人操| 国产精品一级无码免费播放| 国产精品中文| 青娱乐国产| 在线h网站| 亚洲人妻在线观看| 北条麻妃在线播放一区| 影音先锋在线成人| 大香蕉中文| 国产一区在线观看视频| 嫩BBB槡BBBB槡BBBB撒尿| 国产狂喷水潮免费网站www| 亚洲精品国产AV婷婷| 熟女人妻人妻の视频|