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

模塊化高擴展性的前端框架 KISSY

開發 前端
淘寶在 2012 年 12 月 25 號發布了 KISSY 最新版本 1.3, 在這篇文章中我將對 KISSY 1.3 結合在淘寶的實踐做一次全面概述,希望能對想了解淘寶前端技術的朋友有所幫助。

介紹

伴隨著淘寶的快速發展,誕生已三年多的 KISSY 也取得了巨大的成長。 目前應用于阿里集團的多個業務團隊,特別是淘寶,天貓,一淘的絕大多數業務都采用了 KISSY, 滿足了從前臺的 web page 到后臺的 web app 再到移動端應用(起步階段)的廣泛需求。

在阿里集團以外也有不少公司和個人使用 KISSY,交流旺旺群成員已將近千人, 在 github 源碼庫也時常有外部人員參與提交 issue,發起 pull request,另外在 oschina 等開源社區也受到了一定的關注。

淘寶在 2012 年 12 月 25 號發布了 KISSY ***版本 1.3, 在這篇文章中我將對 KISSY 1.3 結合在淘寶的實踐做一次全面概述,希望能對想了解淘寶前端技術的朋友有所幫助。

為什么選擇 KISSY

KISSY 作為國內一個完全自底向上開發起來的框架,誕生三年來歷經淘寶的各種業務變化的考驗,體現了 KISSY 的可擴展性,高穩定性和可維護性。 它在以下方面具有一定優勢:

·擁有大量的中文文檔: 方便不熟悉英文的國內開發者快速入門學習。

·在國內具備一定的社區規模: 通過旺旺群,google group,微博,官方網站等用戶隨時可以和開發人員快速交流。

·開發便捷: 在模塊化,組件以及工具輔助方面形成了一套完善的機制,可以高效應對日常的需求開發。

·綜合借鑒國際先進的框架類庫設計:

·在吸收 jquery 穩定的 dom 核心之外提供了模塊化,按需加載的基礎架構。

·在學習 yui 堅實的架構之外著重于組件開發,積累了一批貼近淘寶應用的組件集。

·在研究 extjs 優秀的組件設計之外探索輕量級,可擴展的組件開發,同時滿足 web app 與 web page 的需求。

·應用場景廣泛: 在各種設備上都有所支持。

·可以使用 seed 和 core 簡單快速地搭建頁面

·也可以進一步使用 KISSY 的大量組件構建富客戶端應用

·也可以使用統一的 API 開發移動應用

·更可以利用 KISSY 靈活的模塊化機制高效進行大規模團隊協作

不過由于 KISSY 開發時間還不長,在組件完備性以及可測試性上有待進一步完善,我們堅信這種情況會隨著團隊的不斷努力而逐步解決。

架構

KISSY 的架構由淘寶復雜多變的業務決定,在松耦合、無污染、模塊化的核心前提下,也從眾多優秀類庫和框架的思路得到一些啟發。 如圖1所示:

圖1: KISSY 整體架構圖

KISSY-architecture

·***層的 seed 是類似目前流行的 AMD 模塊化機制實現,為了更高效地共享通用組件加入了自動 combo 的支持, 另外 seed 也包含一些像 each(循環數組以及對象),mix(合并對象),param(編碼對象為 url), ready(等待 dom ready)等常用的靜態工具方法以及 Path,Uri,Promise,UA 等模塊化需要用到的基礎類。

·seed 之上的第二層是處理 dom 兼容性的核心模塊,其中每個模塊都是由更小的模塊打包合并而來。 特殊之處在于 KISSY 把一些不標準瀏覽器的兼容代碼單獨抽取成內部模塊,用戶可用的外部模塊會根據不同的設備分別依賴不同的內部模塊。 雖然加載不同的具體實現模塊代碼,但是最終提供給用戶的是一致的模塊名,api 以及漸進增強的能力。 例如用戶使用 event 模塊,在 touch 設備上會加載 event/touch 模塊從而可以使用一些手勢事件, 而在 ie<9 下會加載 event/hashchange 模塊,以類似 es5-shim 的方式來補全瀏覽器的能力,提供給用戶統一的 api。

·第三層為組件架構層。提供包括模擬 es5 屬性管理,插件和多繼承機制的 rich-base 模塊, 所有 UI 組件渲染機制的基類 component 模塊以及具備一定邏輯的模板引擎 xtemplate。

·第四層為獨立可用的 KISSY 組件,用戶可自由組合繼承搭建最終頁面。包括:

·工具模塊,例如拖放,調整大小,操作 swf,操作樣式表,mvc(model,router)架構等。

·UI 組件,例如彈窗,菜單,標簽,日歷等。

·最外層為 KISSY gallery,KISSY 社區開發的一些通用模塊會放入 gallery 中, 從而可以方便得在所有使用 KISSY 的團隊間共享模塊。 如果該模塊確實十分通用則會經過重構放入 KISSY 自身。

 #p#

模塊化機制

介紹

由于淘寶業務的復雜,為了提高代碼的可維護性和重用性,KISSY 在早期就引入了簡單的模塊化機制,并且隨著前端技術的發展而不斷改進。 KISSY 1.3 的模塊化機制與目前的 AMD 規范比較類似,并根據淘寶自身業務特點加入了自動 combo 功能。

注:combo 舉例:請求 a.tbcdn.cn/??a.js,b.js 相當于把 a.tbcdn.cn/a.js 與 a.tbcdn.cn/b.js 的文件內容合并后返回。

KISSY 之外的每個模塊必須屬于一個包,一個包內可以有很多相關模塊,它們具備相同的加載基地址。 包的設計一方面通過約定優先配置的原則可以減少同一個包內多個模塊的請求路徑配置, 另一方面也方便了部署在不同地址的多個應用間互相調用模塊。 所以開發應用前請先配置包地址,例如:

  1. KISSY.config('packages', {  
  2.     myapp: {  
  3.         base:'./x' 
  4.     }  
  5. }); 

之后在 x 目錄下建立 myapp 目錄,并在 myapp 目錄下新建模塊 a 對應的代碼文件: a.js

  1. KISSY.add(function(S,JSON){  
  2.     return JSON.stringify({a:'ok'});  
  3. },{  
  4.     requires:['json']  
  5. }); 

以及依賴 a 的入口主模塊 main 的代碼文件: main.js

  1. KISSY.add(function(S,DOM,a){  
  2.     S.ready(function(){  
  3.         DOM.text(document.body,a);  
  4.     });  
  5. },{  
  6.     requires:['dom','./a']  
  7. }); 

應用模塊可依賴 KISSY 自身模塊,例如以上的 dom json。

***新建 index.html 來調用應用模塊:

  1. // ... 上述包配置  
  2.  
  3. KISSY.use('myapp/main',function(){  
  4.     alert('page loaded');  
  5. }); 

工具支持

打開上述 index.html 會發現鏈接數不少,有從淘寶 cdn 的鏈接也有本地的鏈接。 因此 KISSY 提供了配套工具 KISSY Module Compiler 進行腳本打包以及抽取依賴后用 cdn combo 來解決這個問題, 對工具有興趣可查看參考資料中的鏈接地址,以下僅作簡單介紹:
腳本打包

如果應用腳本非常多,可以用 module compiler 將入口模塊 main 以及其依賴的所有應用模塊打包壓縮到 main-min.js 中, 同時 module compiler 會生成一份依賴描述文件:

  1. KISSY.config('modules',{  
  2.     'myapp/main':{  
  3.         requires:['dom','json']  
  4.     }  
  5. }); 

接著設置 KISSY 啟用 combo 模式,并載入上述的依賴描述文件:

  1. KISSY.config('combine',true); 

***修改 index.html 引用 seed-min.js,打開網絡面板后會發現現在只產生兩個鏈接請求:

  1. http://a.tbcdn.cn/s/kissy/??dom/base,json/native.js  
  2.  
  3. http://localhost/myapp/main-min.js 

注:在 ie<9 等非標準瀏覽器下***個鏈接地址會加上 dom/ie json/json2 等腳本地址

抽取依賴

如果應用腳本不多,并且自身服務器也支持 combo 的話,那么可以采用更加靈活的抽取依賴后全部 combo 的解決方案。 這時 module compiler 會做兩件事情:

補全模塊名,例如 a.js 變為

  1. KISSY.add('myapp/a',function(S,JSON){  
  2.     return JSON.stringify({a:'ok'});  
  3. },{  
  4.     requires:['json']  
  5. }); 

將各個模塊的依賴收集為一個單獨的文件,例如

  1. KISSY.config('modules',{  
  2.     'myapp/main':{  
  3.         requires:['dom,','./a']  
  4.     },  
  5.     'myapp/a':{  
  6.         requires:['json']  
  7.     }  
  8. }); 

接著設置 KISSY 啟用 combo 模式,并載入上述的依賴描述文件:

  1. KISSY.config('combine',true); 

訪問 index.html,打開網絡面板會發現同樣只產生兩個鏈接請求:

  1. http://a.tbcdn.cn/s/kissy/??dom/base,json/native.js  
  2. http://localhost/myapp/??a.js,main.js 

KISSY-PIE

KISSY 還提供了一套基于約定的前端打包解決方案 KISSY-PIE,通過統一的約定,提升應用的可維護性,將大家從重復的打包腳本的編寫中解放出來。

KISSY-PIE 包括了以下功能:

·JS(KISSY 的模塊編譯,HTML 模板到 KISSY 模塊編譯,代碼壓縮)

·CSS(基于 CSS-Combo 的合并,壓縮)

·Less

·Sass

并且在命令行之外還提供了 web 操作界面,如圖2所示:

圖2: KISSY-PIE 打包界面

#p#

組件機制

核心

KISSY 目前包括眾多即開即用的組件, 包括工具性質的例如 dd(拖放),resizable(調整大小),swf(插入flash),stylesheet(操作樣式表)等 和 UI 性質的例如 overlay(彈窗),menu(菜單),menubutton(菜單按鈕),imagezoom(放大鏡),editor(編輯器), tabs(標簽),tree(樹)等。 這些組件都基于公共的 rich-base 以及 component 模塊: rich-base 和 component 模塊充分利用了 javascript 語言的 mixin 和原型鏈繼承, 提供了屬性綁定,類繼承,擴展以及插件等特性。

其中的重點是 Component,它是所有 UI 組件的基類,提供了兩種通用的渲染方式:

·組件實例由 javascript 完全渲染 dom 樹。其中對于 menu 等組件在 javascript 完全渲染的情況亦可以通過 json 初始化內部嵌套組件。例如

  1. KISSY.use('menu',function(S,Menu){  
  2.     // javascript 渲染一個菜單到 body  
  3.     new Menu({  
  4.         children:[{  
  5.             content:'item1' 
  6.         }]  
  7.     }).render();  
  8. }); 

·從已有的 dom 樹節點得到組件實例。

下面以 KISSY 中常用的一個組件 Overlay 為例講解下,首先看圖3類結構圖:

圖3: Overlay 類結構圖

Overlay 繼承自 Component,然后靜態地由一些分散的功能類擴展而來,包括定位功能類,對齊功能類,關閉功能類,遮罩層功能類, 這些功能類底層利用 javascript 的 mixin 功能將自己的方法和屬性匯入到 Overlay 類中,使得最終的 Overlay 具備了這些能力。

組件在運行時也可以選擇性依賴某些插件模塊,將插件的功能注入到組件中去, 既避免了一個組件過于功能繁多導致的文件過大,又大大增強了組件的可擴展性。

以下為 Overlay 的使用示例代碼:

  1. KISSY.use('overlay,component/plugin/resize',function(S,Overlay,ReizePlugin){  
  2.  
  3.     // 完全由 javascript 將組件實例渲染到 body 中  
  4.     new Overlay({  
  5.         content:'test' 
  6.     }).render();  
  7.  
  8.     // 從已有的 dom 樹節點生成 Overlay 實例  
  9.     var overlay = new Overlay({  
  10.         srcNode:'#existing' 
  11.     }).render();  
  12.  
  13.     // 運行時加入調整大小的插件能力  
  14.     overlay.plug(new ReizePlugin({  
  15.         handles:['t']  
  16.     }));  
  17.  
  18. }); 

Brix

除了 KISSY 自身的組件機制,一淘開發人員根據自己的應用特點在組件開發和使用上找尋了另一條途徑。即 Brix 解決方案:

·基于統一的渲染方式:模板(tmpl)和數據(data)產生html片段后使用 innerHTML 到 DOM 節點中.

·提取子模板,結合數據的更新,達到局部刷新,開發者不需要再關心頁面的表現,而專心于數據的變化。

·DOM 節點自定義屬性設置組件標志,Brix 提供 Pagelet 按照統一的方式實例化組件。

圖4: Brix 類庫結構

設備普適性

當前 javascript 的使用范圍越來越廣,平臺包括 pc 瀏覽器與讀屏器,nodejs,移動端瀏覽器以及各種外殼,window8 等。 KISSY 也盡量在各個平臺給予支持,保證統一的開發體驗。

在 nodejs 上 KISSY 通過調整模塊加載器使得 KISSY 可以直接將自身的模塊加載到 nodejs 中使用。例如

·可以使用 KISSY 的 UA 解析模塊來分析日志中的 UA 串

·可以載入 jsdom 模塊在 nodejs 環境下做單元測試

·用 xtemplate 在服務器端渲染前端模板

·使用 KISSY 的 htmlparser,color 等工具模塊

經統計約有 1000 萬殘疾人用戶在使用淘寶,其中不少是受影響***的盲人朋友,他們實際上是通過讀屏器來和淘寶交互, KISSY 組件通過遵循 WAI-ARAI 規范來給視力受損的朋友提供無障礙的訪問環境,網上人人平等。

KISSY 也計劃對 windows8 進行支持,在即將發布的 tmall windows8 app 中僅僅通過使用 KISSY 的模塊化機制以及一些語法糖 API 就可以達到和平常開發一樣的高效。

隨著用戶越來越多地在移動設備上購物產生交易,移動應用在流量的比重上也越來越多,KISSY 及時適配移動設備, 目前在兩方面進行了支持:

·根據設備條件加載。對于移動端由于網絡速度等原因對于文件大小比較敏感,KISSY 為了保證一致的 API 又不能隨意刪減功能, 因而采取了獨立兼容模塊的方法來保持瘦身。在架構一節也闡述過,KISSY 對基礎核心模塊中的兼容非標準瀏覽器的模塊進行選擇性加載, 同時移動設備上都是標準瀏覽器,從而可以大大減少實際下載到用戶設備上的代碼大小。部分組件也實行了拆分,將 pc 的功能交互獨立到單獨的模塊,在移動觸摸設備上只加載觸摸交互需要用到的模塊。

·漸進增強 API。對于觸屏設備,很多交互是建立在手勢操作上。而手勢操作除了在 safari 上有 gesture 事件做有限支持外, 在 android 上則完全沒有對應事件。 得益于 KISSY 易于擴展的事件機制,KISSY 在底層多點觸摸 touch 事件的基礎上模擬出了 tap rotate pinch 等觸屏設備上獨有的事件,這對于用戶則是透明,用戶完全可以把這些事件當做原生事件來使用,例如

  1. KISSY.use('event',function(S,Event){  
  2.     // 監聽 div 上的 tap 事件  
  3.     Event.on('#div','tap',function(){  
  4.     });  
  5. }); 

ZOOJS

另外淘寶北京團隊還基于 KISSY 核心打造了專門面向 Web 無線設備的一整套工具庫 ZOOJS, 包含控件級的事件支持、觸屏行為的封裝、富控件、皮膚、App的基礎架構等。 這套獨特的 Web 無線解決方案力爭將 HTML5 和 CSS3 的優勢發揮至***,做到即調即用。

測試與持續集成

KISSY 經過三年的開發代碼庫已經相當龐大了,模塊間還常常有依賴關系,修改代碼有牽一發而動千鈞的后果。 為了應對此問題,KISSY 也在逐漸完善單元測試,自動化測試與持續集成。

單元測試

KISSY 一個模塊的常見目錄結構如圖5所示:

圖5: 模塊目錄結構

其中 tests 目錄下為測試資源,runner 目錄下啟動測試的 html 文件,specs 下為對應模塊的單元測試代碼。 KISSY 采用的單元測試框架為 jasmine ,測試代碼舉例如下:

  1. describe('S.mix',function(){  
  2.     it('works for simple case',function(){  
  3.         expect(S.mix({x:1},{y:1})).toEqual({x:1,y:1});  
  4.     });  
  5. }); 

然后打開啟動測試的 html 文件 即可看到圖6所示的單元測試結果:

圖6: 單元測試結果

持續集成

為了提高測試效率,KISSY 還依賴 travis 平臺和 phamtomjs 進行持續集成測試。 每次提交代碼都會在 travis 平臺上啟動 phantomjs 來運行 KISSY 所有模塊的單元測試代碼。 如圖7所示:

圖7: travis 平臺上的 KISSY

淘寶應用場景舉例

淘寶目前的絕大多數頁面已經采用 KISSY 搭建,這次我選取兩個大家使用比較多的應用來介紹下 KISSY 在淘寶的實踐:

店鋪頁面

店鋪頁面是商家店鋪的門戶,除了淘寶頁頭之下都可以由商家自定義內容,如圖8所示:

圖8:典型的店鋪頁面

可以看出頁面本身就是區塊化的組織,在程序內部也是分成很多個模塊,例如店內搜索模塊,寶貝分類模塊,銷量統計模塊等, 每個模塊負責頁面一塊區域的交互實現,這些模塊又會調用 KISSY 的模塊來實現自身的邏輯。 而每個商家的店鋪可能使用到的區塊并不相同,這也意味著每個商家店鋪所用到的程序模塊也不相同。

店鋪模塊與 KISSY 模塊依賴關系如圖9所示:

圖9:店鋪模塊與 KISSY 模塊的關系

在實際開發中配置店鋪應用為一個包,其內的所有模塊都放入這個包內,***由頁面初始化腳本加載當前店鋪需要的模塊列表。例如:

  1. KISSY.use('shop/search,shop/category,...'); 

在線上會發出兩個 combo 請求:一個為店鋪頁面需要的應用模塊集,一個為 KISSY 自己的模塊集,例如

  1. http://a.tbcdn.cn/s/kissy/1.3.0/??dom/base.js,event/base.js,overlay.js...  
  2.  
  3. http://a.tbcdn.cn/p/shop/??search.js,category.js... 

寶貝詳情應用

寶貝詳情頁面用來展示商家單個商品的詳細信息,評價,成交趨勢等信息,并為下一步購買做準備,是目前淘寶訪問量***的頁面。

該應用和店鋪應用緊密相關,從頁面可以看出,很多區塊和店鋪頁面對應區塊相同,實際上在代碼層面也是引用同一份模塊, 首先寶貝詳情應用和店鋪應用一樣加載當前頁面用到的店鋪模塊,然后再加載這個頁面本身的應用模塊。 但是寶貝詳情業務本身邏輯十分復雜,若像店鋪應用一樣也是采用模塊 combo 的方式則會導致請求 url 過長, 進而 KISSY 會對過長的 combo url 拆分成多個短的 url,反而適得其反。 因此這里會把寶貝詳情頁自身的模塊打包合并,將自己模塊的主模塊和依賴模塊都合并到主模塊中去, 最終線上會發出三個請求,其中兩個為 combo 請求,一個為非 combo 請求,例如:

  1. http://a.tbcdn.cn/s/kissy/1.3.0/??dom/base.js,event/base.js,overlay.js...  
  2. http://a.tbcdn.cn/p/shop/??search.js,category.js...  
  3. http://a.tbcdn.cn/p/detail/main.js 

總結

KISSY 才剛剛處于成長初期,相對于國外成熟框架尚有不小差距,不過依然承受住了淘寶復雜多變業務的考驗。 下一步 KISSY 會繼續完善基礎組件例如 date,datasource,selector,graphics 等, 重構已有組件例如 switchable,calendar 等, 增加 package manager 方便基于 KISSY 模塊的提交與共享,補全測試用例,實現代碼覆蓋率檢測,不斷提高運行穩定性。 將來我們堅信 KISSY 會隨著淘寶的發展而繼續成長,也會隨著國內外前端技術的不斷發展而不斷進步。 希望有興趣的你也能加入到 KISSY 開發中,一起學習進步,享受成長的樂趣。

原文鏈接:http://ued.taobao.com/blog/2013/03/modular-scalable-kissy/

責任編輯:張偉 來源: 淘寶UED
相關推薦

2024-04-18 14:19:39

UPS系統模塊化數據中心

2012-06-04 11:04:46

虛擬化

2020-08-18 08:04:16

DubboSPI框架

2017-05-08 08:44:07

TCP負載均衡擴展性架構

2020-10-28 08:07:58

TCP負載均衡網絡協議

2023-12-20 09:26:20

高可用高吞吐高擴展性

2021-09-02 09:42:11

測試軟件可擴展性開發

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2010-06-30 17:15:39

向外擴展SQL Ser

2010-07-21 11:21:05

SQL Server

2010-07-01 11:38:13

向外擴展 SQL Se

2022-09-05 15:17:34

區塊鏈比特幣可擴展性

2018-04-10 14:38:10

區塊鏈

2009-09-03 17:18:40

C#擴展性對象模型

2015-05-13 17:15:01

Elasticsear分布式搜索插件

2022-09-05 09:01:13

前端模塊化

2023-10-06 12:08:53

Java代碼

2009-09-03 17:33:08

C#常規擴展性模型

2013-08-20 15:31:18

前端模塊化
點贊
收藏

51CTO技術棧公眾號

国模叶桐国产精品一区| 色综合久久久网| 91中文精品字幕在线视频| 中文乱码字幕高清一区二区| 亚洲人体在线| 一区二区在线观看免费| 国内视频一区二区| 五月婷婷丁香在线| 亚洲精品99| 精品久久久久久久久久久院品网 | 91另类视频| 亚洲色图一区二区三区| 国产麻豆乱码精品一区二区三区| 一区二区三区在线观看av| 国产精品97| 日韩经典第一页| 亚洲一区精品视频在线观看| 久久香蕉av| 国产欧美日韩综合精品一区二区| 亚洲伊人久久大香线蕉av| 国产精品xxxx喷水欧美| 欧美wwwww| 亚洲二区中文字幕| 99re精彩视频| а√天堂中文资源在线bt| 国产精品毛片久久久久久| 福利精品视频| 在线视频你懂得| 亚洲永久网站| 色综合久久悠悠| 欧美成人久久久免费播放| 女一区二区三区| 91麻豆精品久久久久蜜臀| 人妻有码中文字幕| 污污的网站在线免费观看| 国产香蕉久久精品综合网| 国产高清自拍一区| 国产美女免费看| 日韩精彩视频在线观看| 538国产精品一区二区免费视频| 欧美性生给视频| 国产欧美日韩在线一区二区 | 国产ts一区二区| 国产一级片免费| 91精品动漫在线观看| 中文字幕不卡在线视频极品| aaaaaav| 视频欧美一区| 欧美一区二区三区日韩视频| 亚洲激情在线观看视频| 国产又大又黄又粗| 色资源在线观看| www.亚洲人| 国产精品久久久一区二区三区| 亚洲一区二区色| 天堂va蜜桃一区二区三区漫画版| 456国产精品| 国产无遮挡aaa片爽爽| 欧美日本中文| 欧美国产亚洲精品久久久8v| 成人免费视频网站入口::| 99久久.com| www日韩中文字幕在线看| 欧美大波大乳巨大乳| 美女毛片一区二区三区四区| 亚洲欧洲黄色网| 巨胸大乳www视频免费观看| 成人香蕉社区| 亚洲第一av网| 日韩精品人妻中文字幕有码| 欧美国产不卡| 亚洲欧美成人网| 免费观看a级片| 不卡在线一区| 久久亚洲精品一区二区| 99久久99久久精品国产| 欧美黄色一级视频| 久久久久久噜噜噜久久久精品| 久久久久久久久久久网| 日韩午夜一区| 日韩免费中文字幕| 亚洲av综合一区| 久久99热99| 亚洲在线www| 肥臀熟女一区二区三区| 99在线精品视频| 欧美日韩一区二区三区在线视频| av在线免费观看网| 亚洲日本va午夜在线影院| 欧美这里只有精品| 超级碰碰久久| 欧美肥胖老妇做爰| 欧美夫妇交换xxx| 国产精品三级| 久久资源免费视频| 国产精品自拍视频一区| 久热国产精品| 97av自拍| 免费资源在线观看| 日韩美女视频19| 青草全福视在线| 中文精品无码中文字幕无码专区| 91 视频免费观看| 久久av网站| 亚洲精品www| 亚洲人成人无码网www国产| 99久久99久久精品国产片果冰| 欧美日本精品在线| 国产免费一区二区三区四区五区| 极品少妇xxxx偷拍精品少妇| 国产伦视频一区二区三区| 北岛玲日韩精品一区二区三区| 亚洲乱码日产精品bd| 久久久噜噜噜www成人网| 久久精品超碰| 亚洲国产天堂久久综合网| 极品久久久久久久| 亚洲一级黄色| 国产欧美va欧美va香蕉在线| 刘亦菲久久免费一区二区| 日本一区二区在线不卡| 免费一级特黄毛片| 亚洲欧美专区| 精品一区二区三区四区在线| 毛片a片免费观看| 日本午夜一本久久久综合| 粉嫩av免费一区二区三区| 欧美69xxxx| 日本高清不卡视频| www.美色吧.com| 999成人精品视频线3| 午夜精品福利在线观看| 国产精品区在线观看| 国产欧美一区二区三区鸳鸯浴| 成人精品视频在线播放| av日韩久久| 国产亚洲精品美女久久久久| 国产成人在线观看网站| 国产成人综合自拍| 亚洲一二三区精品| 桃花岛成人影院| 亚洲国产成人久久| 印度午夜性春猛xxx交| 久久精品国产77777蜜臀| 欧美色图亚洲自拍| 麻豆成全视频免费观看在线看| 欧美一区二区三区四区五区| 亚洲色图100p| 日本在线不卡一区| 欧美资源一区| 最新日韩三级| 国产视频亚洲视频| 精品人妻一区二区三区潮喷在线| 北岛玲一区二区三区四区| 精品少妇人妻av一区二区| 久久久精品一区二区毛片免费看| 亚洲一品av免费观看| 午夜精品一区二| 亚洲国产精品久久人人爱潘金莲| 成人夜色视频网站在线观看| 欧美性猛交内射兽交老熟妇| 精品国产一区二区三区2021| 久久午夜a级毛片| 国产精品永久久久久久久久久| 国产精品理伦片| 中文字幕在线综合| 91日韩在线| 成人黄色免费网站在线观看| 成人影欧美片| 精品久久久久99| 国产成人在线观看网站| 久久这里只有精品6| 国产日韩一区二区在线观看| 精品久久美女| 国产欧美va欧美va香蕉在| 麻豆传媒在线观看| 日韩午夜av电影| 国产无遮挡裸体免费视频| 91蜜桃婷婷狠狠久久综合9色| 亚洲熟妇av一区二区三区漫画| 免费欧美一区| 国产精品女主播| 老司机av在线免费看| 日韩精品一区二区三区四区| 中文字幕在线观看免费视频| 久久精品视频一区| 成人av毛片在线观看| 亚洲大胆av| 日本不卡二区| 欧州一区二区三区| 欧美在线视频一区二区| 在线播放日本| 精品国产网站在线观看| 无码一区二区三区| 亚洲私人黄色宅男| 亚洲国产精品无码久久久久高潮| 久久亚洲视频| 国产精品一二三在线观看| 爽爽窝窝午夜精品一区二区| 国产日韩精品电影| av免费不卡| 最近2019年日本中文免费字幕| www视频在线| 91久久久免费一区二区| 麻豆精品一区二区三区视频| www日韩大片| 夜夜爽久久精品91| 亚洲欧美不卡| 久久天天东北熟女毛茸茸| 蜜桃a∨噜噜一区二区三区| 91免费综合在线| 欧美理论影院| 国模精品视频一区二区三区| 成年人免费在线视频| 精品成人一区二区三区| 伊人免费在线观看| 欧美日韩一区二区在线 | thepron国产精品| the porn av| 亚洲免费观看| 桥本有菜av在线| 国产精品亚洲二区| 国精产品一区二区| 久久精品免视看国产成人| 国产成人精品久久久| 成人国产电影在线观看| 久久天天躁夜夜躁狠狠躁2022| 久草在线免费福利资源| 精品国产免费人成电影在线观看四季| 在线播放成人av| 欧美日韩一区二区三区在线免费观看| 久久久一区二区三区四区| 国产精品伦一区| 免费污网站在线观看| 99精品久久只有精品| 日韩欧美一二区| 九一国产在线观看| 亚洲综合区在线| 999精品在线视频| 国产片一区二区| 丰满圆润老女人hd| 91免费版在线| 久久国产精品无码一级毛片 | 亚洲一区二区高清| 老司机成人免费视频| 欧美国产激情一区二区三区蜜月| theav精尽人亡av| gogogo免费视频观看亚洲一| 亚洲精品鲁一鲁一区二区三区| 精品一区二区三区免费| 色悠悠久久综合网| 日韩国产高清影视| av免费网站观看| 日韩精品免费视频人成| 免费日韩视频在线观看| av不卡在线| 亚洲熟妇无码另类久久久| 亚洲人妖在线| 缅甸午夜性猛交xxxx| 亚洲欧洲日本一区二区三区| 很污的网站在线观看| 亚洲每日更新| 波多野结衣家庭教师视频| 亚洲专区一区二区三区| aaa毛片在线观看| 老牛嫩草一区二区三区日本 | 国模娜娜一区二区三区| 色婷婷一区二区三区在线观看| 韩日av一区二区| www.久久com| www.日韩在线| 无码一区二区三区在线| 日本一区免费视频| 国产色无码精品视频国产| 亚洲综合图片区| 日韩精品一区二区在线播放| 精品magnet| 成人a v视频| 欧美日本高清视频在线观看| 国产激情无套内精对白视频| 亚洲第一视频网站| 暖暖视频在线免费观看| 久久精品视频导航| av日韩中文| 国产精品丝袜白浆摸在线| 欧洲大片精品免费永久看nba| 精品国产乱码久久久久久郑州公司| 欧美人与拘性视交免费看| 亚洲免费视频一区| 欧美日韩三区| 欧美精品第三页| 激情深爱一区二区| 亚洲天堂美女视频| 国产午夜三级一区二区三| 伊人久久久久久久久久久久久久| 亚洲成人在线免费| 美女黄页在线观看| 欧美不卡一区二区三区四区| 美女欧美视频在线观看免费| 精品国产一区av| 高潮在线视频| 国产欧美在线看| 黄色美女久久久| 亚洲欧美日韩精品在线| 伊人久久成人| 成年网站免费在线观看| 成人av午夜影院| 无码人妻精品中文字幕| 精品久久久久久国产| 国产农村妇女毛片精品久久| 亚洲精品98久久久久久中文字幕| 成人午夜在线观看视频| 高清欧美一区二区三区| 亚洲伊人精品酒店| 美女亚洲精品| 国精品一区二区| 三上悠亚av一区二区三区| 成人国产电影网| 久久高清内射无套| 欧美中文字幕亚洲一区二区va在线| 亚洲精品一区二区三区蜜桃 | 成人福利片网站| 国产精品第一视频| 日本成人7777| 800av在线免费观看| 免费高清成人在线| 国产呦小j女精品视频| 亚洲一区在线看| 国产麻豆一精品一男同| 中文字幕亚洲字幕| 韩国成人漫画| 国产福利不卡| 欧美88av| 欧美一级免费在线| 中文字幕在线一区二区三区| 中文字幕在线观看视频免费| 亚洲免费视频观看| 国产在线看片免费视频在线观看| 成人3d动漫一区二区三区91| 亚洲精品中文字幕乱码| 日本久久久久久久久久久久| 国产网站一区二区| 久久久久99精品成人片我成大片| 亚洲精品国产精品国产自| 久草在线视频网站| 国产成人成网站在线播放青青| 欧美xxx在线观看| 在线不卡一区二区三区| 国产精品传媒视频| 不卡av电影在线| 亚洲人成网站色ww在线| 中文字幕这里只有精品| 精品毛片久久久久久| 国产日韩亚洲| 三上悠亚ssⅰn939无码播放| 欧美性xxxx| 国产青青草在线| 国产精品第七影院| 99热国内精品| 91亚洲一区二区| 亚洲中国最大av网站| 成人毛片在线免费观看| 久久久久久久久综合| 你懂的在线观看一区二区| 欧洲av无码放荡人妇网站| 久久蜜桃一区二区| 最近中文字幕在线观看视频| 中文字幕日韩视频| 四虎视频在线精品免费网址| 超碰在线免费观看97| 国产精品99久久久久久久vr| 久久午夜无码鲁丝片午夜精品| 精品噜噜噜噜久久久久久久久试看 | 国产一区二区三区久久久| 欧美成人免费看| 亚洲精品91美女久久久久久久| 天天综合网站| 一区二区三区欧美成人| 国产美女在线观看一区| 日本少妇裸体做爰| 一区二区三区美女xx视频| 国产精品高清一区二区| 野外做受又硬又粗又大视频√| 91美女在线视频| 97在线公开视频| 韩国欧美亚洲国产| 日韩欧美国产精品综合嫩v| 色偷偷中文字幕| 午夜精品在线视频一区| 国产粉嫩一区二区三区在线观看 | 日韩精品在线一区二区三区| 久久精品人人爽| 天天躁日日躁成人字幕aⅴ| 冲田杏梨av在线| 午夜在线成人av| 一级毛片视频在线| 韩国成人动漫在线观看| 麻豆91在线播放| 国产成人在线观看网站| 日韩专区在线播放|