成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 剖析美團(tuán)網(wǎng)站前端的組件化開發(fā)經(jīng)驗(yàn)

剖析美團(tuán)網(wǎng)站前端的組件化開發(fā)經(jīng)驗(yàn)

熱門標(biāo)簽:阿里機(jī)器人電銷 廣西防封卡外呼系統(tǒng)原理是什么 電銷外呼系統(tǒng)罵人 浙江呼叫中心外呼系統(tǒng)多少錢 地圖標(biāo)注操作方法 清遠(yuǎn)語音外呼系統(tǒng)平臺(tái) 地圖標(biāo)注銷售好做嗎 地圖標(biāo)注標(biāo)記位置導(dǎo)航 機(jī)器人電銷哪個(gè)牌子好

前言
一位計(jì)算機(jī)前輩曾說過:

Controlling complexity is the essence of computer programming.
隨著前端開發(fā)復(fù)雜度的日益提升,組件化開發(fā)應(yīng)運(yùn)而生,并隨著 FIS、React 等優(yōu)秀框架的出現(xiàn)遍地開花。這一過程同樣發(fā)生在美團(tuán),面臨業(yè)務(wù)規(guī)模的快速發(fā)展和工程師團(tuán)隊(duì)的不斷擴(kuò)張,美團(tuán)歷經(jīng)引入組件化解決資源整合問題、逐步增強(qiáng)組件功能促進(jìn)開發(fā)效率、重新打造新一代組件化方案適應(yīng)全棧開發(fā)和共享共建等階段,努力“controlling complexity”。本文將介紹美團(tuán)組件化開發(fā)的實(shí)踐過程。

組件化 1.0:資源重組
在美團(tuán)早期,前端資源是按照頁面或者類似業(yè)務(wù)頁面集合的形式進(jìn)行組織的。例如 order.js 對(duì)應(yīng)訂單相關(guān)頁面的交互,account.css 對(duì)應(yīng)賬戶相關(guān)頁面的樣式。這種方式在過去的較長一段時(shí)間內(nèi),持續(xù)支撐了整個(gè)項(xiàng)目的正常推進(jìn),功勛卓著。

隨著業(yè)務(wù)規(guī)模的增加和開發(fā)團(tuán)隊(duì)的擴(kuò)張,這套機(jī)制逐漸顯示出它的一些不足:

1.資源冗余

頁面的逐漸增加,交互的逐漸復(fù)雜化,導(dǎo)致對(duì)應(yīng)的 css 和 js 都有大幅度增長,進(jìn)而出現(xiàn)為了依賴某個(gè) js 中的一個(gè)函數(shù),需要加載整個(gè)模塊,或者為了使用某個(gè) css 中的部分樣式依賴整個(gè) css,冗余資源較多

2.對(duì)應(yīng)關(guān)系不直觀

沒有顯而易見的對(duì)應(yīng)規(guī)則,導(dǎo)致的一個(gè)問題是修改某個(gè)業(yè)務(wù)模塊的 css 或者 js 時(shí),幾乎只能依靠 grep??咳藖砭S護(hù)頁面模塊 html、css 和 js 之間的依賴關(guān)系,容易犯錯(cuò),常常出現(xiàn)內(nèi)容已經(jīng)刪除但是 css 或 js 還存在的問題。

3.難于單元測(cè)試

以頁面為最小粒度進(jìn)行資源整合,不同功能的業(yè)務(wù)模塊相互影響,復(fù)雜度太高,自動(dòng)化測(cè)試難以推進(jìn)。
2013 年開始,在調(diào)研了 FIS、BEM 等方案之后,結(jié)合美團(tuán)開發(fā)框架的實(shí)際,美團(tuán)初步實(shí)現(xiàn)了一套輕量級(jí)的組件化開發(fā)方案。主要的改進(jìn)是:

1.以頁面功能組件為單位聚合前端資源
2.自動(dòng)加載符合約定的 css、js 資源
3.將業(yè)務(wù)數(shù)據(jù)到渲染數(shù)據(jù)的轉(zhuǎn)換過程獨(dú)立出來

舉例來說,美團(tuán)頂部的搜索框就被實(shí)現(xiàn)為一個(gè)組件。

代碼構(gòu)成:

復(fù)制代碼
代碼如下:

www/component/smart-box/
├── smart-box.js # 交互
├── smart-box.php # 渲染數(shù)據(jù)生產(chǎn)、組件配置
├── smart-box.scss # 樣式
├── smart-box.tpl # 內(nèi)容
└── test
├── default.js # 自動(dòng)化測(cè)試
└── default.php #

調(diào)用組件變得十足簡單:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. echo View::useComponent('smart-box', [   
  2.     'keyword' => $keyword   
  3. ]);  

對(duì)比之前,可以看到組件化的一些特點(diǎn):

1.按需加載

只加載必要的前端資源

2.對(duì)應(yīng)關(guān)系非常清晰

組件所需要的前端資源都在同一目錄,職責(zé)明確且唯一,對(duì)應(yīng)關(guān)系顯著


3.易于測(cè)試

組件是具備獨(dú)立展現(xiàn)和交互的最小單元,可利用 Phantom 等工具自動(dòng)化測(cè)試
此外,由于前端資源集中進(jìn)行調(diào)度,組件化也為高階性能優(yōu)化提供了空間。例如實(shí)現(xiàn)組件級(jí)別的 BigRender、通過數(shù)據(jù)分析進(jìn)行資源的合并加載等等。

組件化 2.0:趨于成熟
組件化 1.0 上線后,由于簡單易用,很快得到工程師的認(rèn)可,并開始在各項(xiàng)業(yè)務(wù)中應(yīng)用起來。新的需求接踵而來,一直持續(xù)到 2014 年底,這個(gè)階段美團(tuán)稱之為組件化 2.0。下面介紹下主要的幾個(gè)改進(jìn)。

Lifecycle
組件在高內(nèi)聚的同時(shí),往往需要暴露一些接口供外界調(diào)用,從而能夠適應(yīng)復(fù)雜的頁面需求,例如提交訂單頁面需要在支付密碼組件啟動(dòng)完成后綁定提交時(shí)的檢查。Web Components、React 等都選擇了生命周期事件/方法,美團(tuán)也是一樣。

組件的生命周期:

一個(gè)組件的完整生命周期包括:

1.init,初始化組件根節(jié)點(diǎn)和配置
2.fetch,加載 css 和 js 資源
3.render,內(nèi)容渲染,默認(rèn)的渲染內(nèi)容方式是 BigRender
4.ready,進(jìn)行數(shù)據(jù)綁定等操作
5.update,數(shù)據(jù)更新
6.destroy,解除所有事件監(jiān)聽,刪除所有組件節(jié)點(diǎn)
組件提供 pause、resume 方法以方便進(jìn)行生命周期控制。各個(gè)階段使用 Promise 串行進(jìn)行,異步的管理更清晰。使用自定義語義事件,在修改默認(rèn)行為、組件間通信上充分利用了 YUI 強(qiáng)大的自定義事件體系,有效降低了開發(fā)維護(hù)成本。

舉個(gè)例子,頁面初始化時(shí)組件的啟動(dòng)過程實(shí)際也是借助生命周期實(shí)現(xiàn)的:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. var afterLoadList = [];   
  2. Y.all('[data-component]').each(function (node) {   
  3.     var component = new Y.mt.Component(node);   
  4.     // 綁定 init 生命周期事件,在 init 默認(rèn)行為完成后執(zhí)行回調(diào)   
  5.     component.after('init'function (e) {   
  6.         // 如果配置了延遲啟動(dòng)   
  7.         if (e.config.afterLoad) {   
  8.             // 暫停組件生命周期   
  9.             e.component.pause();   
  10.             // 壓入延遲啟動(dòng)數(shù)組   
  11.             afterLoadList.push(e.component);   
  12.         }   
  13.     });   
  14.     // 開始進(jìn)入生命周期   
  15.     component.start();   
  16. });   
  17.   
  18. Y.on('load'function () {   
  19.     // 在頁面 load 事件發(fā)生時(shí)恢復(fù)組件生命周期   
  20.     afterLoadList.forEach(function (component) {   
  21.         component.resume();   
  22.     });   
  23. });  

回過頭來看,引入生命周期除了帶來擴(kuò)展性外,更重要的是理順了組件的各個(gè)階段,有助于更好的理解和運(yùn)用。

Data Binding
數(shù)據(jù)綁定是美團(tuán)期盼已久的功能,將 View 和 ViewModel 之間的交互自動(dòng)化無疑會(huì)節(jié)省工程師的大量時(shí)間。在組件化減少關(guān)注點(diǎn)和降低復(fù)雜度后,實(shí)現(xiàn)數(shù)據(jù)綁定變得更加可能。

美團(tuán)最終實(shí)現(xiàn)的數(shù)據(jù)綁定方案主要參考了 Angular,通過在 html 節(jié)點(diǎn)上添加特定的屬性聲明綁定邏輯,js 掃描這些內(nèi)容并進(jìn)行相應(yīng)的渲染和事件綁定。當(dāng)數(shù)據(jù)發(fā)生變化時(shí),對(duì)應(yīng)的內(nèi)容全部重新渲染。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. ul class="addressList">   
  2.     li   
  3.         mt-bind-repeat="addr in addrList"  
  4.         mt-bind-html="addr.text"  
  5.     >   
  6.     /li>   
  7. /ul>   
  8.   
  9. script>   
  10. Y.use(['mt-bind''mt-scope'], function () {   
  11.     Y.mt.bind.init(document.body);   
  12.     var scope = Y.one('.addressList').getScope();   
  13.     // 將 scope.addrList 設(shè)置為一個(gè)數(shù)組,DOM 上將自動(dòng)渲染其內(nèi)容      
  14.     scope.$set('addrList', [   
  15.         { text: "first address" },   
  16.         { text: "second address" }   
  17.     ]);   
  18. });   
  19. /script>  

使用屬性聲明綁定邏輯的好處是可以同時(shí)支持后端渲染,這對(duì)于美團(tuán)團(tuán)購這樣的偏展現(xiàn)型業(yè)務(wù)是非常必要的,用戶可以很快看到頁面內(nèi)容。

Flux
實(shí)現(xiàn)數(shù)據(jù)綁定后,美團(tuán)不得不面對(duì)另外一個(gè)問題:如何協(xié)同多個(gè)組件間的數(shù)據(jù)。因?yàn)槟硞€(gè)組件的數(shù)據(jù)變化,很有可能引起其他組件的變化。例如當(dāng)修改購買數(shù)量,總金額會(huì)變化,而總金額超過 500 后,還需要展示大額消費(fèi)提醒。

為了解決這個(gè)問題,美團(tuán)引入了 Flux,使用全局消息總線的思路進(jìn)行跨組件交互。

例如因?yàn)榻换?fù)雜而一直讓美團(tuán)非常頭疼的項(xiàng)目購買頁,在應(yīng)用組件 + Flux 重構(gòu)后,各模塊之間的互動(dòng)更加清晰:

其他方面的改進(jìn)還有很多,包括引入模板引擎 LightnCandy 約束模板邏輯、支持組件任意嵌套、支持異步加載并自動(dòng)初始化等。

隨著組件化 2.0 的逐步完善,基本已經(jīng)可以從容應(yīng)對(duì)日常開發(fā),在效率和質(zhì)量方面都上了一個(gè)臺(tái)階。

組件化 3.0:重啟征程
時(shí)間的車輪滾滾前行,2014 年底,美團(tuán)遇到一些新的機(jī)遇和挑戰(zhàn):

基于 Node 的全棧開發(fā)模式開始應(yīng)用,前后端渲染有了更多的可能性
YUI 停止維護(hù),需要一套新的資源管理方案
新業(yè)務(wù)不斷增加,需要找到一種組件共享的方式,避免重復(fù)造輪子
結(jié)合之前的實(shí)踐,以及在這一過程中逐漸積累的對(duì)業(yè)內(nèi)方案的認(rèn)知,美團(tuán)提出了新的組件化方案:

基于 React 開發(fā)頁面組件,使用 NPM 進(jìn)行分發(fā),方便共建共享
基于 Browserify 二次開發(fā),建設(shè)資源打包工具 Reduce,方便瀏覽器加載
建設(shè)適應(yīng)組件化開發(fā)模式的工程化開發(fā)方案 Turbo,方便工程師將組件應(yīng)用于業(yè)務(wù)開發(fā)中


React
在組件化 2.0 的過程中,美團(tuán)發(fā)現(xiàn)很多功能和 React 重合,例如 Data Binding、Lifecycle、前后端渲染,甚至直接借鑒的 Flux。除此之外,React 的函數(shù)式編程思想、增量更新、兼容性良好的事件體系也讓美團(tuán)非常向往。借著前端全棧開發(fā)的契機(jī),美團(tuán)開始考慮基于 React 進(jìn)行組件化 3.0 的建設(shè)。

NPM + Reduce
NPM + Reduce 構(gòu)成了美團(tuán)新的資源管理方案,其中:

NPM 負(fù)責(zé)組件的發(fā)布和安裝??梢哉J(rèn)為是“分”的過程,粒度越小,重用的可能性越大
Reduce 負(fù)責(zé)將頁面資源進(jìn)行打包??梢哉J(rèn)為是“合”的過程,讓瀏覽器更快地加載
一個(gè)典型的組件包:

復(fù)制代碼
代碼如下:

smart-box/
├── package.json # 組件包元信息
├── smart-box.jsx # React Component
├── smart-box.scss # 樣式
└── test
└── main.js # 測(cè)試

NPM 默認(rèn)只支持 js 文件的管理,美團(tuán)對(duì) NPM 中的 package.json 進(jìn)行了擴(kuò)展,增加了 style 字段,以使打包工具 Reduce 也能夠?qū)?css 和 css 中引用的 image、font 進(jìn)行識(shí)別和處理:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. {   
  2.     "style""./smart-box.scss"  
  3. }  

只要在頁面中 require 了 smart-box,經(jīng)過 Reduce 打包后,js、css 甚至圖片、字體,都會(huì)出現(xiàn)在瀏覽器中。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. var SmartBox = require('@mtfe/smart-box');   
  2. // 頁面   
  3. var IndexPage = React.createClass({   
  4.     render: function () {   
  5.         return (   
  6.             Header>   
  7.                 SmartBox keyword={ this.props.keyword } />   
  8.             /Header>   
  9.             ...   
  10.         );   
  11.     }   
  12. });   
  13. module.exports = IndexPage;  

整體思路和組件化 1.0 如出一轍,卻又那么不同。

Turbo
單單解決分發(fā)和打包的問題還不夠,業(yè)務(wù)開發(fā)過程如果變得繁瑣、難以 Debug、性能低下的話,恐怕不會(huì)受到工程師歡迎。

為了解決這些問題,美團(tuán)在 Node 框架的基礎(chǔ)上,提供了一系列中間件和開發(fā)工具,逐步構(gòu)建對(duì)組件友好的前端工程化方案 Turbo。主要有:

1.支持前后端同構(gòu)渲染,讓用戶更早看到內(nèi)容
2.簡化 Flux 流程,數(shù)據(jù)流更加清晰易維護(hù)
3.引入 ImmutableJS,保證 Store 以外的數(shù)據(jù)不可變
4.采用 cursor 機(jī)制,保證數(shù)據(jù)修改/獲取同步
5.支持 Hot Module Replacement,改進(jìn)開發(fā)流自動(dòng)化
6.通過這些改進(jìn),一線工程師可以方便的使用各種組件,專注在業(yè)務(wù)本身上。開發(fā)框架層面的支持也反過來促進(jìn)了組件化的發(fā)展,大家更樂于使用一系列組件來構(gòu)建頁面功能。

小結(jié)
發(fā)現(xiàn)痛點(diǎn)、分析調(diào)研、應(yīng)用改進(jìn)的解決問題思路在組件化開發(fā)實(shí)踐中不斷運(yùn)用。歷經(jīng)三個(gè)大版本的演進(jìn),組件化開發(fā)模式有效緩解了業(yè)務(wù)發(fā)展帶來的復(fù)雜度提升的壓力,并培養(yǎng)工程師具備小而美的工程思想,形成共建共享的良好氛圍。毫無疑問,組件化這種“分而治之”的思想將會(huì)長久地影響和促進(jìn)前端開發(fā)模式。美團(tuán)現(xiàn)在已經(jīng)準(zhǔn)備好,迎接新的機(jī)遇和挑戰(zhàn),用技術(shù)的不斷革新提升工程師的幸福感。

標(biāo)簽:雅安 廊坊 伊春 沈陽 包頭 臺(tái)灣 江蘇 德宏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《剖析美團(tuán)網(wǎng)站前端的組件化開發(fā)經(jīng)驗(yàn)》,本文關(guān)鍵詞  剖析,美團(tuán),網(wǎng)站,前端,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《剖析美團(tuán)網(wǎng)站前端的組件化開發(fā)經(jīng)驗(yàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于剖析美團(tuán)網(wǎng)站前端的組件化開發(fā)經(jīng)驗(yàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    好操啊在线观看免费视频| 黄色大片在线免费观看| 成人亚洲免费视频| 精品美女视频| 国产精品久久久久久久久搜平片| 成人网址大全| 国产主播色在线| 日韩av在线不卡| 国产一区二区在线|播放| wwwxx免费| 91久久人澡人人添人人爽欧美| 国产网站在线| 亚洲h动漫在线| 国产精品一区二区三区四| 天天免费亚洲黑人免费| 精品国产一二| 777精品久无码人妻蜜桃| 国产精品不卡av| 91露出在线| 制服丝袜在线一区| 欧美乱做爰xxxⅹ久久久| 99久久精品免费精品国产| 国产激情自拍视频| 欧美资源一区| 嫩草在线播放| 一二三四区在线| 成人免费毛片高清视频| www视频在线免费观看| 国产色婷婷国产综合在线理论片a| 波多野结衣爱爱| 国产真实夫妇交换视频| 午夜视频在线网站| 日韩欧美一二三四区| 欧美老肥妇做.爰bbww| 国产欧美中文在线| 日韩精品在线看片z| 久久久视频精品| 99中文视频在线| 国产女王在线**视频| 国产成人在线视频免费观看| 91tv官网精品成人亚洲| 日韩精品福利片午夜免费观看| 五月激情丁香婷婷| 亚洲欧美综合在线精品| 欧美成人手机在线视频| 国产免费av一区| 国产精品久久99| www污网站在线观看| 禁断一区二区三区在线| 久久新电视剧免费观看| 日韩av在线免费观看不卡| 亚洲三级理论片| 成人精品中文字幕| www.亚洲一区| 欧美熟妇一区二区| 91精品一久久香蕉国产线看观看| 亚洲女与黑人做爰| 日韩视频免费观看高清完整版| 96成人在线视频| 97se亚洲国产综合在线| 国产精品午夜久久久久久| 国产伦精品一区二区三区四区视频_| 精品国产老师黑色丝袜高跟鞋| 日韩一级在线观看| 好吊视频一区二区三区四区| 久久99久国产精品黄毛片色诱| 欧美日韩国产综合视频在线| av黄色在线网站| ●精品国产综合乱码久久久久| 国产美女视频一区二区三区| 少妇高潮久久77777| 欧美xxxx黑人xyx性爽| 久久精品国产清高在天天线| 日韩网站免费观看| 亚洲a在线视频| 久草在线免费福利资源| 美女啪啪无遮挡免费久久网站| 欧美日韩成人一区二区三区| 91国偷自产中文字幕久久| 欧洲久久久久久| 中文亚洲欧美| 欧美a∨亚洲欧美亚洲| 久久99蜜桃精品| 欧美剧在线免费观看网站| 国产精品日本一区二区| 国产一区二区视频免费在线观看| 久久国产精品久久| 亚洲欧美一区二区精品久久久| aaa大片免费观看| 亚洲网站在线看| 91精品国产麻豆国产自产在线| 中文字幕天天干| 欧美一区二区三区四区五区| 国产伦精品一区二区三区在线观看| 二区在线播放| 国产成人自拍在线| 亚洲av无码成人精品区| 91超碰这里只有精品国产| 一级片avav网址| 91精品国产91久久久久久黑人| 免费在线黄色网址| 黄网在线观看网址入口| 色婷婷国产精品综合在线观看| 深夜激情久久| 欧美艳星kaydenkross| 欧美激情中文字幕乱码免费| 久久无码人妻一区二区三区| 日韩亚洲欧美在线观看| 午夜免费久久看| 性色视频在线观看| 少妇太紧太爽又黄又硬又爽小说| 97电影在线观看| 成全视频在线播放大地| 国产女人18水真多毛片18精品| heyzo高清在线| 手机电影在线观看| 亚洲国产精品久| 精品国产乱码久久久久久蜜臀网站| 26uuu亚洲国产精品| 在线观看福利一区| ady日本映画久久精品一区二区| 欧美久久电影| 欧美激情第一页xxx| 大地资源中文在线观看免费版| 国产精品99久久99久久久二8| 美国av一区二区| 亚洲精品91美女久久久久久久| 欧美成人性福生活免费看| www久久久久久久| 中国免费黄视频| 日本一本在线免费福利| 五月天精品在线| 欧美高清dvd| 精品美女在线观看| 欧美在线播放| 91网站在线观看免费| 天天做天天摸天天爽国产一区| 日韩激情视频在线观看| 欧美少妇一区二区三区| 一区二区三区四区在线观看国产日韩| 精品剧情v国产在线观看| 97超碰欧美中文字幕| 精品999日本久久久影院| 欧美精品自拍偷拍| 久久久久久久久久久免费视频| 欧美一级成年大片在线观看| 亚洲精品美女在线观看| 曰皮视频在线播放免费的| 日韩成人av在线播放| 人人在草线视频在线观看| 国产成人亚洲综合91精品| 在线亚洲色图| 国产午夜福利在线播放| 欧美 日韩 国产一区二区在线视频| 麻豆精品在线播放| 午夜不卡视频| 久久亚洲a v| 日韩国产在线观看| 国产成人av在线影院| 久久视频国产精品免费视频在线| 久久97超碰国产精品超碰| 91久久精品国产| 日韩久久精品一区| 中文字幕久久亚洲| 国产亚洲精品bt天堂精选| 亚洲欧洲成人av每日更新| 久久精品国产欧美激情| 91网站在线观看免费| 偷窥自拍亚洲色图精选| 国产成人精品一区| 国产日韩精品中文字无码| 欧美精品一区二区三区在线| 精品久久久久久久久久久久| 成人a视频在线观看| 97国产一区二区精品久久呦| 不卡中文字幕在线| 欧美aⅴ99久久黑人专区| 精品国产乱码久久久久久虫虫漫画| 午夜在线观看一区| 国产欧美日韩综合一区在线播放| 超碰av女优在线| 欧洲成人性视频| 国产三级视频在线播放线观看| 嫩草视频免费在线观看| 国产美女黄色| 久久国产精品一区二区三区| 一区二区三区日韩视频| 蜜乳av一区二区| 国产精品久久久久精k8| 西西午夜视频| 日韩欧美亚洲一区二区| 婷婷伊人综合| 三级小说一区| 日韩亚洲国产欧美| 精品国产乱码久久久久久免费| 久久夜色精品国产欧美乱极品| 国产又色又爽又黄又免费| 黄色免费av| www亚洲天堂| 污片视频在线免费观看| 超碰在线播放91| 日韩欧美国产小视频| 热色播在线视频| 黄色三级视频片| 手机免费看av| 国色天香久久精品国产一区| 午夜影院韩国伦理在线| 日韩毛片高清在线播放| 亚洲第一综合色| 免费污视频在线一区| 日韩久久免费av| 亚洲图片久久| 成人一区二区视频| 日本学生初尝黑人巨免费视频| 日本中文字幕在线播放| 国产精品探花一区二区在线观看| 三级性生活视频| 欧美日韩国产高清一区| 在线看黄色av| 欧美1区3d| 一区二区在线电影| 一个色免费成人影院| 亚洲精品日韩一| 热久久最新网址| 中文久久精品| 国产亚洲精品久久久久久移动网络| 一区二区三区在线观看视频| 精品国产青草久久久久福利| 日韩综合av| 日韩一区二区免费电影| 亚洲另类视频| 91国在线视频| 国产精品欧美一区二区| 成人免费福利在线| 亚洲欧洲色图| 深夜成人在线观看| 国产又大又黄又粗的视频| 永久免费精品视频| 欧美成人高清视频在线观看| 最新亚洲国产精品| 亚洲视频在线观看一区二区| 欧美在线精品免播放器视频| 久久久久久少妇| 国产一区二区三区四区三区四| 韩国一区二区三区视频| 亚洲一级电影视频| 69成人精品免费视频| 国产精品一区二区三区av麻| 久久网福利资源网站| 黄色免费视频| 2019日本中文字幕| 国产综合欧美| 污片在线观看一区二区| 国产av精国产传媒| 在线视频精品一区| 三级影片在线观看欧美日韩一区二区| 日韩一区二区在线看| 欧美精品欧美精品| 91一区二区三区| 成人福利免费观看| 国产精品久久人| 中文字幕免费高清在线| 国产91色综合久久免费分享| 免费看黄色片的网站| 91在线无精精品白丝| 影音先锋黄色网址| 精品欧美日韩在线| 中文有码在线观看| 少妇荡乳情欲办公室456视频| 国语对白在线播放| 黄色av电影在线播放| 欧美久久精品午夜青青大伊人| 国产成人午夜片在线观看高清观看| 欧美 另类 交| 欧美日韩成人综合| 视频一区日韩| 天干天干啦夜天干天2019| 国产成人av网址| 在线免费观看你懂的| 日韩女优电影在线观看| 伊甸园精品99久久久久久| 深夜福利亚洲导航| 欧美日韩综合久久| 国产亚洲成年网址在线观看| 日本国产欧美一区二区三区| 丁香婷婷综合网| 国模吧一区二区| 国产精品成人69xxx免费视频| 欧美一级免费大片| 国产99久久精品| 午夜精品一区二区三区在线播放| 国产精品福利一区| 欧美日韩在线网站| 男人添女荫道口图片| 亚洲成人av动漫| 五月婷婷六月色| 成人的网站免费观看| 精品人妻一区二区三区四区| 久久99热只有频精品91密拍| 三级欧美在线一区| 1024精品一区二区三区| av中文字幕在线不卡| 91系列在线播放| 18激情网站| 国产一级二级三级在线观看| 日本少妇性高潮| 国产jizzjizz一区二区| 国产亚洲精品激情久久| 日韩三级一区二区三区| 在线观看免费视频黄| 九九久久婷婷| 久久精品第九区免费观看| 亚洲最大黄色| 色综合天天综合网国产成人综合天| 欧美日韩国产小视频| 玖玖玖精品中文字幕| 国产精品一区二区三区四区色| 一级黄色免费毛片| 中文字幕观看av| 亚洲xxxxxx| 国产精品不卡一区| 女厕盗摄一区二区三区| 亚洲第一色在线| 另类综合日韩欧美亚洲| 国产丝袜精品丝袜| 在线观看免费国产成人软件| 青青草原av在线| 宅男午夜视频|