《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于Lizard框架Ctrip Wireless H5數據存儲方式的優化
基于Lizard框架Ctrip Wireless H5數據存儲方式的優化
2016年微型機與應用第11期
杜燕忍,葛華勇,王龍
(東華大學 信息科學與技術學院,上海 201620)
摘要: Lizard是針對目前前端開源框架中存在的不足,由攜程研發出的適用于無線移動端開發的框架。Lizard Web App是運行在瀏覽器上的單頁應用,所有加載資源都放在一個html文件上,所有的用戶交互都交給JavaScript,所有的通信都交給Ajax。該文基于Lizard框架實現Hybrid App(混合模式移動應用)的開發,并針對框架中本地存儲方式進行改進,由此提出了擴展store的存儲方式。以多態方式封裝store,由LocalStorage、IndexDB、SQLite by App替換cookie,進而支持多種本地存儲方式,該文只是針對其中一種方式即LocalStorage進行封裝,以提高攜程業務開發效率。
Abstract:
Key words :

  杜燕忍,葛華勇,王龍

 ?。|華大學 信息科學與技術學院,上海 201620)

  摘要:Lizard是針對目前前端開源框架中存在的不足,由攜程研發出的適用于無線移動端開發的框架。Lizard Web App是運行在瀏覽器上的單頁應用,所有加載資源都放在一個html文件上,所有的用戶交互都交給JavaScript,所有的通信都交給Ajax。該文基于Lizard框架實現Hybrid App(混合模式移動應用)的開發,并針對框架中本地存儲方式進行改進,由此提出了擴展store的存儲方式。以多態方式封裝store,由LocalStorage、IndexDB、SQLite by App替換cookie,進而支持多種本地存儲方式,該文只是針對其中一種方式即LocalStorage進行封裝,以提高攜程業務開發效率。

  關鍵詞:Lizard;Hybrid App;JavaScript;Web App;HTML;Ajax;數據存儲方式;無線移動端開發

0引言

  近年來國內外對Native App取得了很多重要的研究成果,但是對Hybrid App研究還比較少?;旌夏J揭苿討茫℉ybrid App)是指介于Web App與Native App這兩者之間的App[1],它雖然看上去是一個Native App,但只有一個UI WebView,里面訪問的是一個Web App,它具有Native App良好用戶交互體驗的優勢和Web App[2]跨平臺開發的優勢。

  隨著HTML5[34]可通過手機瀏覽器運行,而不直接依賴于手機操作系統,并且現在各大手機瀏覽器均支持HTML5[5];Mobile phone中框架的發展(例如PhoneGap)也為Web App的發展提供了契機。主流的Hybrid方案分成三種:以PhoneGap[6]為代表,以WebView作為用戶界面層,以Javascript[78]作為基本邏輯,與中間件通信,再由中間件訪問底層API的方式進行應用開發;以Titanium為代表,通過對開發者提供友好的開發工具,并折中地把這種開發語言轉換成原生語言,最終打包出整個應用;以Three20為代表,在開發原生應用的基礎上,嵌入WebView,但是整體的架構使用原生應用提供。在攜程無線[9]的Hybrid框架中,一開始就選擇了PhoneGap方案,未來攜程App會成為一個平臺。

  本文基于Lizard框架[10]實現Hybrid App的開發,針對原有框架中的本地存儲方式和第三方框架的引用進行改進和優化,并對改進的方法進行實際項目開發,結果與改進之前的結果一樣符合開發項目的要求,驗證了本方法的有效性。

  1Ctrip Wireless H5整體架構圖

  H5整體架構圖如圖1所示。由整體框架可知,無線H5基礎框架主要包含以下部分,各業務模塊需按要求對以下部分進行統一引用。

001.jpg

  (1)第三方框架:zepto、backbone、require、understore等需要統一引用。

  (2)核心框架:Common.js,提供最基礎的UI、網絡通信(ajax)、數據存儲(cookie)等基類,以及UI組件、Widget組件、HybridAPI等組件,需要統一引用。

  (3)H5公共基礎樣式:Main.css,提供最基礎和公共樣式,需要統一引用。

  (4)H5公共業務組件:各類通用的業務組件,比如常旅客、常用地址,需要統一引用。

  (5)H5公共業務模塊攜程(登錄/注冊)、支付等業務模塊,需要統一引用。

2Lizard框架

  2.1框架簡介

002.jpg

  Lizard框架架構如圖2所示,Ctrip.H5.Lizard主要由4個模塊構成:第三方框架、核心框架、公共組件庫、業務組件庫。

  (1)第三方框架:Ctrip.H5.Lizard底層依賴的第三方庫有4個:Zepto、underscore、backbone和Fastclick。

  在Mobile端,Ctrip.H5.Lizard會加載Zepto,在PC端考慮到兼容性的問題,IE內核瀏覽器會采用Jquery,Ctrip.H5.Lizard可以做到對環境自適應進行加載。

  Backbone在Ctrip.H5.Lizard是被定制的,其MVC框架中的Model和Controller的內容根據Ctrip.H5.Lizard適用的環境被復寫。

  Ctrip.H5.Lizard抽取了Fastclick的核心代碼,復寫了移動端的click事件。

 ?。?)核心框架:Ctrip.H5.Lizard實現了Web App的基礎功能。

  在Javascript[1114]中實現了面向對象編程(OOP)的基礎,封裝了Ajax請求,處理了本地環境下的跨域訪問,并對請求做了緩存處理,通過監控Hash的變化,實現View的無縫切換。

  (3)公共組件庫:Ctrip.H5.Lizard的公共組件庫涵蓋了UI組件庫和Widget組件庫兩個模塊組。

  UI組件庫以特定的樣式表為基礎,定制Ctrip Mobile的UI組件,實現了各種交互電話、時間選取等,Widget組件庫提供了功能性組件庫和UI業務組件庫。

  (4)業務組件庫:Ctrip.H5.Lizard的業務組件庫主要包括攜程(登錄/注冊)、支付等業務。

  2.2Lizard算法流程

003.jpg


  Lizard算法流程圖如圖3所示,Lizard渲染數據共分成5個階段:T1~T5。T1:頁面響應時間。此時,用戶通過瀏覽器發起一個請求,當前VIEW的HTML文件返回index.html給瀏覽器,瀏覽器接收到index.html開始解析,之后瀏覽器請求核心框架JS處理。Lizard.js收到請求,此時進入T2階段,即數據通信請求階段。Lizard.js返回核心框架中的JS文件給瀏覽器,瀏覽器收到核心框架中JS傳來的數據,開始解析Model Config,根據Config中的API請求SOA數據,SOA收到瀏覽器的數據請求,此時進入T3階段,即數據通信接收階段。SOA返回數據給瀏覽器,瀏覽器接收到SOA的數據,此時T3階段完成,T4階段開始,瀏覽器根據接收到的SOA數據,開始解析Template,此時DOM生成,但是其為隱藏狀態,此時瀏覽器繼續發送請求給核心JS框架,T4階段完成。此階段又可以稱作DOM穩定階段。JS中的核心框架收到瀏覽器的頁面邏輯請求開始進行處理,此時進入T5階段,即頁面顯示階段。JS返回處理的結果給瀏覽器,瀏覽器收到結果顯示DOM,展示頁面,T5階段完成。其中T1~T4又稱作DOM準備階段,T2~T3稱為通信準備階段,整個T1~T5又叫做Onload階段。Onload是Lizard渲染頁面階段中的View生命周期的一部分。

3Lizard Web App 中View的生命周期

  首先,View的生命周期與攜程無線Hybrid密不可分,圖3Lizard算法架構在一個Hybrid架構的頁面會有兩部分組成:Head和Content。Head是由App提供的Android/IOS原生組件,對應IOSNavigationBar/AndroidActionBar。Content由App提供的WebView加載H5提供的頁面,H5與App約定將一組API綁定在WebView的Window對象中。App通過IOS/Android原生方法調用到Window對象,執行js的方法,這稱之為App Native調用Web。App實現對WebView URL的觀察者模式,H5通過改變URL的哈希值,App會通過解析哈希值的變化執行對應的操作,這稱之為Web調用App Native。Lizard支持Hybrid模式,而Lizard在對Hybrid的設計中,采用了切面編程的思想。Web與Hybrid最后的產品差異就在于入口文件,在入口文件中,會去做初始化,判斷當前的環境,然后以當前環境作為參數,配置相應的設置,切換各種服務在不同環境下的配置。所以從開發者的角度來說,不用關心當前的環境是Web還是App,只需要調用相應的服務即可,剩下的事情交給Lizard自身就可以。

  其次,Lizard中頁面的整體布局代碼如下:

  define(['libs', 'cBasePageView'], function (libs, BasePageView){

  var viewhtml = '<h1>Hello World</h1>';

  var View = BasePageView.extend({

  onCreate: function () {

  this.MYMel.html(viewhtml);

  }

  onLoad: function () {

  this.turning();

  }

  onShow: function () {

  }

  onHide: function () {

  }

  });

  return View;

  });

  在該代碼中顯示了View的4個生命周期回調順序。

  onCreate -> onLoad -> onShow -> onHide

  (1)onCreate

  onCreate是只有在view生成時才會調用的回調。在這個回調中,一般處理View的模板構建、初始化數據設置。onCreate只會在初始化時候執行一次,第二次訪問不會執行。

  (2)onLoad

  onCreate每次調用View時都會首先調用的回調方法。在該回調中需要處理數據請求、View的數據綁定、渲染和View的交互邏輯設置。onLoad的回調中需要執行this.turning()才會宣告view的加載完成,進入到下一個生命周期onShow,onLoad在每次切換View時都會執行,一般在onload中進行Ajax異步數據請求,請求suceess后調用turning方法從而觸發onShow事件。

  (3)onShow

  onShow是新DOM完成渲染之后進入頁面的回調,部分依賴頁面渲染之后的業務邏輯可以綁定在這個回調中,onShow的執行時機為調用turning之后,不調用turning不會執行onShow。

  (4)onHide

  當頁面執行了從A頁面跳轉到B頁面時,A頁面會執行hide方法,將View A推到后臺。onHide就是在A推到后臺之后的回調。

4改進數據存儲方式

  在一個應用中數據的存儲是非常重要的功能,在攜程的應用場景中,大量基礎數據會被緩存下來,比如城市列表、用戶使用歷史等信息。在Web 2.0時代,Web存儲呈現多樣化的趨勢,除了傳統的cookie,HTML5提供了LocalStorage、SessionStorage、ApplicationCache等存儲方案,同時Chrome還支持IndexDB。cookie操作在前端開發過程中經常遇到,當然如果只是用來存儲一些簡單的用戶數據,還是比較容易的,要做的可能只是設置cookie名、值、過期時間等,讀取也只要根據cookie的名讀取相應的cookie值即可。HTML5本地存儲的前身就是cookie,HTML5的本地存儲是使用LocalStorage對象將Web數據持久化在本地。相比較而言,HTML5本地存儲中每個域的存儲大小默認是5 MB,比起cookie的4 KB要大得多。因此,HTML5本地存儲可以看做是加強版的cookie,不受數據大小限制,有更好的彈性以及架構,可以將數據寫入到本機的ROM中,還可以在關閉瀏覽器之后再次打開時恢復數據,以減少網絡流量。同時,這個功能算得上是另一個方向的后臺“操作記錄”,而不占用任何后臺資源,減輕硬件設備壓力,增強運行流暢性,而且存儲和讀取數據的代碼極為簡練。因此在Lizard框架中采用了LocalStorage作為解決方案。同時參考redis在本地實現了小型的文檔型數據庫。

  在store中針對LocalStorage封裝了常用的方法,比如get(tag,oldFlag)獲取已存儲數據、getAttr(attrName,tag)獲取已存儲對象的屬性、set(value,tag,{oldVal})向store中添加數據、setAttr(attrName, attrVal,tag)設置屬性值、remove()移除數據存儲、removeAttr(attrName)移除指定對象的存儲屬性、setExpireTime(time)設置過期時間、setLifeTime(lifeTime,override)設置當前對象的過期時間。

  數據存儲的整個過程如下:

  (1)創建storage項目。

  (2)cStore模塊的引用:Lizard用cStore模塊封裝了LocalStorage的CURD操作,所以在使用數據存儲時,需要引入cStore模塊。Lizard采用require.js作為模塊加載器,所以在使用時需要顯示申明依賴關系。引用代碼如下:

  define([libs,cBasePageView,cStore], function(libs, BasePageView, Store){ ... });這里顯示調用了cStore模塊,在回調的參數對應的位置中給出store對象。

  (3)Store的繼承:Lizard實現了Javascript的OOP開發,為代碼的復用提供了更好的機制。在Store的一般使用中,推薦將具體的Store繼承于cStore模塊,代碼如下:

  var StoreCase = new Base.Class(Store, {

  __propertys__: function () {

  this.key = STORAGE_EXAMPLE //設置在LocalStorage中的key值

  this.lifeTime = 2D//D代表天,H代表小時,M代表分鐘,S代表秒

  }

  initialize: function (MYMsuper, options) {

  MYMsuper(options);

  }

  });

  Store采用單例模式,所以需要通過StoreCase.getInstance()獲得,即var storeinstance = StoreCase.getInstance()。

  (4)Store的增刪改讀:首先設置view模板,其次進行綁定操作。Store提供了3個接口做綁定操作:讀取Store.read(tag),設置/更新Store.set({...}),刪除Store.remove()。

  (5)設置數據的過期時間:對于過期時間的處理,在內部實現中參考redis的數據結構,本文設置了數據的過期時間。在LocalStorage中數據結構如下:

  "value":{

  "inputvalue":"asdfaf"

  }

  "oldvalue":{

  }

  "timeout":"2015/12/19 15:38:37",

  "savedate":"2015/12/19 15:08:37"

  通過對LocalStorage的封裝,可以直接在開發時通過Lizard調用,使開發效率更快。

5結束語

  基于Lizard框架的無線開發,是針對前端開發人員常用的一些方法、功能、組件等進行的一系列封裝,提高了開發人員的工作效率。本文首先對Lizard框架的架構以及工作原理進行簡單闡述,并針對Lizard框架中本地存儲方式進行了優化,在store中封裝了對LocalStorage的讀寫,實現了在Web上的本地緩存。其次,通過對LocalStorage的封裝,cookie與store中的LocalStorage兩種本地存儲方式可以同時使用,更加方便。最后,正如文中所提到的一樣,存儲方式還有很多,諸如IndexDB、SQLite by App等都是以后技術發展的需要。

參考文獻

  [1] 萬曉鳳,雷繼棠,易其軍,等.基于Android智能手機平臺的AMT監測系統的設計[J].電子技術應用,2014,40(3):6870.

 ?。?] 朱華.AJAX在WEB開發中的應用研究[D].哈爾濱:哈爾濱工程大學,2009.

  [3] 陶國榮.HTML5實戰[M].北京:機械工業出版社,2012.

 ?。?] cyRotel.WEB APP,HYBRID APP與NATIVE APP的設計差異[DB/OL].(2013219)[20150825].http://www.uisdc.com/webhybridnativeapp,20141202.

 ?。?] 劉艷平,俞海英.基于HTML5的Application Cache技術研究[J].微型機與應用,2015, 34 (20):6466.

 ?。?] PhoneGap.API介紹[EB/OL]. (20000118)[20160105].http://www.phonegapcn.com/docs/zh/cn/.

  [7] NICHOLAS.JavaScript高級程序設計[M].北京:人民郵電出版社,2006.

 ?。?] 徐浩,周德華,廠卓,等.面向多終端適配的移動中間件的設計與實現[J].計算機科學現代化,2011(9):6568.

 ?。?] 劉妍.無線產品部的無線技術標準及指南[DB/OL].(20141208)[20160105].http://conf.ctripcorp.com/display/Wireless/3.HTML5.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲——在线| 国产曰批免费观看久久久| 欧美成人在线网站| 国内外成人免费激情在线视频网站| 亚洲尤物在线| 久久成人18免费观看| 亚洲人成亚洲人成在线观看| 国产综合香蕉五月婷在线| 性欧美超级视频| 国产午夜亚洲精品理论片色戒| 亚洲一二三四久久| 国产日韩欧美另类| 亚洲欧美在线高清| 国产一区二区三区丝袜| 亚洲成色999久久网站| 亚洲小视频在线观看| 欧美激情一区二区三区在线视频观看| 在线精品高清中文字幕| 亚洲人成在线播放网站岛国| 亚洲精品永久免费精品| 久久久亚洲人| 国产一级一区二区| 欧美日韩午夜在线视频| 国产片一区二区| 欧美伦理影院| 亚洲国产第一页| 国产精品jvid在线观看蜜臀| 亚洲综合电影一区二区三区| 亚洲女女女同性video| 久久综合久色欧美综合狠狠| 精品999在线播放| 欧美在线亚洲综合一区| 亚洲第一黄网| 在线一区二区三区做爰视频网站| 国产精品视频内| 亚洲区免费影片| 久久九九国产精品| 欧美成人精品激情在线观看| 亚洲伦理久久| 在线观看一区二区视频| 亚洲一区二区高清| 欧美刺激性大交免费视频| 亚洲精品影院在线观看| 亚洲欧美视频在线| 国产欧美视频一区二区三区| 亚洲欧美日韩精品久久久久| 久久精品论坛| 欧美色123| 亚洲国产成人一区| 99re在线精品| 韩日精品视频| 中文欧美在线视频| 久久亚洲精品中文字幕冲田杏梨| 欧美另类高清视频在线| 国产一区二区三区久久悠悠色av| 欧美手机在线| 亚洲国内高清视频| 欧美另类高清视频在线| 久久国内精品自在自线400部| 国产伦精品一区二区三| 久久一区二区三区四区五区| 欧美色中文字幕| 免费观看成人www动漫视频| 欧美福利电影网| 99精品热视频只有精品10| 欧美日韩成人综合| 欧美日韩成人激情| 久久国产精品一区二区三区四区| 国产精品久线观看视频| 一区二区视频在线观看| 一区二区三区四区蜜桃| 日韩一级裸体免费视频| 欧美日韩国产一区精品一区| 国产精品视频免费观看| 欧美岛国在线观看| 久久在精品线影院精品国产| 久久精品国产亚洲a| 国产精品都在这里| 亚洲网站视频福利| 国产精品久久久久久亚洲毛片| 亚洲夜晚福利在线观看| 国产精品久久久久一区二区三区共| 久久中文在线| 欧美人交a欧美精品| 国产精品久久久| 一色屋精品亚洲香蕉网站| 亚洲性夜色噜噜噜7777| 久久精品中文字幕免费mv| 欧美日韩小视频| 欧美日韩情趣电影| 欧美电影在线观看| 欧美 日韩 国产精品免费观看| 久久久www成人免费无遮挡大片| 国产精品一区=区| 日韩亚洲国产精品| 午夜精品国产更新| 国产一区欧美| 一道本一区二区| 亚洲国产岛国毛片在线| 欧美日韩视频在线一区二区| 黄色成人在线观看| 欧美成人精品一区| 欧美电影在线观看| 妖精视频成人观看www| 欧美精品在线观看播放| 国产精品久久久久久久一区探花| 久久免费视频网站| 欧美成人精品三级在线观看| 国产日韩欧美麻豆| 国产午夜精品理论片a级大结局| 亚洲精品日韩精品| 久久成人精品电影| 欧美福利一区| 老司机精品导航| 国产欧美日韩视频一区二区三区| 伊人久久婷婷色综合98网| 久久久另类综合| 亚洲福利一区| 欧美三级电影网| 国产欧美精品一区二区三区介绍| 国产午夜精品久久久| 国产精品一区免费在线观看| 久久精品一区二区三区四区| 欧美日韩国产欧美日美国产精品| 欧美一级大片在线免费观看| 欧美三级韩国三级日本三斤| 国产精品视频一区二区三区| 欧美日韩精品免费观看视一区二区| 欧美一区二区三区四区在线观看| 午夜久久黄色| 国产精品va在线播放我和闺蜜| 国产一区二区三区电影在线观看| 亚洲第一天堂无码专区| 亚洲精品乱码久久久久久按摩观| 黑人一区二区| 亚洲精品一区二区三区99| 欧美福利电影在线观看| 亚洲免费视频中文字幕| 国产精品黄页免费高清在线观看| 久久综合久久美利坚合众国| 9色porny自拍视频一区二区| 最新国产成人av网站网址麻豆| 欧美国产三级| 久久综合成人精品亚洲另类欧美| 国产精品久久777777毛茸茸| 免费日韩成人| 午夜性色一区二区三区免费视频| 久久久亚洲综合| 国产一区二区三区在线观看免费| 欧美一区亚洲二区| 国产精品久久久久国产a级| 国产欧亚日韩视频| 亚洲精品一区二区三区99| 国产一区二区精品在线观看| 久久这里只精品最新地址| 国产精品青草久久| 亚洲线精品一区二区三区八戒| 国产精品系列在线播放| 亚洲无限乱码一二三四麻| 欧美日韩国产免费观看| 亚洲欧美日韩一区二区在线| 亚洲午夜日本在线观看| 男女激情视频一区| 欧美日韩国产成人| 欧美黄色大片网站| 欧美成人国产| 亚洲伊人观看| 亚洲视频精品在线| 欧美不卡一区| 国产精品xnxxcom| 欧美aaa级| 亚洲国产精品久久| 欧美日韩国产精品一卡| 小嫩嫩精品导航| 久热精品在线| 先锋影音一区二区三区| 亚洲国产美女精品久久久久∴| 99riav久久精品riav| 欧美日韩国产成人高清视频| 国产精品综合av一区二区国产馆| 欧美日韩精品欧美日韩精品| 国产综合精品一区| 欧美日韩一区在线播放| 欧美国产精品一区| 久久亚洲一区| 国内揄拍国内精品少妇国语| 久久在线播放| 久久综合久久综合这里只有精品| 日韩午夜视频在线观看| 在线播放亚洲一区| 午夜视频一区二区| 国产精品久久久久7777婷婷| 久久激五月天综合精品| 欧美在线日韩精品| 久久黄金**| 国产三级精品在线不卡| 欧美亚洲一区二区在线观看| 夜夜躁日日躁狠狠久久88av| 国产精品白丝av嫩草影院| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品jizz在线观看美国| 黑人中文字幕一区二区三区| 久久久国产一区二区三区| 国产精品久久一区主播| 久久精品国产清高在天天线| 久久久伊人欧美| 99成人精品| 亚洲激情欧美激情| 日韩一级在线观看| 亚洲丶国产丶欧美一区二区三区| 欧美精品成人91久久久久久久| 亚洲一区日本| 亚洲午夜免费福利视频| 在线一区免费观看| 99国产精品久久久久老师| 欧美成人精品一区二区| 欧美在线一二三四区| 伊大人香蕉综合8在线视| 国内精品久久久久国产盗摄免费观看完整版| 欧美日韩国产综合在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲视屏在线播放| 欧美日韩精品久久久| 久久婷婷成人综合色| 亚洲日本在线观看| 老色鬼精品视频在线观看播放| 极品尤物久久久av免费看| 欧美欧美午夜aⅴ在线观看| 国产精品网站在线播放| 免费在线观看一区二区| 久久久久网站| 国产精品伦子伦免费视频| 亚洲黄色在线看| 欧美日韩亚洲一区| 一区二区三区在线看| 欧美日韩免费在线| 国产精品国产自产拍高清av王其| 欧美日韩亚洲精品内裤| 欧美精品成人一区二区在线观看| 欧美三区视频| 国内一区二区三区在线视频| 国产精品夫妻自拍| 一区二区三区欧美在线| 久久露脸国产精品| 欧美精品国产精品日韩精品| 精久久久久久| 免费久久精品视频| 国产精品av一区二区| 欧美jizzhd精品欧美喷水| 国产精品另类一区| 夜夜爽www精品| 正在播放日韩| 亚洲美女中文字幕| 欧美亚洲在线| 麻豆精品视频在线| 欧美成人综合网站| 欧美激情影院| 国产精品video| 亚洲欧美国产精品专区久久| 国产精品久久婷婷六月丁香| 免费在线观看日韩欧美| 国产亚洲综合精品| 亚洲欧美日韩一区二区三区在线| 欧美日韩国产综合久久| 久久只精品国产| 亚洲乱码国产乱码精品精| 午夜激情久久久| 欧美一区影院| 中国亚洲黄色| 麻豆精品精华液| 亚洲经典一区| 红杏aⅴ成人免费视频| 欧美日韩免费观看一区三区| 国产一区二三区| 亚洲第一页中文字幕| 国产精品久久久久久久久久ktv| 欧美日韩国内自拍| 欧美精品 国产精品| 久久久久国产精品一区二区| 久久成人免费日本黄色| 久久亚洲捆绑美女| 欧美黄免费看| 国产午夜精品一区理论片飘花| 国产精品视频专区| 国外成人网址| 国产乱码精品一区二区三区不卡| 一区二区三区欧美| 黄色日韩在线| 欧美视频在线观看免费网址| 99视频在线精品国自产拍免费观看| 美女网站久久| 欧美精品少妇一区二区三区| 一级日韩一区在线观看| 欧美色一级片| 亚洲国产高清视频| 欧美三级午夜理伦三级中文幕| 日韩一本二本av| 亚洲国产精品123| 久久精品国产精品亚洲精品| 中文久久乱码一区二区| 一本色道久久综合亚洲精品高清| 欧美日韩亚洲国产一区| 国产中文一区| 伊人久久综合| 亚洲综合另类| 午夜精品久久久久久99热软件| 欧美视频在线免费| 久久国产天堂福利天堂| 亚洲日本中文字幕区| 国产伦精品一区二区三| 9久草视频在线视频精品| 久久成人免费日本黄色| 永久免费毛片在线播放不卡| 国产精品久久久久久影院8一贰佰| 亚洲国产一区二区三区青草影视| 亚洲一级电影| 国产精品日韩欧美大师| 国产欧美欧洲在线观看| 亚洲综合色噜噜狠狠| 91久久精品一区| 另类综合日韩欧美亚洲| 国产精品一二三四| 欧美日韩亚洲一区| 一区二区日韩精品| 亚洲欧美中日韩| 99riav久久精品riav| 亚洲激情另类| 永久555www成人免费|