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

前端技術(shù)探索 - 你不知道的JS 沙箱隔離

共 9492字,需瀏覽 19分鐘

 ·

2021-04-16 08:32


點擊上方關(guān)注 前端技術(shù)江湖,我們一起學習,天天進步


一些「炒冷飯」背景介紹

本文并不會從頭開始介紹 Web Worker 的基礎(chǔ)知識和基本 API 的使用等(只是部分有涉及),若還未了解過 Web Worker,可參考查閱 W3C 標準 Workers 文檔 中的相關(guān)紹。

自從 2014 年 HTML5 正式推薦標準發(fā)布以來,HTML5 增加了越來越多強大的特性和功能,而在這其中,工作線程(Web Worker)概念的推出讓人眼前一亮,但未曾隨之激起多大的浪花,并被在其隨后工程側(cè)的 Angular、Vue、React 等框架的「革命」浪潮所淹沒。當然,我們總會偶然看過一些文章介紹,或出于學習的目的做過一些應用場景下的練習,甚或在實際項目中的涉及大量數(shù)據(jù)計算場景中真的使用過。但相信也有很多人和我一樣茫然,找不到這種高大上的技術(shù)在實際項目場景中能有哪些能起到廣泛作用的應用。

究其原因,Web Worker 獨立于 UI 主線程運行的特性使其被大量考慮進行性能優(yōu)化方面的嘗試(比如一些圖像分析、3D 計算繪制等場景),以保證在進行大量計算的同時,頁面對用戶能有及時的響應。而這些性能優(yōu)化的需求在前端側(cè)一方面涉及頻率低,另一方面也能通過微任務或服務端側(cè)處理來解決,它并不能像 Web Socket 這種技術(shù)為前端頁面下的輪詢場景的優(yōu)化能帶來質(zhì)的改變。

直至 2019 年爆火的微前端架構(gòu)的出現(xiàn),基于微應用間 JavaScript 沙箱隔離的需求,Web Worker 才得以重新從邊緣化的位置躍入到我的中心視野。根據(jù)我已經(jīng)了解到的 Web Worker 的相關(guān)知識,我知道了 Web Worker 是工作在一個獨立子線程下(雖然這個子線程比起 Java 等編譯型語言的子線程實現(xiàn)得還有點弱,如無法加鎖等),線程之間自帶隔離的特性,那基于這種「物理」性的隔離,能不能實現(xiàn) JavaScript 運行時的隔離呢?

本文接下來的內(nèi)容,將介紹我在探索基于 Web Worker 實現(xiàn) JavaScript 沙箱隔離方案過程中的一些資料收集、理解以及我的踩坑和思考的過程。雖然可能整篇文章內(nèi)容都在「炒冷飯」,但還是希望我的探索方案的過程能對正在看這篇文章的你有所幫助。


JavaScript 沙箱

在探索基于 Web Worker 的解決方案之前,我們先要對當前要解決的問題——JavaScript 沙箱有所了解。

提到沙箱,我會先想到出于興趣玩過的沙盒游戲,但我們要探索的 JavaScript 沙箱不同于沙盒游戲,沙盒游戲注重對世界基本元素的抽象、組合以及物理力系統(tǒng)的實現(xiàn)等,而 JavaScript 沙箱則更注重在使用共享數(shù)據(jù)時對操作狀態(tài)的隔離。

在現(xiàn)實與 JavaScript 相關(guān)的場景中,我們知道平時使用的瀏覽器就是一個沙箱,運行在瀏覽器中的 JavaScript 代碼無法直接訪問文件系統(tǒng)、顯示器或其他任何硬件。Chrome 瀏覽器中每個標簽頁也是一個沙箱,各個標簽頁內(nèi)的數(shù)據(jù)無法直接相互影響,接口都在獨立的上下文中運行。而在同一個瀏覽器標簽頁下運行 HTML 頁面,有哪些更細節(jié)的、對沙箱現(xiàn)象有需求的場景呢?

當我們作為前端開發(fā)人員較長一段時間后,我們很輕易地就能想到在同一個頁面下,使用沙箱需求的諸多應用場景,譬如:

  1. 執(zhí)行從不受信的源獲取到的第三方 JavaScript 代碼時(比如引入插件、處理 jsonp 請求回來的數(shù)據(jù)等)。

  2. 在線代碼編輯器場景(比如著名的 codesandbox)。

  3. 使用服務端渲染方案。

  4. 模板字符串中的表達式的計算。

  5. ... ...

這里我們先回到開頭,先將前提假設(shè)在我正在面對的微前端架構(gòu)設(shè)計下。在微前端架構(gòu)(推薦文章 Thinking in Microfrontend 、擁抱云時代的前端開發(fā)架構(gòu)——微前端 等)中,其最關(guān)鍵的一個設(shè)計便是各個子應用間的調(diào)度實現(xiàn)以及其運行態(tài)的維護,而運行時各子應用使用全局事件監(jiān)聽、使全局 CSS 樣式生效等常見的需求在多個子應用切換時便會成為一種污染性的副作用,為了解決這些副作用,后來出現(xiàn)的很多微前端架構(gòu)(如 乾坤)有著各種各樣的實現(xiàn)。譬如 CSS 隔離中常見的命名空間前綴、Shadow DOM、 乾坤 sandbox css 的運行時動態(tài)增刪等,都有著確實行之有效的具體實踐,而這里最麻煩棘手的,還是微應用間的 JavaScript 的沙箱隔離。

在微前端架構(gòu)中,JavaScript 沙箱隔離需要解決如下幾個問題:

  1. 掛在 window 上的全局方法/變量(如 setTimeout、滾動等全局事件監(jiān)聽等)在子應用切換時的清理和還原。

  2. Cookie、LocalStorage 等的讀寫安全策略限制。

  3. 各子應用獨立路由的實現(xiàn)。

  4. 多個微應用共存時相互獨立的實現(xiàn)。

在 乾坤 架構(gòu)設(shè)計中,關(guān)于沙箱有兩個入口文件需要關(guān)注,一個是 proxySandbox.ts,另一個是 snapshotSandbox.ts,他們分別基于 Proxy 實現(xiàn)代理了 window 上常用的常量和方法以及不支持 Proxy 時降級通過快照實現(xiàn)備份還原。結(jié)合其相關(guān)開源文章分享,簡單總結(jié)下其實現(xiàn)思路:起初版本使用了快照沙箱的概念,模擬 ES6 的 Proxy API,通過代理劫持 window ,當子應用修改或使用 window 上的屬性或方法時,把對應的操作記錄下來,每次子應用掛載/卸載時生成快照,當再次從外部切換到當前子應用時,再從記錄的快照中恢復,而后來為了兼容多個子應用共存的情況,又基于 Proxy 實現(xiàn)了代理所有全局性的常量和方法接口,為每個子應用構(gòu)造了獨立的運行環(huán)境。

另外一種值得借鑒的思路是阿里云開發(fā)平臺的 Browser VM,其核心入口邏輯在 Context.js 文件中。它的具體實現(xiàn)思路是這樣的:

  1. 借鑒 with 的實現(xiàn)效果,在 webpack 編譯打包階段為每個子應用代碼包裹一層代碼(見其插件包 breezr-plugin-os 下相關(guān)文件),創(chuàng)建一個閉包,傳入自己模擬的 window、document、location、history 等全局對象(見 根目錄下 相關(guān)文件)。

  2. 在模擬的 Context 中,new 一個 iframe 對象,提供一個和宿主應用空的(about:blank) 同域 URL 來作為這個 iframe 初始加載的 URL(空的 URL 不會發(fā)生資源加載,但是會產(chǎn)生和這個 iframe 中關(guān)聯(lián)的 history 不能被操作的問題,這時路由的變換只支持 hash 模式),然后將其下的原生瀏覽器對象通過 contentWindow 取出來(因為 iframe 對象天然隔離,這里省去了自己 Mock 實現(xiàn)所有 API 的成本)。

  3. 取出對應的 iframe 中原生的對象之后,繼續(xù)對特定需要隔離的對象生成對應的 Proxy,然后對一些屬性獲取和屬性設(shè)置,做一些特定的實現(xiàn)(比如 window.document 需要返回特定的沙箱 document 而不是當前瀏覽器的document 等)。

  4. 為了文檔內(nèi)容能夠被加載在同一個 DOM 樹上,對于 document,大部分的 DOM 操作的屬性和方法仍舊直接使用宿主瀏覽器中的 document 的屬性和方法處理等。

總的來說,在 Browser VM 的實現(xiàn)中, 可以看出其實現(xiàn)部分還是借鑒了 乾坤 或者說其他微前端架構(gòu)的思路,比如常見全局對象的代理和攔截。并且借助 Proxy 特性,針對 Cookie、LocalStorage 的讀寫同樣能做一些安全策略的實現(xiàn)等。但其最大的亮點還是借助 iframe 做了一些取巧的實現(xiàn),當這個為每個子應用創(chuàng)建的 iframe 被移除時,寫在其下 window 上的變量和 setTimeout、全局事件監(jiān)聽等也會一并被移除;另外基于 Proxy,DOM 事件在沙箱中做記錄,然后在宿主中生命周期中實現(xiàn)移除,能夠以較小的開發(fā)成本實現(xiàn)整個 JavaScript 沙箱隔離的機制。

除了以上社區(qū)中現(xiàn)在比較火的方案,最近我也在 大型 Web 應用插件化架構(gòu)探索 一文中了解到了 UI 設(shè)計領(lǐng)域的 Figma 產(chǎn)品也基于其插件系統(tǒng)產(chǎn)出了一種隔離方案。起初 Figma 同樣是將插件代碼放入 iframe 中執(zhí)行并通過 postMessage 與主線程通信,但由于易用性以及 postMessage 序列化帶來的性能等問題,F(xiàn)igma 選擇還是將插件放入主線程去執(zhí)行。Figma 采用的方案是基于目前還在草案階段 Realm API,并將 JavaScript 解釋器的一種 C++ 實現(xiàn) Duktape 編譯到了 WebAssembly,然后將其嵌入到 Realm 上下文中,實現(xiàn)了其產(chǎn)品下的三方插件的獨立運行。這種方案和探索的基于 Web Worker 的實現(xiàn)可能能夠結(jié)合得更好,持續(xù)關(guān)注中。


Web Worker 與 DOM 渲染

在了解了 JavaScript 沙箱的「前世今生」之后,我們將目光投回本文的主角——Web Worker 身上。

正如本文開頭所說,Web Worker 子線程的形式也是一種天然的沙箱隔離,理想的方式,是借鑒 Browser VM 的前段思路,在編譯階段通過 Webpack 插件為每個子應用包裹一層創(chuàng)建 Worker 對象的代碼,讓子應用運行在其對應的單個 Worker 實例中,比如:

__WRAP_WORKER__(`/* 打包代碼 */ }`);

function __WRAP_WORKER__(appCode) {
 var blob = new Blob([appCode]);
 var appWorker = new Worker(window.URL.createObjectURL(blob));

但在了解過微前端下 JavaScript 沙箱的實現(xiàn)過程后,我們不難發(fā)現(xiàn)幾個在 Web Worker 下去實現(xiàn)微前端場景的 JavaScript 沙箱必然會遇到的幾個難題:

  1. 出于線程安全設(shè)計考慮,Web Worker 不支持 DOM 操作,必須通過 postMessage 通知 UI 主線程來實現(xiàn)。

  2. Web Worker 無法訪問 window、document 之類的瀏覽器全局對象。

其他諸如 Web Worker 無法訪問頁面全局變量和函數(shù)、無法調(diào)用 alert、confirm 等 BOM API 等問題,相對于無法訪問 window、document 全局對象已經(jīng)是小問題了。不過可喜的是,Web Worker 中可以正常使用 setTimeout、setInterval 等定時器函數(shù),也仍能發(fā)送 ajax 請求。

所以,當先要解決問題,便是在單個 Web Worker 實例中執(zhí)行 DOM 操作的問題了。首先我們有一個大前提:Web Worker 中無法渲染 DOM,所以,我們需要基于實際的應用場景,將 DOM 操作進行拆分。

React Worker DOM

因為我們微前端架構(gòu)中的子應用局限在 React 技術(shù)棧下,我先將目光放在了基于 React 框架的解決方案上。

在 React 中,我們知道其將渲染階段分為對 DOM 樹的改變進行 Diff 和實際渲染改變頁面 DOM 兩個階段這一基本事實,那能不能將 Diff 過程置于 Web Worker 中,再將渲染階段通過 postMessage 與主線程進行通信后放在主線程進行呢?簡單一搜,頗為汗顏,已經(jīng)有大佬在 5、6 年前就有嘗試了。這里我們可以參考下 react-worker-dom 的開源代碼。

react-worker-dom 中的實現(xiàn)思路很清晰。其在 common/channel.js 中統(tǒng)一封裝了子線程和主線程互相通信的接口和序列化通信數(shù)據(jù)的接口,然后我們可以看到其在 Worker 下實現(xiàn) DOM 邏輯處理的總?cè)肟谖募?worker 目錄下,從該入口文件順藤摸瓜,可以看到其實現(xiàn)了計算 DOM 后通過 postMessage 通知主線程進行渲染的入口文件 WorkerBridge.js 以及其他基于 React 庫實現(xiàn)的 DOM 構(gòu)造、Diff 操作、生命周期 Mock 接口等相關(guān)代碼,而接受渲染事件通信的入口文件在 page 目錄下,該入口文件接受 node 操作事件后再結(jié)合 WorkerDomNodeImpl.js 中的接口代碼實現(xiàn)了 DOM 在主線程的實際渲染更新。

簡單做下總結(jié)?;?React 技術(shù)棧,通過在 Web Worker 下實現(xiàn) Diff 與渲染階段的進行分離,可以做到一定程度的 DOM 沙箱,但這不是我們想要的微前端架構(gòu)下的 JavaScript 沙箱。先不談拆分 Diff 階段與渲染階段的成本與收益比,首先,基于技術(shù)??蚣艿奶厥庑运龅倪@諸多努力,會隨著這個框架本身版本的升級存在著維護升級難以掌控的問題;其次,假如各個子應用使用的技術(shù)棧框架不同,要為這些不同的框架分別封裝適配的接口,擴展性和普適性弱;最后,最為重要的一點,這種方法暫時還是沒有解決 window 下資源共享的問題,或者說,只是啟動了解決這個問題的第一步。

接下來,我們先繼續(xù)探討 Worker 下實現(xiàn) DOM 操作的另外一種方案。window 下資源共享的問題我們放在其后再作討論。

AMP WorkerDOM

在我開始糾結(jié)于如 react-worker-dom 這種思路實際落地開發(fā)的諸多「天塹」問題的同時,瀏覽過其他 DOM 框架因為同樣具備插件機制偶然迸進了我的腦海,它是 Google 的 AMP。

AMP 開源項目 中除了如 amphtml 這種通用的 Web 組件框架,還有很多其他工程采用了 Shadow DOM、Web Component 等新技術(shù),在項目下簡單刷了一眼后,我欣喜地看到了工程 worker-dom。

粗略翻看下 worker-dom 源碼,我們在 src 根目錄下可以看到 main-thread 和 worker-thread 兩個目錄,分別打開看了下后,可以發(fā)現(xiàn)其實現(xiàn)拆分 DOM 相關(guān)邏輯和 DOM 渲染的思路和上面的 react-worker-dom 基本類似,但 worker-dom 因為和上層框架無關(guān),其下的實現(xiàn)更為貼近 DOM 底層。

先看 worker-thread DOM 邏輯層的相關(guān)代碼,可以看到其下的 dom 目錄 下實現(xiàn)了基于 DOM 標準的所有相關(guān)的節(jié)點元素、屬性接口、document 對象等代碼,上一層目錄中也實現(xiàn)了 Canvas、CSS、事件、Storage 等全局屬性和方法。

接著看 main-thread,其關(guān)鍵功能一方面是提供加載 worker 文件從主線程渲染頁面的接口,另一方面可以從 worker.ts 和 nodes.ts 兩個文件的代碼來理解。

在 worker.ts 中像我最初所設(shè)想的那樣包裹了一層代碼,用于自動生成 Worker 對象,并將代碼中的所有 DOM 操作都代理到模擬的 WorkerDOM 對象上:

const code = `
      'use strict';
      (function(){
        ${workerDOMScript}
        self['window'] = self;
        var workerDOM = WorkerThread.workerDOM;
        WorkerThread.hydrate(
          workerDOM.document,
          ${JSON.stringify(strings)},
          ${JSON.stringify(skeleton)},
          ${JSON.stringify(cssKeys)},
          ${JSON.stringify(globalEventHandlerKeys)},
          [${window.innerWidth}${window.innerHeight}],
          ${JSON.stringify(localStorageInit)},
          ${JSON.stringify(sessionStorageInit)}
        );
        workerDOM.document[${TransferrableKeys.observe}](this);
        Object.keys(workerDOM).forEach(function(k){self[k]=workerDOM[k]});
}).call(self);
${authorScript}
//# sourceURL=${encodeURI(config.authorURL)}`;
this[TransferrableKeys.worker] = new Worker(URL.createObjectURL(new Blob([code])));

在 nodes.ts 中,實現(xiàn)了真實元素節(jié)點的構(gòu)造和存儲(基于存儲數(shù)據(jù)結(jié)構(gòu)是否以及如何在渲染階段有優(yōu)化還需進一步研究源碼)。

同時,在 transfer 目錄下的源碼,定義了邏輯層和 UI 渲染層的消息通信的規(guī)范。

總的來看,AMP WorkerDOM 的方案拋棄了上層框架的約束,通過從底層構(gòu)造了 DOM 所有相關(guān) API 的方式,真正做到了與框架技術(shù)棧無關(guān)。它一方面完全可以作為上層框架的底層實現(xiàn),來支持各種上層框架的二次封裝遷移(如工程 amp-react-prototype),另一方面結(jié)合了當前主流 JavaScript 沙箱方案,通過模擬 window、document 全局方法的并代理到主線程的方式實現(xiàn)了部分的 JavaScript 沙箱隔離(暫時沒看到路由隔離的相關(guān)代碼實現(xiàn))。

當然,從我個人角度來看,AMP WorkerDOM 也有其當前在落地上一定的局限性。一個是對當前主流上層框架如 Vue、React 等的遷移成本及社區(qū)生態(tài)的適配成本,另一個是其在單頁應用下的尚未看到有相關(guān)實現(xiàn)方案,在大型 PC 微前端應用的支持上還無法找到更優(yōu)方案。

其實,在了解完 AMP WorkerDOM 的實現(xiàn)方案之后,基于 react-worker-dom 思路的后續(xù)方案也可以有個大概方向了:渲染通信的后續(xù)過程,可考慮結(jié)合 Browser VM 的相關(guān)實現(xiàn),在生成 Worker 對象的同時,也生成一個 iframe 對象,然后將 DOM 下的操作都通過 postMessage 發(fā)送到主線程后,以與其綁定的 iframe 兌現(xiàn)來執(zhí)行,同時,通過代理將具體的渲染實現(xiàn)再轉(zhuǎn)發(fā)給原 WorkerDomNodeImpl.js 邏輯來實現(xiàn) DOM 的實際更新。


小結(jié)與一些個人前瞻

首先聊一聊個人的一些總結(jié)。Web Worker 下實現(xiàn)微前端架構(gòu)下的 JavaScript 沙箱最初是出于一點個人靈光的閃現(xiàn),在深入調(diào)研后,雖然最終還是因為這樣那樣的問題導致在方案落地上無法找到最優(yōu)解從而放棄采用社區(qū)通用方案,但仍不妨礙我個人對 Web Worker 技術(shù)在實現(xiàn)插件類沙箱應用上的持續(xù)看好。插件機制在前端領(lǐng)域一直是津津樂道的一種設(shè)計,從 Webpack 編譯工具到 IDE 開發(fā)工具,從 Web 應用級的實體插件到應用架構(gòu)設(shè)計中插件擴展設(shè)計,結(jié)合 WebAssembly 技術(shù),Web Worker 無疑將在插件設(shè)計上占據(jù)舉足輕重的地位。

其次是一些個人的一些前瞻思考。其實從 Web Worker 實現(xiàn) DOM 渲染的調(diào)研過程中可以看到,基于邏輯與 UI 分離的思路,前端后續(xù)的架構(gòu)設(shè)計有很大機會能夠產(chǎn)生一定的變革。目前不管是盛行的 Vue 還是 React 框架,其框架設(shè)計不論是 MVVM 還是結(jié)合 Redux 之后的 Flux,其本質(zhì)上仍舊還是由 View 層驅(qū)動的框架設(shè)計(個人淺見),其具備靈活性的同時也產(chǎn)生著性能優(yōu)化、大規(guī)模項目層級升上后的協(xié)作開發(fā)困難等問題,而基于 Web Worker 的邏輯與 UI 分離,將促使數(shù)據(jù)獲取、處理、消費整個流程的進一步的業(yè)務分層,從而固化出一整套的 MVX 設(shè)計思路。

當然,以上這些我個人還處于初步調(diào)研的階段,不成熟之處還需多加琢磨。且聽之,后續(xù)再實踐之。

關(guān)于本文
作者:ES2049 / 靳志凱
https://segmentfault.com/a/1190000039795656

The End

歡迎自薦投稿到《前端技術(shù)江湖》,如果你覺得這篇內(nèi)容對你挺有啟發(fā),記得點個 「在看」


點個『在看』支持下 

瀏覽 56
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久加勒比| 婷婷五月天免费视频| 黄色视频网站在线| 97色色五月天| www.91com| 波多野结衣视频无码| 大香蕉伊人在线手机网| 亚洲无码在线播放| 99视频久久| 成人免费网站在线| 成人黃色A片免费看| 国产人妻人伦精品一区| 五月婷婷综合网| 国产丝袜视频| 东京热一区二区| 亚洲av播放| 婷婷五月天基地| 欧美亚洲成人在线观看| 亚洲Av秘无码一区二区| 一级操逼大片| 国产性综合| 1插菊花综合网| 91精品一区二区| 国产黄色在线免费观看| 丁香五月综合网| 天天夜夜操| 日韩高清成人无码| 97伊人大香蕉| 国产—级a毛—a毛免费视频| 久久成人18免费网站波多野结衣| 一级操逼视频免费观看| 国产激倩都市一区二区三区欧美 | 操人人| 91视频内射| 日操夜操| 婷婷国产在线| 北条麻妃波多波多野结衣| 51精品日本| 欧美性综合网| 国产精品宾馆| 少妇搡BBBB搡BBB搡造水多,| 一级a一级a爰片免费免免在线| 欧美激情性爱网站| 亚洲无码视频在线观看高清| 欧美在线观看视频| 日韩高清无码免费| 中文字幕在线第一页| 91蝌蚪丨人妻丨丝袜| 无码a区| 青青自拍视频| 免费看黄片的网站| 高清无码做爱视频| 探花视频在线观看| 青青青国产| 欧美激情片| 人人妻人人插| 亚洲秘av无码一区二区| 97国产在线观看| va婷婷在线免费观看| A片在线免费| 91影音先锋| 息子交尾一区二区三区| 特级西西444www大胆高清图片| 日韩无码一区二区三| 中国人妻HDbute熟睡| 五月亚洲六月婷婷| 久草视频在线免费| 日韩免费Av| 成人二区三区| 欧美久草蜜桃视频| 白丝久久| 吴梦梦一区二区在线观看| 亚洲AV无码一区二区三区少妇 | 国产超碰青青草| 日韩人成| 男人的天堂久久| 五月婷婷导航| 免费成人视频在线观看| 国产avwww| 日韩欧美黄色电影| 大香蕉综合网站| 国产视频h| 久久天堂AV综合合色蜜桃网| 大香蕉黄色片| 久久久五月| 俺来也av| 亚洲精品伊人| 精品黄色片| 国产精品秘久久久久久1-~/\v7-/ 囯产精品一区二区三区线一牛影视1 | 亚洲中文字幕久久日| 蜜桃一区二区中午字幕| 国产精品后入| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 大香蕉在线视频75| 亚洲超级高清无码第一在线视频观看| 开心色播五月天| 囯产一级黄片| 青青草视频免费观看| 欧美日韩黄色极品| A免费在线观看| 特写毛茸茸BBwBBwBBw| 激情国产AV| 国产精品丝袜| 日韩欧美成人网站| 久久久久久久无码| 日韩高清无码一区二区三区| 亚洲无码一区二区三区| 亚洲秘无码一区二区三区,| 51妺嘿嘿午夜福利| 手机av在线| 大香蕉伊人在线视频| 欧美成人视频18| 日本高清色清di免费观看| 欧美日韩视频一区二区三区| 99成人精品| 精品国产AV鲁一鲁一区| 韩国无码中文| 影音先锋色AV| 亚洲黄在线观看| 久久精品苍井空免费一区二| 丁香五月天AV| 亚洲黄片免费| 成人免费大香蕉| 少妇精品| 安徽少妇搡bbw搡bbbb| 日韩在线1| 国产成人免费观看视频| 欧美成人日韩| 一个人看的www日本高清视频 | 日韩成人黄色视频| 国产日韩在线播放| 日韩一区二区无码视频| 91人人妻人人操| 无码一级二级| 深爱五月激情网| 打炮影院| 内射学生妹| 丹麦电影《下午》| 做aAAAAA免费视频| 国产一区在线观看视频| 超碰97在线精品国产| 国产精品theporn| 骚虎av| 一级欧美日韩| 女生被操网站| 免费成人黄视频| 日本在线www| 激情五月天亚洲| 性BBW| 一区二区三区四区五区无码| 大荫蒂hd大荫蒂视频| 欧美成人色图| 亚洲一级二级| 成人黄色毛片视频| 中文字幕在线视频日本| 欧美熟妇一区二区三区| 丁香五月婷婷五月天| 2018最好看的中文字幕高清电影| 亚洲秘无码一区二区三区av| 久久毛| 亚洲AAA电影| 婷婷久热| 精品无码人妻一区二区媚黑| 玖玖成人电影| 无码国产精品一区二区免费96| 免费黄色小视频| 国产小视频免费在线观看| 爆操无码| 丁香五月婷婷中文字幕| 欧美一级aaa| 欧美群交在线| 老女人操逼| 在线亚洲日韩| 白天操夜夜操| 亚洲A片V一区二区三区| 色欲av伊人久久大香线蕉影院| 亚洲无码免费观看视频| 秋霞二区| 996热re视频精品视频这里 | 亚洲成人一区二区在线观看| 鲁鲁鲁鲁鲁鲁鲁777777| 久久午夜无码鲁丝| 丰满人妻一区二区三区精品高| 51妺嘿嘿午夜福利| 欧美国产日韩综合在线观看170 | 免费爱爱视频| 最新激情网站| 婷婷看片| 综合色播| 蜜桃视频一区二区三区四区av| 黄色av无码| 秘蜜桃色一区二区三区在线观看| 国产区一区| 色婷婷色99国产综合精品| 操逼免费观看| 色五月婷婷中文字幕| 日韩人妻丰满无码区A片| 黄片91| 丝袜久久| 91视频www| 熟女人妻人妻の视频| 欧洲成人在线播放| 奥门毛片| 一级a一级a爰片免费| 婷婷无码视频| 性色aV中文字幕| 三级成人AV| 成人性爱在线视频| 日韩无码一区二区三区四区| 国产性爱网站| 18性XXXXX性猛交| ww无码| 99久久99九九99九九九| 日本处女性高潮喷水视频| 五月丁香成人电影| 超碰婷婷| 91探花视频精选在线播放| 丝瓜视频污APP| 91久久人澡人妻人人澡人人爽| 成人电影无码| 日韩久久精品| 国产精品探花熟女AV| 无码国产精品一区二区视频| 99精品视频免费| 蜜桃视频一区二区三区四区av| www.seses| 亚洲码成人| 亚洲阿v天堂| 牛牛精品一区二区| jizz在线免费观看| 亚洲乱伦视频| 日韩欧美在线不卡| 婷婷久久综合久色| 亚洲人气无码AV| 翔田千里高潮90分钟| 色中色av| 国产91视频在线观看| 人妻天天干| 日韩精品中文字幕无码| 亚洲av高清无码| 91女人18毛片水多国产| 欧美一区二区丁香五月天激情| 日本视频免费| 亚洲综合图区| 99热精品在线观看| 国产寡妇亲子伦一区二区三区四区| 日韩欧美一级| 欧美一二区| 一级毛AA片| 天堂综合网久久| 亚洲av不卡| 91免费在线| 精品人妻一区二区三区四区 | 亚洲乱伦视频| 大香蕉最新国产2025| 伊人逼逼| A片网站在线观看| 国产色色色色| www香蕉成人片com| 五月天婷婷丁香综合视频| 久久久噜噜噜久久中文字幕色伊伊| 乱伦一级| 国产高清无码一区二区三区| 超碰首页| 亚洲无码第一页| 九九黄片| 91二区| 成人无码一区| 少妇激情网站| 久久久久一区二区三区| 亚洲肏屄网| 中文无码人妻| 激情五月天av| 少妇av| 欧美一级黄色大片| 日韩A片无码ⅩXXXX| 精品人妻一区二区三区日产| 日韩精品一区二区三区四区蜜桃视频 | 亚洲高清无码播放| 成人性生活免费视频| 蜜桃网站在线观看| 91热在线| 日韩免费一级片| 欧美丰满少妇人妻精品| 大香蕉色伊人| 摸BBB槡BBBB搡BBB,,,,, | 我要操影院| 四色影视| 亚洲天堂在线观看视频网站| 亚洲第二页| 男女av| 国产成人久久777777黄蓉| 国产一区二区免费在线观看| 国产精品99久久久久久成人| 九九九热精品| 亚欧洲精品在线视频免费观看| 免费一级欧美片在线观看| 豆花网| 免费aa片| 黄色一级a片| 老司机午夜免费精品视频| 成人视频免费网站| 欧美视频自拍| 亚洲无码A片在线观看| 狠狠搞狠狠操| 91无码人妻传媒tv| 99久久久精品久久久久久| 偷拍亚洲综合| 欧美性猛交ⅩXXX无码视频| 亚洲五月丁香婷婷| 日韩亚洲天堂| 免费网站观看www在线观看| 欧美精产国品一二三产品动漫| www.色欲av| 黄片网站视频| 亚洲无码在线免费观看视频| 久久人妻中文字幕| 俺来也俺去也| 国产一区在线播放| 久久女人网| 黄色av免费在线观看| 欧美性之站| 久草视频在线免费看| 人人爱人人操人人爽| 久热大香蕉| 国产精品久久久久久久久久二区三区| 操碰99| 亚洲无码av电影| 欧美精品福利| 国产理伦| 2015中文字幕黄色视频| 精品久久久久久亚洲| 二区视频在线| 黄色内射视频| 五月丁香免费视频| 大香蕉亚洲| 特级西西444WWW高清大视频| 黄色国产视频在线观看| 蜜臀AV在线观看| 不卡视频一区| 怡红院成人av| 嫩BBB槡BBBB槡BBBB撒尿 | 99er热精品视频| 日韩欧AV| 亚洲欧洲日本在线| 色天堂在线观看视频| 99久久久国产精品无码| 成人H动漫精品一区二区三区蘑菇| 江苏妇搡BBBB搡BBBB| 中国乱伦视频| 一道本无码视频| 亚洲视频在线播放| 成人123区| 人人妻人人做| 国产久久免费视频| 一区二区人妻| 中文字幕丰满的翔田千里| H网站在线观看| 在线黄色AV| 一道本无码在线观看| 午夜AV福利| 国产黄色视频免费| 91成人亚洲| 国产欧美视频在线| av无码免费在线观看| 亚洲有码在线视频| 99久久婷婷国产综合精品漫| 久色悠悠| 18国产免费视频在线观看| 日韩欧美中文在线| 国产一级视频| 成人在线三级| 精品aaa| 亚洲综合91| 人妻少妇偷人精品无码免费| 五月天婷婷在线视频| www.黄色av| 成人性爱视频在线| 激情无码在线观看| 国产乱子伦-区二区三区熟睡91 | 久久青草视频| 亚州无码| AA片免费看| 久久精品999| 久久99精品久久久水蜜桃| 99热精品在线观看| 高清无码直接看| 亚洲日逼视频| 91人妻人人澡人人爽人人精吕 | 操逼视频网站免费观看| 五月婷婷六月香| 日韩三级小说| 亚洲欧美成人片| 内射视频免费观看| 青娱乐偷窥成| 国产一级A| 在线播放一区| 超碰老熟女| 国产一区二区三区四区在线观看| 91午夜视频| 国产福利视频在线观看| 精品视频免费在线观看| 熟女乱论| 俺也干| 蜜桃视频| av手机在线| 人人搞人人摸| 青青啪啪啪| 久久黄色精品视频| 国产www在线观看| 亚洲日韩一区二区三区四区| 极品av| 黑人AV在线观看| 亚洲天堂无码视频| 麻豆国产成人AV一区二区三区| 日韩WWW| 青青网站| 无码乱码在线观看| 美女自慰网站免费| 中文字幕网站在线观看| 国产成人三级片| 九九99精品视频| 91牛| 操逼操逼逼| 日本无码区| 国产又爽又黄在线看视频| 亚洲无码十八禁| 免费性爱视频网站| 蜜桃久久av一区| 天天操免费| 免费视频一区二区三区四区| 精品国产一二三区| 亚洲成人高清无码| 国产A级片| 91丨豆花丨成人熟女| 日韩午夜成人电影| 欧美亚韩| 亚洲有码中文字幕| 日韩色色网| 欧美性生活视频| 欧美后门菊门交| 蜜桃av无码一区三区| 亚洲天堂天天| 亚洲天堂2025| 91日韩高清| 九九九九精品| 日日干综合| 97色碰| 中文字幕在线观看av| 中文字幕无码网站| 日本无码视频在线观看毒| 人人操在线播放| 香蕉综合在线| 中文人妻av| 一二区视频| 欧美狠狠插| 亚洲免费观看| 精品成人无码| 撸一撸av| 国产无套在线观看| 亚洲欧洲精品在线| 欧美精品黄| 日韩无码高清视频| 99国产精品99久久久久久粉嫩 | 国产口爆| 国产一级操逼视频| 人妻少妇综合| 黄色一区在线| 狼友无码| 性爱91视频| 成人精品一区二区三区视频| 婷婷色亚洲| 嫩BBB槡BBBB槡BBBB百度| 日本色色网站免费| 3D动漫啪啪精品一区二区中文字幕| 999热视频| 综合站欧美精品| 色色丁香| 人妻少妇精品无码| 91成人综合| 高清国产av| 久久99国产精品| 亚洲最新AV在线| 在线免费看黄片| 亚洲精品一区二区三区新线路| 91porn国产| 国内夫妻【20p】| 久久精品成人| AV天堂资源| 粉嫩一区二区三区四区| 波多野结衣AV在线播放| 先锋资源一区| 国产一二| 蜜臀AV在线| 午夜无码人妻AV大片| 伊人逼逼| 色欲天天网| 大香蕉伊在线观看| 99re免费视频| 高清无码一级片| 欧美色视频在线观| 操美女逼逼| 欧美在线无码| 亚洲无码色婷婷| 嫩BBB嗓BBBB榛BBBB| 国产一级a一级a免费视频| 5D肉蒲团| XXX日韩| 无码精品ThePorn| 夜夜撸网站| jt33免费观看高清| 337P大胆粉嫩噜噜噜| 中文亚洲字幕| 黄色直播在线观看| 学生妹内射| 国产91探花| 免费一级黄色电影| 色丁香五月婷婷| 亚洲大片在线观看| 8090操逼网| 精品乱伦| 97人人爱| 亚洲逼逼| 黄色一级大片在线免费看国产| 在线观看av中文字幕| 在线日韩视频| 一区二区三区四区视频在线 | 人人操人人操人人| 毛片一级片| A片国产| 伊人久久久影视大全| 91探花足浴店按摩店| 毛片视频网站| 欧美亚洲综合在线| 亚洲色图五月天| 操美女嫩逼| 日韩a| 国产精视频| 久久熟女嫩草成人片免费| 人人舔人人爱| 婷婷深爱五月丁香网| 日韩人妻无码视频| 精品免费国产一区二区三区四区| 亚洲青青| 国产精品乱码一区二区三区| 国产AV无码区亚洲| 国产精品天天干| 毛片毛片毛片毛片毛片毛片| 五月天久久久久| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 国产精品国产三级国产专区53| 中文√在线天堂8| 免费精品黄色网页| 欧美操比视频| 中文字幕人妻一区| 日本色视频| 国产午夜精品一区二区三区嫩A| 亚洲视频欧洲视频| 91色色| 天天干天天操天天干| 啪啪视频最新地址发布页| 神马午夜视频| 久久久91人妻无码精品蜜桃ID| 国产精品一级二级三级| 无码激情| 99在线视频免费观看| 国产无套内射在线观看| 亚洲大逼| 中文无码不卡| 波多野结衣视频在线观看| 成人电影亚洲天堂| 91在线网站| 免费黄色成人视频| 免费看黄A级毛片成人片| 亚洲V在线| 91在线无码精品秘入口电车| 久久精品国产AV一区二区三区| 黑人内射人妖| 欧美熟女18| 国产VA| 波多野结衣国产| 亚洲无码精品一区| 亚洲熟女一区二区| 在线观看一级片| 国产欧美在线观看不卡| 天堂A片电影网站在线观看| 亚洲成人av在线| 国精品伦一区一区三区有限公司| 亚洲第一色图| 最新中文字幕av| 日韩黄色电影视频| 日本日逼网| 一道本视频在线| 国精品无码人妻一区二区三区免费 | 91网站在线观看视频| 中文字幕北条麻妃| 无码精品人妻一区二区欧美| 91蝌蚪久久| 精品成人| 亚洲天堂网在线观看| 婷婷五月天无码| 苍井空一区二区三区| 狠狠干狠狠爱| 久久精品久| 91天天| 亚洲无码在线资源| 日本色情视频网站| 久久人妻无码中文字幕系列| 内射视频网站| 亚洲视频一区二区三区| 日韩精品成人电影| 久久视频免费| 囯产精品久久久久久久| 亚洲中文字幕在线视频观看| 中文字幕A片| 在桌下含她的花蒂和舌头H视频 | 丁香五月婷婷久久| 黄色A片免费观看| 亚洲第一色婷婷| 无码综合| 91精品国产综合久久久蜜臀粉嫩| 国产精品久久久91| 一级毛AA片| 专业操美女视频网站| 亚洲成人在线视频| 欧美老妇性猛交| 精品国产91乱码一区二区三区 | 国产中文字幕亚洲综合欧美 | 噜噜噜噜射| 久久婷婷久久| 亚洲第一狼人综合网| 天堂无码| 美女黄网站| 国产成人在线播放| 日韩黄色三级片| 欧美久久久久| 国产视频无码| 大香伊人中文字幕精品| 秋霞中文字幕| 久久久久性爱| 亚洲国产黄色视频| 嫩草视频网站| 精品黄色片| 色五月在线观看| 欧美a片在线| 日韩性爱在线观看| 日本男人天堂| 十八女人高潮A片免费| 国产成人精品久久| 国产亚洲精品久久久久久桃色| 青青草在线观看视频| 99成人在线视频| 欧美一级免费视频| 爱射网| 51国产视频| 国产主播AV| 久久久久亚洲AV无码专区成人| 欧美一级特黄A片免费观看| 久久综合伊人7777777| 91无码高清视频| 午夜免费福利视频| 欧美日韩三级在线| 色婷婷Av一区| 国产—级a毛—a毛免费视频| 精品吃奶一区二区三区视频| 婷婷五月天成人社区| 香蕉成人网站在线观看| 久久亚洲影视| 国产一二| 亚洲欧美日韩在线| 无码国产99精品久久久久网站| 内射一区二区三区| 91成人视频免费观看| 国产中文字幕在线免费观看| 五月天综合久久| 五月激情天| 国产八区| 日韩在线第—页| 日韩精品成人av| 国产黄色视频免费看| 亚洲AV无码专区在线播放中文 | 人妻丝袜中出北条麻妃| 波多野结衣无码流出| 精品看片| 一本色道久久综合熟妇人妻| gogogo免费高清在线偷拍| 日韩无码第四页| 日韩av在线看| 污视频网站免费观看| 中文字幕精品一级A片| 九色PORNY丨自拍蝌蚪| 另类老妇性BBwBBw图片| 免费网站观看www在线观| 欧美高潮视频| 色屁屁草草影院ccyycom| 天天操网址| 黄色视频网站在线免费观看| av片在线免费观看| 中文在线观看视频| A片免费网站| 欧美一区二区在线| 成人在线免费视频| 午夜撸一撸| 做爱视频网站18| 98无码人妻精品一区二区三区 | 亚洲视频播放| 深爱婷婷| 天天干天天爽| 日韩欧美不卡色不卡| 黄色av无码| 小黄片在线免费观看| 少妇搡BBBB搡BBB搡造水多,| 五月天综合久久| 人人搞人人操| 日本成人高清视频| 久在线视频| 三级视频网| 自慰精品| 国产成人视频在线观看| 男女拍拍拍| 午夜国产精品AV| 五月天婷婷在线播放视频免费观看| www.射| 18禁网站免费观看| 草逼视频免费看| 韩国三级HD久久精品HD| 婷婷综合五月天| 免费一级做a爱片毛片A片小说| 欧美精品秘一区二区三区蜜臀| 国产成人精品AV在线观| 中文视频免费播放| 嫩BBB槡BBBB槡BBB小号| 淫色AV| 欧美一区免费| 西西特级WWW444无码| 久久久91精品国产一区苍井空| 一区二区三区黄色| 色综合久久88色综合天天99 | 欧美黄色免费看| 热逼视频| 久久成人三级| 久久精品国产AV| 欧美日皮| 黄片视频免费播放| 欧美一区二区在线视频| 在线免费观看AV片| 欧美性爱小说| 日本操B久久| 中文字幕精品综合| 中文字幕日韩美| 中文字幕人妻在线中文乱码怎么解决| 四虎在线视频| 天天色色综合| 男女av在线| 欧美日韩群交| 澳门午夜黄色在线| 欧美三级欧美三级三级| wwwAV在线观看| 亚洲va中文字幕| 亚洲精品资源| 高清无码在线视频| 亚洲欧美手机在线| 欧美日韩黄色极品| 欧美日韩在线视频免费观看| 亚欧洲精品| 黄色AV天堂| 91人妻人人澡人人精品| 玖玖爱av| jzzijzzij亚洲成熟少妇在线观看 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 国产一区二区三区免费播放| 在线黄网| 人人干人人操人人爱| 操逼视频看看| 69国产精品无码免费| 超碰碰碰碰碰| 国产欧美日韩在线观看| 91中文字幕| 日韩黄色电影在线| www.91madou| 特级西西444www大精品| 超碰人人射| 国产午夜福利电影| 久久成人18免费网站波多野结衣| 蜜臀精品色无码蜜臀AV| 91无码人妻精品一区二区蜜桃| 最近中文字幕mv第三季歌词| 午夜18视频在线观看| 国产吃奶| 尻屄视频网站| 久久色婷婷| 国产精品久久久久久久久久九秃 | 国产免费黄色电影| www.zaixianshipin| 亚洲欧美日韩免费| 无码人妻在线播放| 亚洲成人精品视频| 91人人妻| 免费一级欧美片在线观看| 色哟哟视频| 亚洲黄色免费| yw·163.爆乳尤物com| AⅤ中文字幕在线免费观看| 国产精品偷拍视频| 夜夜撸日日| 五月天开心网| 黄色成人18| 操比免费视频| 超碰操一操| 成人电影一区二区| 久久久性爱视频| 人妻少妇91精品一区黑人| 亚洲精品无码更新| 久草手机视频在线观看| 日本黄色免费看| 丁月婷婷五香天日五月天| 天天射中文| 亚洲色,天堂网| 懂色av,蜜臀AV粉嫩av| 国产激情都市一区二区三区欧美| 国产波霸爆乳一区二区| 午夜AV福利| 久久xx| 成人午夜精品福利免费| 99热一区二区三区| 九九九在线视频| 天天摸天天操| 亚洲国产剧情| 亚洲中文偷拍| 亚洲精品无码中文字幕| 看操逼视频| 狼友视频免费| 豆花视频久久| 亚洲国产精品久久| 东京热综合影院| www.俺去啦| 中文无码播放| 欧美性爱小说| 欧美日韩加勒比| 成人图片小说| 人妻FrXXeeXXee护士| 女人A片一级黄色| 日韩1区2区| 国产精品色视频| 97无码视频| 日韩AV成人无码久久电影| a毛片| 四虎精品影院| 亚洲国产成人精品午夜| 国产在线色| 国产一级a一级a免费视频| 国产中文字幕亚洲综合欧美| 在线a视频免费观看| 亚洲黄色视频免费看| 欧美伊人网| 热热热热色| 操逼操逼视频| 91精品一区二区| 水蜜桃视频网站在线观看| 好吊顶亚洲AV大香蕉色色| 香蕉久久a毛片| 国产男女av| 国产三级视频在线| 在线h片| 欧美3P视频| 777色色色| 人人妻人人爽人人澡人人精品| 日韩大尺度Av| A片在线免费| 99热在线免费| 黄色色情小说| 婷婷六月色| 99热都是精品| 青青草免费在线视| 无码导航| 高清AV无码| 88国产精品| 大香蕉国产在线视频| 亚洲性爱中文字幕| 天天摸天天添| 四虎成人无码A片观看| 日日摸日日| 国产污视频| 国产成人精品麻豆| 天天爽天天操| 思思热在线视频精品| 国产在线观看免费| 蜜桃视频一区二区三区四区av| 波多野结衣福利视频| 成全在线观看高清的| 亚洲狠狠| 亚洲熟妇AV日韩熟妇在线| www.av91| 自拍偷拍免费| 国产成人av在线观看| 偷拍综合网| 综合av| 久久久久久综合| 国产一级黄色| 91亚洲国产成人精品一区二区三| 国产视频二区|