• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于數(shù)據驅動的動態(tài)Web模板技術設計與實現(xiàn)

    2017-01-19 08:49:17陳和平
    武漢科技大學學報 2017年1期
    關鍵詞:解析器詞法字符串

    劉 放,陳和平

    (1.武漢科技大學計算機科學與技術學院,湖北 武漢,430065;2. 武漢科技大學智能信息處理與實時工業(yè)系統(tǒng)湖北省重點實驗室,湖北 武漢,430065)

    基于數(shù)據驅動的動態(tài)Web模板技術設計與實現(xiàn)

    劉 放,陳和平

    (1.武漢科技大學計算機科學與技術學院,湖北 武漢,430065;2. 武漢科技大學智能信息處理與實時工業(yè)系統(tǒng)湖北省重點實驗室,湖北 武漢,430065)

    隨著互聯(lián)網產品規(guī)模的不斷擴大,前端腳本代碼規(guī)模大、重用性低、維護困難、擴展性差等問題不斷涌現(xiàn)。為此,本文分析了目前主流的Web模板技術及各自的優(yōu)缺點,并結合國內瀏覽器的兼容性,在Living template技術思想的基礎上,提出一種基于數(shù)據驅動的動態(tài)Web模板技術方案(DWTT),它能有效提高前端開發(fā)效率和代碼復用性,降低程序擴展和維護的復雜度。

    模板;Web應用;前端開發(fā);數(shù)據驅動;抽象語法樹

    隨著互聯(lián)網技術與應用的不斷發(fā)展,以操作DOM(document object model)元素為核心的傳統(tǒng)前端開發(fā)方式應對日益復雜的業(yè)務需求已顯得越來越力不從心。進入以人為本的Web 2.0時代后,網頁不再以簡單的文字和圖片展示為主,豐富多樣的交互形式提升了Web應用的用戶體驗,Web前端技術在互聯(lián)網產品開發(fā)過程中的使用越來越廣泛。

    本文圍繞數(shù)據驅動關鍵點,結合當前主流前端模板技術中的實現(xiàn)思路,分析各自的優(yōu)缺點,提出基于數(shù)據驅動的動態(tài)Web模板技術(dynamic Web template technology,DWTT)的設計思路和實現(xiàn)方法,以便于開發(fā)者分離業(yè)務邏輯、顯示邏輯和用戶界面,使程序代碼結構更清晰,更容易被閱讀、測試、維護、替換、擴展和改進。

    1 模板技術相關研究

    早期的瀏覽器所渲染的HTML代碼由后端開發(fā)人員將數(shù)據傳入后端模板后拼接而成。隨著Ajax技術的日漸流行,異步數(shù)據傳輸方式的用戶體驗更佳,Json格式存儲量小且簡潔易讀等優(yōu)勢也日益凸顯[1]。前端開發(fā)人員普遍采用字符串拼接的方式,將Ajax獲取的數(shù)據手動輸出到HTML。這種開發(fā)方式效率低下,代碼邏輯與視圖過于耦合,難以閱讀和維護。隨著各種瀏覽器對W3C標準下的新特性支持度越來越高,HTML5和CSS3等新技術不斷普及[2],前端模板引擎也出現(xiàn)了百花齊放的局面。采用前端模板后,使得開發(fā)流程中前、后端分離更加徹底[3]。

    下面對3種具有代表性的前端模板技術,即String-based模板技術、DOM-based模板技術和Living template技術,進行比較與分析。

    1.1 String-based模板技術

    這是一種基于字符串的模板技術,以字符串和數(shù)據為輸入,通過用正則表達式將占位符替換為所需數(shù)據的方式,構建出完整的HTML字符串。由于基于字符串的模板方法依賴于innerHTML的渲染,所以會帶來以下問題。

    (1)安全問題:使用innerHTML構建DOM具有安全隱患[4],用于渲染的動態(tài)數(shù)據可能存在安全漏洞,如果沒有經過特定的轉義處理,就有可能造成XSS攻擊或者CSRF攻擊[5]。

    (2)性能問題:使用innerHTML替換DOM效率較低,即使僅替換DOM的一個屬性或文本內容,也必須通過innerHTML替換整個DOM,從而導致瀏覽器的重排和重繪。

    (3)開發(fā)效率問題:由于是通過正則表達式匹配后在特定函數(shù)中拼接字符串,所以容易造成重復計算,而且完全移除現(xiàn)有的DOM,再重新渲染一遍,掛載在DOM上的事件和狀態(tài)都將不復存在,從而降低了開發(fā)效率。

    1.2 DOM-based模板技術

    這是一種基于DOM節(jié)點的模板技術,通過innerHTML獲取初始DOM結構,再通過DOM API層級從原始DOM屬性中提取事件、指令、表達式和過濾器等信息,編譯成Living DOM,從而完成數(shù)據Model和View的雙向綁定。近年來,Google公司推出的AngularJS[6]就是DOM-based模板技術的代表。DOM-based模板技術比String-based模板技術更加靈活,功能也更加強大,達到了一定意義上的數(shù)據驅動,但其也存在以下問題。

    (1)信息冗余:由于DOM-based模板技術通過innerHTML獲取DOM編譯節(jié)點,信息承載于屬性中,造成了不必要的冗余,同時也會影響閱讀,提升開發(fā)難度。一種解決辦法就是通過讀取屬性后再進行刪除處理,如此會影響性能,降低用戶體驗。

    (2)初始節(jié)點獲取問題:通過innerHTML獲取初始節(jié)點,沒有獨立的語法解析器或詞法解析器,與HTML是強依賴關系。初次進入DOM的內容是模板,渲染需要時間,所以會造成內容閃動。

    1.3 Living template技術

    這是一種基于動態(tài)模板思想的模板技術。Living template技術與String-based、DOM-based模板技術的最大區(qū)別是不依賴于innerHTML來渲染和提取所需信息。其主要思想是:首先,結合數(shù)據綁定技術,使用成熟的詞法解析和語法解析技術,將輸入的字符串解析成抽象語法樹AST[7],而不是僅僅通過簡單的正則表達式匹配特定語法,再進行字符串拼接;其次,通過對AST進行編譯,創(chuàng)建具有數(shù)據動態(tài)綁定功能的Living DOM,從而避免使用innerHTML,解決了瀏覽器的元素閃動問題,提高了應用的安全性,其原理如圖1所示。

    圖1 Living template原理圖

    從圖1可知,輸入的字符串通過詞法解析器Lexer,生成對應的詞法塊。詞法塊通過語法解析器Parser,構建抽象語法樹AST。然后將AST編譯成具有動態(tài)數(shù)據綁定功能的Living DOM,從而實現(xiàn)View和Model的雙向綁定。

    2 DWTT設計與實現(xiàn)

    由于Living template同時擁有String-based和DOM-based模板技術的優(yōu)點,并可以巧妙地規(guī)避innerHTML,以較小的開銷來實現(xiàn)局部更新,故本文基于Living template技術的思想,具體設計并實現(xiàn)了一種基于數(shù)據驅動的動態(tài)Web模板技術DWTT。

    2.1 總體設計

    DWTT總體設計如圖2所示。頂層組件是DWTT的入口模塊,統(tǒng)一管理各模塊的依賴和引入,為動態(tài)模板技術和數(shù)據綁定技術提供相應接口。動態(tài)模板技術由詞法解析器Lexer、語法解析器Parser、編譯器Walker和過濾器Filter構成。Lexer的作用在于對字符串模板進行詞法分析,通過特定的正則表達式標識每個詞塊的類型,生成詞塊對象[8]。Parser的作用在于對Lexer輸出的詞法對象數(shù)組進行語法分析,然后根據DWTT的模板語法,將各零散的詞塊拼接為有具體含義的語法對象,并根據父子級聯(lián)關系輸出為抽象語法樹AST。Walker的作用在于將Parser構建出的AST根據不同的節(jié)點類型,通過不同的編譯函數(shù),生成對應的Living DOM,并掛載到頁面中,完成組件UI的呈現(xiàn)。Filter可以在數(shù)據傳入前根據一定的規(guī)則過濾掉一些信息,或者設置一些參數(shù),再進行業(yè)務邏輯處理。數(shù)據綁定技術由臟檢測Watch模塊和指令Directive構成。Watch是實現(xiàn)數(shù)據驅動的核心,該模塊實現(xiàn)臟檢測的監(jiān)聽和更新操作,通過watch()方法來實現(xiàn)數(shù)據監(jiān)聽和回調函數(shù)的綁定,通過update()方法遍歷觀察者列表觸發(fā)更新操作。Directive是對某個節(jié)點的特定功能增強,一般以屬性的方式在節(jié)點上聲明[9]。本文提出的內置指令有r-class、r-style、r-hide、on-xxx、ref等,開發(fā)者也可以根據項目需求擴展更多功能強大的指令,從而提高組件的功能性。

    圖2 DWTT的總體設計

    2.2 詳細設計

    DWTT的核心在于動態(tài)模板技術和數(shù)據綁定技術,對此給出以下詳細設計方案。

    2.2.1 動態(tài)模板的設計

    本文基于Living template思想,通過模板的緯度給出DWTT的設計方案,如圖3所示。

    圖3 動態(tài)模板設計

    字符串先經過Lexer詞法解析器,根據解析模式的詞法,通過特定的正則表達式匹配出特定的詞塊,輸出由詞塊對象組成的數(shù)組。Lexer詞法解析器擁有3種解析模式,最終都是將變量、注釋、開標簽“<”、閉合標簽“>”、模板語法“{}”、屬性等詞塊進行標識,解析為詞法對象數(shù)組,具體結構如下:

    [

    {

    "type": "TAG_OPEN",

    "value": "input",

    "pos": 0

    },

    {

    "type": "OPEN",

    "value": "if",

    "pos": 7

    }

    ]

    其中,每個詞法對象有3個key,其含義如下:

    (1)type:用于標識詞法,如STRING、NUMBER等;

    (2)value:表示具體值;

    (3)pos:表示該詞在字符串中的位置索引。

    Parser語法解析器分析輸入的詞法對象數(shù)組中每個詞法對象的詞法類型,生成對應的語法類型節(jié)點對象[10],再進行層層遞歸,將各語法節(jié)點掛載至對應的父語法節(jié)點下,構成結構與字符串模板一致的抽象語法樹AST。通過type表示節(jié)點的詞法類型,通過tag指定節(jié)點的標簽命名,將節(jié)點的屬性解析至attrs數(shù)組中,結構大致如下:

    [

    {

    "type": "element",

    "tag": "input",

    "attrs": [{"type": "if",}]

    }

    ]

    抽象語法樹AST構建完成后,進入Walker編譯器,建立數(shù)據監(jiān)聽,生成Living DOM,并將其最終掛載在頁面中。

    2.2.2 數(shù)據綁定模塊的設計

    數(shù)據綁定模塊設計如圖4所示。

    圖4 數(shù)據綁定模塊設計

    本文采用臟檢測的方式實現(xiàn)數(shù)據綁定和監(jiān)聽。臟檢測是一種不關心如何以及何時改變數(shù)據,只關心在特定的檢測階段數(shù)據是否改變的數(shù)據監(jiān)聽技術。可以在批量處理完數(shù)據之后,再統(tǒng)一更新view,進行DOM的局部刷新。

    前文提到AST構建完成后,會進入Walker編譯器進行編譯。DWTT將提供一個Watch模塊,專門負責數(shù)據監(jiān)聽和修改。Watch模塊對外提供兩個方法:

    (1) DWTT.$watch(),該方法接受兩個入參,第一個是被監(jiān)控的表達式,第二個是監(jiān)聽函數(shù)。當被監(jiān)控的表達式發(fā)生變化時,監(jiān)聽函數(shù)就會運行。該方法返回一個watch對象。

    (2) DWTT.$update(),該方法接受兩個入參,第一個是需要更新的表達式,第二個是更新的值。不帶參數(shù)則直接進入臟檢測階段。

    當Walker編譯器遇到template、express等插值節(jié)點時,會創(chuàng)建一個textNode,當數(shù)據變化時,修改textNode的屬性textContent,并生成watch對象,返回的watch對象包含以下信息:

    {

    id: uid, // watch對象的唯一id

    fn: function(){}, //傳入的監(jiān)聽函數(shù)

    get: function(){}, //獲取被監(jiān)控的表達式

    set: function(){} , //用于部分數(shù)據的設置

    once: false, //是否只監(jiān)聽一次

    last: undefined, //上一次表達式的值

    dirty: false, //是否為臟狀態(tài)

    }

    在實例化元素和組件時會執(zhí)行一次$update方法,觸發(fā)臟檢測,此階段的執(zhí)行步驟如下:

    (1)標記dirty為false;

    (2)遍歷該UI所有通過$watch方法綁定的觀察者watcher,通過get方法獲取當前值并與last進行對比,如果相同則跳過,否則將last改為當前值,并運行fn方法,將dirty值設為true;

    (3)編譯檢測一輪后,如果dirty值為true,則重新進入步驟(1),否則進入步驟(4);

    (4)完成臟檢測。

    Living DOM生成并掛載于頁面中,再通過r-model、on-click等方式自動觸發(fā)$update方法進而觸發(fā)臟檢測,從而實現(xiàn)數(shù)據綁定。

    2.3 DWTT的實現(xiàn)

    DWTT選擇JavaScript語言來實現(xiàn),通過bower實現(xiàn)前端工作流,按照CommonJS規(guī)范進行模塊化開發(fā)。

    2.3.1 頂層組件模塊

    頂層組件模塊是整個DWTT的入口,其核心邏輯如下:

    /*newC1.實例化,data參數(shù)在definition中*/

    var DWTT = function(definition, options){

    this.$refs = {};

    /*newC2.將模板加載*/

    template = this.template;

    /*newC3.將模板解析為AST語法樹*/

    template = new Parser(template).parse();

    /*newC4.處理計算屬性*/

    this.computed = handleComputed();

    /*newC5.觸發(fā)config事件*/

    this.$emit("$config");

    /*newC6.編譯AST語法樹為LivingDOM*/

    this.group = this.$compile(namespace);

    /*newC7.觸發(fā)第一次臟檢測*/

    if(!this.$parent) this.$update();

    /*newC8.觸發(fā)init事件*/

    this.$emit("$init");

    if( this.init ) this.init(this.data);}

    首先將傳入組件的數(shù)據和事件進行整合,然后對組件的字符串模板進行詞法和語法解析,并構建抽象語法樹AST,完成后觸發(fā)config事件,執(zhí)行config()方法。然后進入Walker編譯階段,通過Watch模塊對組件進行數(shù)據綁定,通過$watch()方法將依賴屬性加入觀察者列表,構建Living DOM,完成后觸發(fā)init事件,宣告初始化完成并執(zhí)行init()方法。

    2.3.2 詞法解析器Lexer

    Lexer的作用在于對字符串模板進行詞法分析,標識每個詞塊的類型,其主要設計見圖5。

    圖5 Lexer的設計

    Lexer詞法解析器擁有3種解析模式。JST解析模式主要是為了適應公司互聯(lián)網產品新老交替的過渡,TAG解析模式是通過script標簽獲取字符串模板從而方便統(tǒng)一管理,Init解析模式的解析語法和TAG解析模式的類似,區(qū)別在于前者從組件定義處而不是script標簽處獲取字符串模板。Lexer通過判斷字符串模板的標識來決定采用哪種解析方式。以JST解析模式下的JST_STRING類型為例:

    JST_STRING:[/′([^′]*)′|″([^″]*)″/, function(all, one, two){′

    return{type: ′STRING′, value:one‖two‖″″}

    }, ′JST′]

    各個詞法類型均以特定的正則表達式匹配,從而生成詞法對象數(shù)組傳遞給Parser。

    2.3.3 語法解析器Parser

    Parser根據自定義語法,將零散的詞塊拼接為有具體含義的語法對象,并輸出為AST。對詞法對象數(shù)組中的每個對象進行遍歷操作,然后進入解析流程。根據Lexer得出的詞法type,對各個詞法對象進行不同的處理從而得到一棵由7種語法節(jié)點對象組成的AST,其主要流程見圖6。

    圖6 Parser的流程

    7種語法節(jié)點類型為:

    (1)if:條件判斷節(jié)點,如{#if} {#elseif} {#else} {/if};

    (2)list:循環(huán)列表節(jié)點,如{#list arr as item}{/list};

    (3)expression:表達式,如{100+hello};

    (4)element:元素節(jié)點,包含component組件;

    (5)attribute:屬性節(jié)點,如r-model;

    (6)text:文本節(jié)點,字符串中包含的文本;

    (7)template:模板節(jié)點,如{hello}。

    2.3.4 編譯器Walker

    Walker的作用在于將Parser構建出的AST編譯為Living DOM。首先將AST遍歷到單個節(jié)點級別,根據AST節(jié)點類型進入不同的編譯函數(shù)。本文設計了7種編譯函數(shù),和AST的7種語法節(jié)點類型相對應,分別為:walkers.if、walkers.list、walkers.expression、walkers.element、walkers.attribute、walkers.text和walkers.template。每一個編譯函數(shù)都有自己獨特的邏輯處理,比如walkers.expression方法,對模板進行數(shù)據綁定,其主要邏輯如下:

    walkers.expression = function(ast, options){

    var node = document.createTextNode("");

    //將表達式加入watcher隊列,進行監(jiān)聽

    this.$watch(ast, function(newval){

    //綁定更新執(zhí)行的函數(shù),即DOM局部更新

    dom.text(node, "" + (newval) );},

    {init: true})

    return node;}

    編譯函數(shù)執(zhí)行完畢后,再通過DOM操作將Living DOM掛載到頁面中,從而完成整個編譯過程,將數(shù)據驅動的組件UI呈現(xiàn)于用戶界面。

    3 實驗分析

    本文根據模板技術類型的不同,選取了采用String-based的doT和Mustache,采用DOM-based的Angular、Vue與本文提出的基于數(shù)據驅動的動態(tài)Web模板DWTT進行性能對比實驗。數(shù)據驅動模板技術的性能測試核心在于對字符串模板中內建DSL的解析速度。實驗測試環(huán)境為Win7,CPU為i5-4200,主頻為2.5 GHz,系統(tǒng)內存為4 GB。

    實驗數(shù)據為1000個簡單對象組成的數(shù)組集合。首先編寫各模板技術對應的測試用例,將實驗數(shù)據集傳入各模板并渲染200次,記錄執(zhí)行時間。然后使用Highchart將執(zhí)行所需時間的測試結果通過可視化的方式呈現(xiàn),如圖7所示。

    由圖7可知,性能最好的是doT,但由于其無法實現(xiàn)數(shù)據驅動,功能性較差。DWTT與同樣采用臟檢測技術的Angular相比具有性能上的絕對優(yōu)勢。由于Vue使用的是依賴追蹤技術,通過采用ES5標準的Object.defineProperty方法,給變量的set和get函數(shù)添加檢測依賴于該變量的watcher對象,所以其性能得到提升,但是Vue會帶來兼容性問題,故本文未采用依賴追蹤技術,而是采用臟檢測技術進行數(shù)據綁定。

    圖7 模板引擎性能測試結果

    4 結語

    本文研究了各主流模板技術的設計思想和技術實現(xiàn)思路后,在Living template的基礎上,具體設計并實現(xiàn)了一種基于數(shù)據驅動的動態(tài)Web模板技術DWTT,并進行了性能對比實驗。DWTT能有效提高前端開發(fā)效率和代碼復用性,并在實際運用中獲得了較好的體驗和反饋。當然,DWTT也存在不足之處,通過臟檢測進行數(shù)據監(jiān)聽,當變量間依賴關系過于復雜時會導致計算量較大,對性能有一定的影響。此類問題可考慮依賴追蹤技術來進一步改善。

    [1] 孫光明, 王碩. 基于JSON的Ajax數(shù)據通信快速算法[J]. 計算機應用與軟件, 2015, 32(1):263-266.

    [2] Hoy M B. HTML5: a new standard for the Web[J]. Medical Reference Services Quarterly, 2011,

    30(1):50-55.

    [3] 楊穎瑩.高性能Web框架的分析與應用[D].北京:北京郵電大學, 2012.

    [4] Lin A W, Barceló P. String solving with word equations and transducers: towards a logic for analysing mutation XSS[J]. ACM SIGPLAN Notices, 2016, 51(1):123-136.

    [5] You J X, Guo F. Improved CSRFGuard for CSRF attacks defense on Java EE platform[C]// International Conference on Computer Science and Education. IEEE, August 22-24, 2014:1115-1120.

    [6] Jain N, Mangal P, Mehta D. AngularJS: a modern MVC framework in JavaScript[J].Journal of Global Research in Computer Science,2014,5(12):17-23.

    [7] 李鄭,李姝,王俊,等. 基于抽象語法樹分析的版本控制分支合并算法[J]. 計算機系統(tǒng)應用, 2015, 24(3):139-146.

    [8] Sulzmann M, van Steenhoven P. A flexible and efficient ML Lexer tool based on extended regular expression submatching[C]//Compiler Construction: Proceedings of 23rd International Conference, CC 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software. Springer Berlin Heidelberg, 2014:174-191.

    [9] Ruebbelke L, Ford B. AngularJS in action[M]. Shelter Island: Manning Publications Co., 2015.

    [10]Rosa R, Zabokrtsky Z. KLcpos3-a language similarity measure for delexicalized parser transfer[C]//Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing.Beijing, July 26-31, 2015:243-249.

    [責任編輯 尚 晶]

    Design and implementation of data-driven dynamic Web template technology

    LiuFang,ChenHeping

    (1. College of Computer Science and Technology, Wuhan University of Science and Technology, Wuhan 430065, China;2. Hubei Province Key Laboratory of Intelligent Information Processing and Real-time Industrial System, Wuhan University of Science and Technology, Wuhan 430065, China)

    With the continuous expansion of Internet Web products, such problems as large scale, low reusability, difficulty in organizing and maintaining, poor expansibility and so on are emerging in the front-end script codes. So this paper studies the current mainstream Web template technologies and analyzes their merits and demerits. In light of the compatibility of domestic browsers, a data-driven dynamic Web template technology named as DWTT is put forward based on the thoughts of Living template technology. DWTT can improve the front-end development efficiency and code reusability, and reduce the complexity of program extension and maintenance.

    template; Web application; front-end development; data-driven; abstract syntax tree

    2016-11-28

    國家自然科學基金資助項目(61100133).

    劉 放(1992-),男,武漢科技大學碩士生. E-mail:brizer@163.com

    陳和平(1956-),男,武漢科技大學教授,博士. E-mail:chp@wust.edu.cn

    10.3969/j.issn.1674-3644.2017.01.014

    TP31

    A

    1674-3644(2017)01-0070-06

    猜你喜歡
    解析器詞法字符串
    詞法 名詞、代詞和冠詞
    基于多解析器的域名隱私保護機制
    基于Wireshark的列控中心以太網通信協(xié)議解析器的研究與實現(xiàn)
    如何防御DNS陷阱?常用3種DNS欺騙手法
    一種基于無關DNS的通信隱私保護技術研究
    電子世界(2018年14期)2018-04-15 16:14:25
    應用于詞法分析器的算法分析優(yōu)化
    談對外漢語“詞法詞”教學
    一種新的基于對稱性的字符串相似性處理算法
    依據字符串匹配的中文分詞模型研究
    一種針對Java中字符串的內存管理方案
    桃红色精品国产亚洲av| 色尼玛亚洲综合影院| 女人精品久久久久毛片| 日韩一卡2卡3卡4卡2021年| 99re在线观看精品视频| 免费在线观看黄色视频的| 久久热在线av| 大陆偷拍与自拍| 精品国产一区二区三区四区第35| 正在播放国产对白刺激| 国产精品野战在线观看 | 久久天躁狠狠躁夜夜2o2o| 精品人妻在线不人妻| 淫妇啪啪啪对白视频| 1024视频免费在线观看| 亚洲专区国产一区二区| 女性生殖器流出的白浆| 国产蜜桃级精品一区二区三区| 亚洲熟女毛片儿| 动漫黄色视频在线观看| 999久久久精品免费观看国产| 麻豆一二三区av精品| 女性生殖器流出的白浆| 不卡av一区二区三区| av天堂久久9| 午夜免费激情av| 亚洲七黄色美女视频| 成年人免费黄色播放视频| 免费在线观看完整版高清| 99精品欧美一区二区三区四区| 中文亚洲av片在线观看爽| 免费久久久久久久精品成人欧美视频| 夫妻午夜视频| 国产色视频综合| 成年人黄色毛片网站| 亚洲黑人精品在线| 欧美黑人精品巨大| 亚洲av成人不卡在线观看播放网| 亚洲国产中文字幕在线视频| 中文字幕人妻丝袜一区二区| 国产深夜福利视频在线观看| 高清欧美精品videossex| 免费观看精品视频网站| 久久人人爽av亚洲精品天堂| 无限看片的www在线观看| 欧美日韩瑟瑟在线播放| 老司机深夜福利视频在线观看| av超薄肉色丝袜交足视频| 黑人巨大精品欧美一区二区蜜桃| 久久久久国产一级毛片高清牌| 咕卡用的链子| 久99久视频精品免费| 超色免费av| 午夜精品久久久久久毛片777| 久久性视频一级片| 女警被强在线播放| 国产av在哪里看| 一本综合久久免费| 国产精品 国内视频| 亚洲第一av免费看| 国产精品乱码一区二三区的特点 | 亚洲aⅴ乱码一区二区在线播放 | 中文亚洲av片在线观看爽| 国产高清国产精品国产三级| 国产精品秋霞免费鲁丝片| 亚洲一码二码三码区别大吗| 日韩三级视频一区二区三区| 国产有黄有色有爽视频| 亚洲av成人av| 精品久久久久久,| 一二三四在线观看免费中文在| 女生性感内裤真人,穿戴方法视频| 色老头精品视频在线观看| 91大片在线观看| 一进一出抽搐动态| 琪琪午夜伦伦电影理论片6080| 色婷婷久久久亚洲欧美| 一级毛片精品| 99国产精品99久久久久| 最新美女视频免费是黄的| 久久人妻福利社区极品人妻图片| 国产免费男女视频| 夫妻午夜视频| 日日干狠狠操夜夜爽| 成在线人永久免费视频| 在线观看免费日韩欧美大片| 免费在线观看黄色视频的| 中文字幕人妻丝袜制服| 人人妻人人爽人人添夜夜欢视频| 热99re8久久精品国产| www.999成人在线观看| 一边摸一边做爽爽视频免费| 国产熟女xx| 午夜日韩欧美国产| 黑人巨大精品欧美一区二区mp4| 国产无遮挡羞羞视频在线观看| 老熟妇乱子伦视频在线观看| 精品卡一卡二卡四卡免费| 久久国产精品人妻蜜桃| 十八禁人妻一区二区| 欧美日本中文国产一区发布| 一级a爱视频在线免费观看| 美女福利国产在线| av免费在线观看网站| 久久国产乱子伦精品免费另类| 人成视频在线观看免费观看| 日本a在线网址| 精品人妻1区二区| 免费日韩欧美在线观看| 美女福利国产在线| 人妻久久中文字幕网| 亚洲精品粉嫩美女一区| 午夜福利欧美成人| 欧美色视频一区免费| 99精国产麻豆久久婷婷| 亚洲熟妇熟女久久| 国产男靠女视频免费网站| 丁香欧美五月| 一级a爱片免费观看的视频| 纯流量卡能插随身wifi吗| 精品电影一区二区在线| 国产视频一区二区在线看| 黑人巨大精品欧美一区二区蜜桃| 午夜久久久在线观看| 男人操女人黄网站| 久久精品亚洲av国产电影网| 久久中文字幕一级| 又黄又爽又免费观看的视频| 免费在线观看视频国产中文字幕亚洲| 黄片大片在线免费观看| cao死你这个sao货| 国产精品一区二区三区四区久久 | 欧美丝袜亚洲另类 | 亚洲精华国产精华精| 国产精品一区二区精品视频观看| 午夜福利在线免费观看网站| 亚洲 欧美 日韩 在线 免费| 嫩草影视91久久| 一级毛片高清免费大全| 9色porny在线观看| 淫妇啪啪啪对白视频| 国产精品 欧美亚洲| 夫妻午夜视频| 999久久久国产精品视频| 久久国产亚洲av麻豆专区| 精品卡一卡二卡四卡免费| 一级毛片高清免费大全| 亚洲欧美一区二区三区久久| 看黄色毛片网站| 黑人猛操日本美女一级片| x7x7x7水蜜桃| 日本vs欧美在线观看视频| 欧美一级毛片孕妇| 久久久国产成人精品二区 | 精品国产一区二区三区四区第35| 亚洲熟妇熟女久久| 成人免费观看视频高清| 欧美性长视频在线观看| av电影中文网址| 可以在线观看毛片的网站| 久久人妻av系列| 精品日产1卡2卡| 精品一区二区三区四区五区乱码| 日韩三级视频一区二区三区| 最近最新免费中文字幕在线| 午夜成年电影在线免费观看| xxx96com| 国产精品一区二区免费欧美| 在线观看免费高清a一片| 欧美久久黑人一区二区| 精品久久久久久电影网| 高清毛片免费观看视频网站 | 脱女人内裤的视频| 成人永久免费在线观看视频| 久久国产乱子伦精品免费另类| 国产主播在线观看一区二区| 交换朋友夫妻互换小说| 国产区一区二久久| 国内久久婷婷六月综合欲色啪| 午夜老司机福利片| 欧美乱妇无乱码| 国产伦人伦偷精品视频| avwww免费| 国产视频一区二区在线看| 啦啦啦在线免费观看视频4| 丰满迷人的少妇在线观看| 成人18禁高潮啪啪吃奶动态图| 国产成人免费无遮挡视频| 日韩精品中文字幕看吧| 在线视频色国产色| 在线观看一区二区三区| 如日韩欧美国产精品一区二区三区| 国产伦人伦偷精品视频| 亚洲黑人精品在线| 欧美激情 高清一区二区三区| 欧美日韩av久久| 亚洲中文日韩欧美视频| 日日爽夜夜爽网站| 午夜日韩欧美国产| 女人爽到高潮嗷嗷叫在线视频| 亚洲中文日韩欧美视频| 人人妻,人人澡人人爽秒播| 免费高清在线观看日韩| 这个男人来自地球电影免费观看| 日韩一卡2卡3卡4卡2021年| 亚洲欧美精品综合久久99| 欧美久久黑人一区二区| 亚洲精品久久午夜乱码| 精品欧美一区二区三区在线| 久久久国产成人免费| 99在线视频只有这里精品首页| 久久久久久大精品| 欧美日韩福利视频一区二区| 性少妇av在线| 丰满迷人的少妇在线观看| 精品卡一卡二卡四卡免费| 757午夜福利合集在线观看| 久久精品91蜜桃| 每晚都被弄得嗷嗷叫到高潮| 久久婷婷成人综合色麻豆| 一边摸一边抽搐一进一出视频| 国产黄色免费在线视频| 亚洲精品美女久久久久99蜜臀| 国产成年人精品一区二区 | 精品高清国产在线一区| 不卡一级毛片| 美女大奶头视频| 久久亚洲精品不卡| 精品久久久久久久毛片微露脸| 天堂动漫精品| 黄色毛片三级朝国网站| 一区在线观看完整版| а√天堂www在线а√下载| www.www免费av| 狂野欧美激情性xxxx| 午夜福利影视在线免费观看| 国产乱人伦免费视频| 99国产极品粉嫩在线观看| 在线天堂中文资源库| 美女高潮到喷水免费观看| 精品免费久久久久久久清纯| 亚洲精品中文字幕一二三四区| 免费av毛片视频| 国产精品二区激情视频| 叶爱在线成人免费视频播放| cao死你这个sao货| 在线国产一区二区在线| 国产成人啪精品午夜网站| 老熟妇乱子伦视频在线观看| 午夜影院日韩av| 日韩 欧美 亚洲 中文字幕| av国产精品久久久久影院| 精品第一国产精品| 国产成人欧美在线观看| 中文欧美无线码| av在线天堂中文字幕 | 法律面前人人平等表现在哪些方面| 大陆偷拍与自拍| 99在线人妻在线中文字幕| 亚洲中文av在线| 午夜亚洲福利在线播放| 午夜成年电影在线免费观看| 日韩欧美国产一区二区入口| av在线播放免费不卡| 久久中文字幕人妻熟女| 桃红色精品国产亚洲av| 国产有黄有色有爽视频| 久久久久久大精品| 叶爱在线成人免费视频播放| 69av精品久久久久久| 两性夫妻黄色片| 国产成人欧美在线观看| 欧美日韩黄片免| 国产成人精品久久二区二区91| 99国产精品一区二区蜜桃av| 精品国产一区二区久久| 精品日产1卡2卡| 国产亚洲欧美精品永久| 精品欧美一区二区三区在线| 久久伊人香网站| 国产成人免费无遮挡视频| 国产精品乱码一区二三区的特点 | 大香蕉久久成人网| 久久人妻av系列| 国产成人精品久久二区二区免费| 亚洲一区二区三区欧美精品| 久久久精品欧美日韩精品| 亚洲精华国产精华精| 国产熟女午夜一区二区三区| 97超级碰碰碰精品色视频在线观看| 天堂√8在线中文| 亚洲av第一区精品v没综合| 婷婷丁香在线五月| 搡老熟女国产l中国老女人| 成人三级黄色视频| а√天堂www在线а√下载| 色综合婷婷激情| 在线观看一区二区三区| 国产成人影院久久av| 久久久国产一区二区| 日韩免费高清中文字幕av| 香蕉久久夜色| 欧美 亚洲 国产 日韩一| 欧美精品亚洲一区二区| 亚洲一区二区三区不卡视频| 国产精品1区2区在线观看.| 亚洲激情在线av| 国产成人av教育| 热99国产精品久久久久久7| 女生性感内裤真人,穿戴方法视频| 欧美在线一区亚洲| 黄色丝袜av网址大全| 手机成人av网站| 国产精品久久久av美女十八| 久久久久国内视频| 精品卡一卡二卡四卡免费| 国产蜜桃级精品一区二区三区| 久久九九热精品免费| 亚洲va日本ⅴa欧美va伊人久久| 两个人免费观看高清视频| 欧美日韩视频精品一区| 啦啦啦在线免费观看视频4| 悠悠久久av| 老汉色av国产亚洲站长工具| 母亲3免费完整高清在线观看| 99在线视频只有这里精品首页| 亚洲avbb在线观看| 午夜激情av网站| 日韩 欧美 亚洲 中文字幕| 母亲3免费完整高清在线观看| 啦啦啦在线免费观看视频4| 欧美黑人欧美精品刺激| 亚洲情色 制服丝袜| av天堂在线播放| 最近最新免费中文字幕在线| 国产99久久九九免费精品| 国产成人欧美| 亚洲,欧美精品.| 99riav亚洲国产免费| 国产高清国产精品国产三级| 黄色 视频免费看| 亚洲中文av在线| 免费不卡黄色视频| 一级a爱视频在线免费观看| 亚洲九九香蕉| 9191精品国产免费久久| 国产精品自产拍在线观看55亚洲| 午夜福利,免费看| 色综合欧美亚洲国产小说| 波多野结衣av一区二区av| 免费不卡黄色视频| 欧美+亚洲+日韩+国产| 在线观看免费午夜福利视频| 嫩草影视91久久| 真人一进一出gif抽搐免费| 欧美 亚洲 国产 日韩一| 99热只有精品国产| 国产欧美日韩一区二区精品| 国产亚洲精品综合一区在线观看 | 久久久国产成人精品二区 | 日韩 欧美 亚洲 中文字幕| 男女下面插进去视频免费观看| 国产激情久久老熟女| 丝袜在线中文字幕| 中文字幕另类日韩欧美亚洲嫩草| 日韩有码中文字幕| 久久久久久久久免费视频了| 精品少妇一区二区三区视频日本电影| 欧美激情久久久久久爽电影 | 丝袜人妻中文字幕| 亚洲五月天丁香| 视频区图区小说| 亚洲欧美精品综合久久99| 两性午夜刺激爽爽歪歪视频在线观看 | 神马国产精品三级电影在线观看 | 色老头精品视频在线观看| 男人舔女人的私密视频| 99精国产麻豆久久婷婷| 精品久久久久久电影网| 十八禁人妻一区二区| 免费在线观看黄色视频的| 亚洲情色 制服丝袜| 亚洲欧美日韩另类电影网站| 久热这里只有精品99| 国产成人精品无人区| 成熟少妇高潮喷水视频| 婷婷精品国产亚洲av在线| 成人手机av| 美女国产高潮福利片在线看| 啦啦啦 在线观看视频| 国产精品亚洲av一区麻豆| 国产av在哪里看| 日韩人妻精品一区2区三区| 午夜成年电影在线免费观看| 又紧又爽又黄一区二区| 最好的美女福利视频网| 免费在线观看完整版高清| 国产成人精品久久二区二区91| 日本免费一区二区三区高清不卡 | 在线观看免费视频网站a站| 操出白浆在线播放| 久久午夜综合久久蜜桃| 亚洲精品在线观看二区| 亚洲免费av在线视频| 一边摸一边抽搐一进一出视频| 在线观看免费视频网站a站| 亚洲国产精品一区二区三区在线| 最近最新免费中文字幕在线| 亚洲五月婷婷丁香| 成人18禁高潮啪啪吃奶动态图| 国产亚洲精品综合一区在线观看 | 老汉色∧v一级毛片| a级片在线免费高清观看视频| 黑丝袜美女国产一区| 丰满人妻熟妇乱又伦精品不卡| 黄色毛片三级朝国网站| 三上悠亚av全集在线观看| 999久久久国产精品视频| 久久精品国产亚洲av香蕉五月| 欧美日韩亚洲高清精品| 欧美激情高清一区二区三区| 亚洲免费av在线视频| 国产无遮挡羞羞视频在线观看| 精品国产一区二区三区四区第35| 国产精品av久久久久免费| 看免费av毛片| 国产高清激情床上av| 国产亚洲欧美98| 亚洲国产看品久久| 亚洲国产欧美一区二区综合| 亚洲情色 制服丝袜| 又紧又爽又黄一区二区| 午夜福利一区二区在线看| 满18在线观看网站| 999久久久国产精品视频| 亚洲熟女毛片儿| 岛国视频午夜一区免费看| 性欧美人与动物交配| 欧美人与性动交α欧美软件| av视频免费观看在线观看| 18禁裸乳无遮挡免费网站照片 | www.精华液| 国产精品国产高清国产av| 国产高清激情床上av| 精品一区二区三区四区五区乱码| 夜夜躁狠狠躁天天躁| 在线av久久热| 亚洲色图av天堂| 90打野战视频偷拍视频| 久久人妻av系列| 精品人妻1区二区| 18禁美女被吸乳视频| 中文字幕av电影在线播放| 人人妻,人人澡人人爽秒播| 成人黄色视频免费在线看| 脱女人内裤的视频| 亚洲成人精品中文字幕电影 | 99精品欧美一区二区三区四区| 无人区码免费观看不卡| 午夜免费成人在线视频| aaaaa片日本免费| 一级a爱片免费观看的视频| tocl精华| 国产亚洲精品久久久久久毛片| 精品国产一区二区三区四区第35| 一边摸一边抽搐一进一小说| 欧美人与性动交α欧美精品济南到| www.熟女人妻精品国产| 欧美成人午夜精品| 国产蜜桃级精品一区二区三区| 国产免费av片在线观看野外av| 天堂√8在线中文| 精品无人区乱码1区二区| 又黄又粗又硬又大视频| 国产一区在线观看成人免费| 高清毛片免费观看视频网站 | 首页视频小说图片口味搜索| 老司机在亚洲福利影院| 亚洲av日韩精品久久久久久密| 亚洲人成电影观看| 50天的宝宝边吃奶边哭怎么回事| 热99国产精品久久久久久7| 久久亚洲精品不卡| 亚洲avbb在线观看| 黑人巨大精品欧美一区二区蜜桃| 免费高清视频大片| 校园春色视频在线观看| 最新美女视频免费是黄的| 一二三四在线观看免费中文在| 一级黄色大片毛片| 国产主播在线观看一区二区| 亚洲九九香蕉| 女人被狂操c到高潮| av免费在线观看网站| 亚洲九九香蕉| svipshipincom国产片| 999久久久精品免费观看国产| 亚洲精品一二三| 十分钟在线观看高清视频www| 黄网站色视频无遮挡免费观看| а√天堂www在线а√下载| 美女福利国产在线| 一夜夜www| 在线国产一区二区在线| 色精品久久人妻99蜜桃| 午夜视频精品福利| bbb黄色大片| 亚洲人成网站在线播放欧美日韩| 亚洲少妇的诱惑av| 99国产精品一区二区蜜桃av| 亚洲欧美一区二区三区久久| 涩涩av久久男人的天堂| 在线观看免费日韩欧美大片| 亚洲 欧美一区二区三区| 欧美日韩精品网址| 黄色视频,在线免费观看| 91麻豆av在线| 亚洲一区中文字幕在线| 在线永久观看黄色视频| 国产97色在线日韩免费| 最好的美女福利视频网| 十分钟在线观看高清视频www| 丰满饥渴人妻一区二区三| 99国产综合亚洲精品| 老司机深夜福利视频在线观看| 国产91精品成人一区二区三区| 成人三级做爰电影| 亚洲精品在线观看二区| 大香蕉久久成人网| 精品国产一区二区久久| 精品电影一区二区在线| 欧洲精品卡2卡3卡4卡5卡区| 两个人看的免费小视频| 国产激情久久老熟女| 性色av乱码一区二区三区2| 韩国精品一区二区三区| 亚洲成人久久性| 黄片小视频在线播放| 精品久久久久久电影网| 91大片在线观看| 麻豆成人av在线观看| 天天添夜夜摸| 丰满人妻熟妇乱又伦精品不卡| 国产麻豆69| 不卡一级毛片| 在线观看免费日韩欧美大片| 无限看片的www在线观看| 国产精品九九99| 亚洲精华国产精华精| 成人免费观看视频高清| 午夜老司机福利片| 成人18禁高潮啪啪吃奶动态图| 久久久久久久久中文| 国产亚洲精品第一综合不卡| 日韩大码丰满熟妇| 国产视频一区二区在线看| 女警被强在线播放| 日韩精品青青久久久久久| 高清在线国产一区| 男女床上黄色一级片免费看| 免费不卡黄色视频| 日本欧美视频一区| 成人手机av| 又紧又爽又黄一区二区| 老熟妇乱子伦视频在线观看| 国产精品爽爽va在线观看网站 | 亚洲熟妇熟女久久| 色精品久久人妻99蜜桃| 男男h啪啪无遮挡| 久久欧美精品欧美久久欧美| 免费不卡黄色视频| 精品人妻1区二区| 性欧美人与动物交配| 亚洲成人免费av在线播放| 成熟少妇高潮喷水视频| 久久久久久久午夜电影 | 欧美日韩av久久| 日韩大码丰满熟妇| 女人高潮潮喷娇喘18禁视频| 欧美丝袜亚洲另类 | 成人三级做爰电影| 九色亚洲精品在线播放| 俄罗斯特黄特色一大片| 淫妇啪啪啪对白视频| 成人特级黄色片久久久久久久| 男女下面进入的视频免费午夜 | 成人永久免费在线观看视频| 亚洲国产精品一区二区三区在线| 操出白浆在线播放| 免费在线观看影片大全网站| 制服诱惑二区| 久久久久久免费高清国产稀缺| 99riav亚洲国产免费| 日本黄色视频三级网站网址| 一个人观看的视频www高清免费观看 | 黑人巨大精品欧美一区二区mp4| 91字幕亚洲| 一个人免费在线观看的高清视频| 国产一区二区三区综合在线观看| 久久精品aⅴ一区二区三区四区| 人成视频在线观看免费观看| 精品久久蜜臀av无| 999久久久国产精品视频| 丁香欧美五月| 黄色丝袜av网址大全| 99精品欧美一区二区三区四区| 久久久国产精品麻豆| 精品欧美一区二区三区在线| 亚洲精品在线美女| 久久精品国产综合久久久| 操美女的视频在线观看| 一边摸一边抽搐一进一出视频| 精品人妻1区二区| 欧美日本中文国产一区发布| 亚洲免费av在线视频|