亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開發(fā) > HTML5 > 正文

HTML5頁(yè)面無(wú)縫閃開的問(wèn)題及解決方案

2024-09-05 07:23:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在傳統(tǒng)的 web 優(yōu)化中,我們可以采取壓縮、拆包、動(dòng)態(tài)加載等方法減少首屏資源大小,也能通過(guò)離線包、頁(yè)面直出等方案加速 html 返回,之前一篇h5 秒開大全有部分簡(jiǎn)析。在大部分場(chǎng)景中,這些方案都足夠用,也能得到出色的效果。但仍有兩種無(wú)法盡善盡美的地方:其一是短暫的白屏現(xiàn)象不可避免,其二是對(duì)于超大型 web 應(yīng)用難以做到秒開。結(jié)合客戶端特性,我們有沒(méi)有辦法,進(jìn)一步做到極致,打開 web 頁(yè)面和打開客戶端頁(yè)面無(wú)差異的體驗(yàn)?zāi)兀?/p>

傳統(tǒng)方案的困境

無(wú)論是 html 離線,還是直出,以及讓 webview 啟動(dòng)和網(wǎng)絡(luò)請(qǐng)求并行 ,頁(yè)面的切換和打開都無(wú)法避免 html 加載這一過(guò)程。對(duì)于大型應(yīng)用而言,龐大的 js 初始化解析和執(zhí)行會(huì)耗費(fèi)巨大的時(shí)間。

 

新的思考方向?

速度優(yōu)化的本質(zhì)是以空間換時(shí)間。我們是否可以從這個(gè)思路,將打開 webview 及解析 html 這以過(guò)程省略掉呢?答案是可以的。

容器化方案

容器化 即是我們最終探索與實(shí)踐的出來(lái)的一套方案。正常 web 頁(yè)面關(guān)閉后,webview 組件即會(huì)銷毀掉,下一次再打開需要重新啟動(dòng)。通常讓 webview 保持常駐的做法可以節(jié)省 webview 啟動(dòng)時(shí)間, 但簡(jiǎn)單的常駐 webview 并不能做到頁(yè)面秒開,頁(yè)面打開仍然需要重新解析 html。

對(duì)于我們的應(yīng)用特征而言,頁(yè)面切換實(shí)際上是僅僅內(nèi)容數(shù)據(jù)的變化,比如切換一篇文檔,其 html 容器及樣式都是同一套,而差異僅僅只是在數(shù)據(jù)上,重新載入 html 及初始化 js 這部分耗時(shí)完全可以避免掉。讓 webview 組件及其容器內(nèi)的 html 頁(yè)面常駐,在文檔切換的過(guò)程,僅僅對(duì)數(shù)據(jù)進(jìn)行替換,這即是容器化方案。容器化方案省去了 webview 重復(fù)啟動(dòng)和渲染 html 的問(wèn)題,打開文檔,耗時(shí)只在做數(shù)據(jù)替換,真正做到了秒開。

容器切換

web 側(cè)如何感知到不同的頁(yè)面在進(jìn)行互切換,數(shù)據(jù)如何做到替換呢?

首先在 app 打開的時(shí)候,文檔列表會(huì)進(jìn)行數(shù)據(jù)預(yù)拉取,同時(shí)觸發(fā)客戶端預(yù)啟動(dòng)容器,除此外,其他任意場(chǎng)景也能按需觸發(fā)容器啟動(dòng)(后面會(huì)聊到)。容器內(nèi)會(huì)提前進(jìn)行 html 渲染和 js 執(zhí)行,此時(shí)的數(shù)據(jù)是空的。用戶點(diǎn)擊文檔,客戶端會(huì)對(duì)打開 url 這一行為進(jìn)行監(jiān)聽,同時(shí)解析 url,取出唯一標(biāo)識(shí)符, 判斷本地是否已經(jīng)存在并且符合要求的數(shù)據(jù),如果條件命中,直接使用已經(jīng)打開的容器切出,通知到容器內(nèi)的 web,web 收到通知,通過(guò) url 取出標(biāo)識(shí)符,從本地進(jìn)行數(shù)據(jù)獲取,然后對(duì)數(shù)據(jù)進(jìn)行替換渲染,從而完成頁(yè)面切換。

容器化數(shù)據(jù)替換

直接容器替換的思路省去了代碼加載和解析時(shí)間,但對(duì)于前端代碼而言,需要支持直接替換數(shù)據(jù)。大部分前端項(xiàng)目代碼設(shè)計(jì)都是 自執(zhí)行調(diào)用 方式,支持容器化的前提是:需要對(duì)代碼改造成可支持 數(shù)據(jù)組裝和銷毀 。

// 大部分應(yīng)用加載頁(yè)面初始化的場(chǎng)景class App {    public init() {     initA();     initB();        // 初始化各種模塊        ...    }} const app = new App();app.init();

自執(zhí)行調(diào)用后,大量的內(nèi)部依賴模塊也依次進(jìn)行初始化,然后數(shù)據(jù)常駐在內(nèi)存中,通常對(duì)于加載一個(gè)正常網(wǎng)頁(yè)而言,用戶每次都是新開頁(yè)面,加載 html, 重新進(jìn)行解析和初始化,并不會(huì)帶來(lái)什么問(wèn)題。但是按照容器化思路,頁(yè)面不會(huì)重新載入,只進(jìn)行數(shù)據(jù)替代,對(duì)于大型應(yīng)用而言意味著成千上萬(wàn)的模塊需要支持內(nèi)存釋放和數(shù)據(jù)切換,一旦沒(méi)有處理好,會(huì)面臨嚴(yán)重的內(nèi)存泄露和代碼健壯性問(wèn)題。如何組織和管理這些代碼,支持可插拔式,讓整個(gè)頁(yè)面初始化流程都能鏈?zhǔn)浇M裝,可以進(jìn)行配置,是進(jìn)行容器化代碼改造的難點(diǎn)。

  • 依賴倒置

依賴倒置原則的是指內(nèi)部模塊不應(yīng)該依賴外部模塊,底層模塊不應(yīng)該依賴上層模塊。

哪些才是底層模塊,哪些才是上層模塊呢?通常而言,越穩(wěn)定不變邏輯,應(yīng)該是越底層,越接近用戶交互,容易變化的部分是上層。具體層級(jí)劃分需要分析應(yīng)用的結(jié)構(gòu)和依賴關(guān)系,良好劃分層級(jí)的應(yīng)用是容器化改造的前提。

  • 職責(zé)鏈模式

職責(zé)鏈模式是指每個(gè)對(duì)象都有接受請(qǐng)求的可能,這些對(duì)象連接成一條鏈,請(qǐng)求沿著這條鏈的傳遞,直到有對(duì)象處理,這樣做的好處是減少接受者和發(fā)送者直接的耦合。比如在一個(gè)頁(yè)面加載生命周期中,我們可以讓內(nèi)部模塊到外部模塊都實(shí)現(xiàn)相應(yīng)的生命周期職責(zé),應(yīng)用啟動(dòng)和銷毀的過(guò)程,請(qǐng)求沿著指定鏈條從外到內(nèi)傳遞,也可以按需指定跳躍某個(gè)模塊,這樣大大降低了模塊之間的耦合,從而更好的管理代碼。

export default interface IRestart{    emitter: EventEmitter;    startDestroy(): void;    destroy(): void;    restart(): void;    restartEnd(): void;    // ...}
class Page {    next: PageFlow|null;    cache: {        start: (() => Promise<any>)[];        end: (() => Promise<any>)[];    };    waitStart(callback: () => Promise<any>) {        this.cache.start.push(callback);    };    waitEnd(callback: () => Promise<any>) {        this.cache.end.push(callback);    };    setNext(flow: PageFlow) {        this.next = flow;        return flow;    }     // ...   }
  • 依賴注入

所謂依賴注入是當(dāng)指 A 對(duì)象依賴另一個(gè) B 對(duì)象時(shí),不直接在 A 對(duì)象內(nèi)初始化 B,而是通過(guò)外部環(huán)境進(jìn)行初始化,作為參數(shù)傳入 A 對(duì)象中。這樣做的好處是當(dāng) B 模塊的初始化等條件發(fā)生變化時(shí),不必在 A 對(duì)象中進(jìn)行重復(fù)的修改。管理成百上千個(gè)這樣模塊相互依賴的代碼中,統(tǒng)一的依賴注入管理器會(huì)讓依賴關(guān)系管理變得更方便。

// 模塊加載器class ServiceLoader {    source: CONFIG;    loaded: boolean;    // 是否已加載    initialized: boolean;   // 是否已初始    module: any;    constructor(source: CONFIG) {        this.loaded = false;        this.initialized = false;        // ...    }    async load(params?: any): Promise<any> {     // ..load module        return this.module;    }    //...}
// 模塊管理器class ServiceCollection {    stack: ServiceLoader[];    private services = new Map<CONFIG, ServiceLoader>();    constructor() {        this.stack = [];    }    createLoader(config: CONFIG): ServiceLoader {        const loader: ServiceLoader =  new ServiceLoader(config);        this.services.set(config, loader);        return loader;    }    // ...}
initA () {    const ALoader= this.serviceCollection.createLoader(CONFIG.A);    const discussMobile = ALoader.init(this.app);}

數(shù)據(jù)預(yù)拉服務(wù)

容器是否會(huì)命中依賴兩個(gè)條件,其一對(duì)應(yīng)離線包代碼是否下載好;其二對(duì)應(yīng)版本的數(shù)據(jù)是否已經(jīng)預(yù)拉緩存完畢。

用戶進(jìn)入文檔管理首頁(yè),首先會(huì)去拉取列表索引數(shù)據(jù),然后通過(guò)列表數(shù)據(jù) id 進(jìn)行文檔內(nèi)容數(shù)據(jù)做預(yù)拉,儲(chǔ)存在本地?cái)?shù)據(jù)庫(kù),本地?cái)?shù)據(jù)庫(kù)的存儲(chǔ)可以參考前端離線化探索。

webview service

在整個(gè)數(shù)據(jù)預(yù)拉的過(guò)程,我們是通過(guò)一套獨(dú)立的客戶端后臺(tái) webview 服務(wù)執(zhí)行具體任務(wù),獨(dú)立服務(wù)的好處是讓各種容器化基礎(chǔ)服務(wù)和文檔管理列表本身進(jìn)行解耦,同時(shí)將拉取、解析、儲(chǔ)存數(shù)據(jù)這一對(duì)性能有消耗的過(guò)程放后臺(tái)服務(wù),減少了列表用戶交互界面層的性能壓力。

另一方面,作為多端公用的一個(gè)服務(wù),構(gòu)建流程上單獨(dú)部署,更新代碼的時(shí)候能夠不依賴其他頁(yè)面,變得更靈活。

數(shù)據(jù)快照

對(duì)于純 dom 結(jié)構(gòu)的文檔型品類,我們會(huì)在打開文檔,解析數(shù)據(jù)后,把生成的 html 緩存在本地?cái)?shù)據(jù)庫(kù)一張快照表里。下一次切換容器時(shí),在取本地?cái)?shù)據(jù)去解析的同時(shí),會(huì)判斷對(duì)應(yīng) id 在快照表是否存在緩存,如果有,直接取出來(lái),覆蓋在 html 上,用戶可以提前看到上一次渲染的數(shù)據(jù),等本地?cái)?shù)據(jù)真正解析完,再展示可交互界面。解析數(shù)據(jù)準(zhǔn)備渲染也是需要一個(gè)上百毫秒的過(guò)程,這一策略可以讓用戶提前看到內(nèi)容。

預(yù)創(chuàng)建

有了極致的打開速度,如何優(yōu)化新建速度呢。正常的新建流程是這樣的,用戶點(diǎn)擊新建按鈕,前端請(qǐng)求創(chuàng)建 cgi, 等待后臺(tái)創(chuàng)建成功返回新文檔 url,前端再新開 webview,加載展示頁(yè)面。我們可以看,由于需要等待創(chuàng)建接口返回的原因,到新建的過(guò)程比正常打開一個(gè)文檔還要更久。

怎么樣才能讓新建也做到秒開呢?思路和數(shù)據(jù)預(yù)拉取一樣,在用戶進(jìn)入文檔首頁(yè)的同時(shí),我們會(huì)提前預(yù)請(qǐng)求一批創(chuàng)建 id,然后緩存到本地,同時(shí)根據(jù)創(chuàng)建 id 生成一篇空白文檔數(shù)據(jù),儲(chǔ)存在本地,標(biāo)示狀態(tài)為未使用。用戶點(diǎn)擊新建按鈕,本質(zhì)上是從本地取一個(gè)未使用的文檔 url,直接用容器切換打開,然后再和后臺(tái)進(jìn)行同步。

秒開效果

容器化方案前:

容器化方案后:

 

監(jiān)控與開關(guān)系統(tǒng)

容器方案使用了數(shù)據(jù)預(yù)取場(chǎng)景,命中率的監(jiān)控非常重要。由于切換頁(yè)面的過(guò)程,如果命中容器,我們會(huì)接受來(lái)自客戶端的通知,在這個(gè)時(shí)機(jī),我們可以進(jìn)行上報(bào)。

另外一個(gè)非常重要的是容器能力的開關(guān)系統(tǒng),在發(fā)布之初保持現(xiàn)網(wǎng)穩(wěn)定性是非常重要的措施,但任何程序都不能保證沒(méi)有 bug,我們通過(guò)內(nèi)部七彩石配置系統(tǒng)控制這套容器方案的各種特性在不同品類下是否啟用,同時(shí)這套配置也支持灰度和回滾方案,能夠應(yīng)急各種突發(fā)問(wèn)題。

灰度期容器間命中率

 

待優(yōu)化的問(wèn)題

容器化方案用各種預(yù)創(chuàng)建 webview 的方式換取了打開速度,app 內(nèi)存占用上會(huì)比未使用容器化方案要大非常多,webview 的釋放時(shí)機(jī)、預(yù)加載數(shù)據(jù)的策略優(yōu)化,及從客戶端到 web 端,如何更好的做內(nèi)存管理是接下來(lái)需要進(jìn)一步優(yōu)化的點(diǎn)。

總結(jié)

到此這篇關(guān)于HTML5頁(yè)面無(wú)縫閃開方案的文章就介紹到這了,更多相關(guān)HTML5頁(yè)面無(wú)縫閃開內(nèi)容請(qǐng)搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持武林網(wǎng)!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
老鸭窝av在线| 久久综合在线观看| 免费视频中文字幕| 九九九九九九精品| 亚洲天堂黄色| 校花撩起jk露出白色内裤国产精品| 亚洲国产精品99| 国产精品粉嫩av| 欧美三级午夜理伦三级小说| 92看片淫黄大片欧美看国产片| 免费看污污视频| 亚洲精品国产一区二区在线| 亚洲精品一卡二卡| 色婷婷av一区二区| 亚洲高清在线免费| 国产hs免费高清在线观看| 久久不见久久见免费视频7| 欧美性猛交久久久乱大交小说| www日韩精品| 欧美精品123| 日韩天堂在线视频| 欧美日韩在线播放一区| 天天综合网久久综合网| 99在线|亚洲一区二区| 国产精品sm| 18禁免费无码无遮挡不卡网站| 精品人妻一区二区三区三区四区| 在线观看日韩一区| 欧美视频观看一区| xvideos成人免费中文版| 久久av红桃一区二区小说| 久久久久久国产精品| 欧美一区二区三区在线观看免费| 成人日韩在线视频| 黄色成人在线免费观看| 国产精品久久久久一区二区三区共| 337p粉嫩大胆噜噜噜噜噜91av| 免费看特级毛片| 亚洲蜜桃在线| 九色精品高清在线播放| 亚洲国产精品第一区二区三区| 婷婷成人av| 99精品一区二区三区无码吞精| 伊人春色之综合网| 日本小视频在线免费观看| 成人做爰高清视频网站| 在线成人一区二区| 一区二区三区免费视频网站| 午夜在线a亚洲v天堂网2018| 免费观看成年人视频| 国产亚洲精品av| 777.av| 丁香六月天婷婷| 欧美二区在线看| 极品尤物久久久av免费看| 亚洲二区免费| 日本中文字幕不卡免费| 成人免费在线视频观看| 视频亚洲一区二区| 国产精品午夜av| 久久这里只有精品视频网| 国产日韩精品入口| 欧美福利网址| 亚洲精品一级二级三级| 成人网址在线观看| 亚洲一二在线观看| 护士精品一区二区三区| 国产91大片| 国产97免费视频| 手机av免费观看| 自拍偷拍免费精品| a片在线免费观看| 色88888久久久久久影院野外| 亚洲精品免费一区亚洲精品免费精品一区| 无遮挡又爽又刺激的视频| 国产原创av在线| 在线国产精品视频| 免费看黄色的网站| 国产午夜精品全部视频播放| 在线观看男女av免费网址| 日韩电影免费观看在| 色婷婷在线观看视频| gogo高清免费视频| 精品久久久久久久一区二区蜜臀| 91专区在线观看| 可以免费看毛片的网站| 成年人在线观看av| 小香蕉视频在线| 男女av在线| 亚洲人成电影网站色| 91高清在线视频| 亚洲二区在线| 日韩午夜电影av| 在线观看日韩av先锋影音电影院| 欧美一级高清片在线观看| 欧美极度另类videos高清| 91精品1区| 国产一区二区三区久久久久久久久| 懂色av影视一区二区三区| 色综合视频在线观看| 在线黄色免费看| 人人草在线观看| 精品国产乱码久久久久软件| 欧美日韩国产免费一区二区三区| 久久精品国产第一区二区三区最新章节| 91九色国产视频| 在线视频中文字幕久| 久久香蕉综合色| 欧美三区免费完整视频在线观看| 亚洲一区二区图片| 日本欧美一区二区三区乱码| 免费又黄又爽又猛大片午夜| 艳女tv在线观看国产一区| 美女91精品| 曰韩精品一区二区| 日本中文字幕精品—区二区| 好男人看片在线观看免费观看国语| 97se视频在线观看| 国产日产欧美a一级在线| 欧美一区二区三区电影| 久久精品视频一区二区| 亚洲激情在线观看| 中国黄色一级视频| 日韩国产精品一区| 91在线视频导航| 最新国产一区| av第一福利大全导航| 九九爱免费视频在线观看| 国产又爽又黄视频| 久久一区二区三| 国内精品国语自产拍在线观看| 乱小说综合网站| 国产精品nxnn| 捆绑调教日本一区二区三区| 国产成人av一区二区| www.男人的天堂| 亚洲精品中文字幕| 久久精品性爱视频| 亚洲精品v欧美精品v日韩精品| 亚洲三级视频在线观看| av天堂永久资源网| 91精品入口| 亚洲欧洲另类国产综合| 91精品蜜臀一区二区三区在线| 午夜精品三级久久久有码| 欧美精品自拍| 中文字幕av一区二区三区| 六月丁香激情网| 中文字幕亚洲乱码熟女1区2区| 福利在线一区二区三区| 欧美性猛交bbbbb精品| 国语自产精品视频在线看| 精品一区视频| 91在线视频观看| 美女精品自拍一二三四| 亚洲久草视频| 欧美三级日韩三级国产三级| 欧美日韩国产精品综合| 日韩免费福利电影在线观看| av高清在线观看| 亚洲永久免费网站| 综合在线影院| 久久久久久高潮国产精品视| 午夜伦理一区二区| 国产亚洲精品资源在线26u| 国产免费a级片| 亚洲在线中文字幕| 亚洲区欧洲区| 91麻豆精品国产91久久综合| 欧美特级aaa| 亚洲国产精品va在线| 99视频有精品高清视频| 久久国产精品99国产精| 亚洲一区尤物| 国产成人精品久久久| 26uuu欧美日本| av电影高清在线观看| 香蕉视频1024| 欧美第一黄网| 成人a在线视频免费观看| 91在线资源站| 一区二区三区视频免费观看| 在线免费看黄色| 国产永久免费高清在线观看视频| 日韩三级.com| 五月婷婷综合激情| av手机天堂网| 国产精品亚洲一区二区三区在线| 久久婷婷国产综合精品青草| 直接在线观看的三级网址| 福利一区二区三区视频在线观看| 国产69精品久久777的优势| 日本韩国福利视频| 蜜桃av网站| 素人一区二区三区| 日韩伦理av| 久久久久久久久久网站| 精品在线视频一区二区| 少妇高潮露脸国语对白| 四虎海外永久免费网址| 黄色一级视频播放| 日本中文在线一区| 久久福利小视频| 日本电影免费看| 国产伦精品一区二区三区视频青涩| 深夜福利网站| 欧美欧美欧美欧美首页| 99精品久久只有精品| 台湾佬成人网| 免费在线黄色网| 欧美裸体xxxx极品少妇| 日韩日本欧美亚洲| 天天爽夜夜爽视频| 成人高清一区| 亚洲欧洲色图综合| 伊人色综合久久天天| 四虎在线视频| 7777奇米亚洲综合久久| 91社区国产高清| 国产亚洲成年网址在线观看| 在线观看欧美一区| 日韩欧美精品一区二区综合视频| 四虎国产精品永久在线| 欧美三级伦理在线| 欧美一区二区三区四| 狼人综合视频| 视频一区二区免费| 风间由美中文字幕在线看视频国产欧美| 亚洲xxxx3d| 91国模少妇一区二区三区| 黑人巨大精品欧美一区二区小视频| caoprom在线| 日本在线观看大片免费视频| 92福利视频午夜1000合集在线观看| av在线二区| 后入内射欧美99二区视频| 欧美人体做爰大胆视频| 综合网日日天干夜夜久久| 国产69精品久久久久9999小说| 樱花影视一区二区| 免费一级欧美在线大片| 亚洲动漫精品| 欧美国产美女| 福利视频网址| 成人高清在线观看免费| 自拍偷在线精品自拍偷无码专区| 在线观看国产91| 久久蜜桃资源一区二区老牛| 毛片激情在线观看| 成人国产精品日本在线| 免费视频网站www| 日本免费久久高清视频| 在线免费一级片| 91国偷自产中文字幕久久| 国产尤物一区二区在线| 亚洲国产欧美在线观看| 中文字幕日韩在线播放| 日韩一二三四| aaa在线视频| 亚洲一级免费在线观看| 久久久久久69| 九色综合婷婷综合| 黄色a级在线观看| 91精品国产综合久久香蕉麻豆| 国产自产自拍视频在线观看| 日韩在线视频免费| 性一交一乱一乱一视频| 日韩一级二级三级| 欧美 日韩 国产 成人 在线| 成人性生交大片免费看视频直播| 欧美日韩在线视频免费观看| 欧洲一区在线观看| 国产精品羞羞答答在线观看| 中文字幕免费在线不卡| 18深夜在线观看免费视频| 欧美成人小视频| 在线观看视频一区二区三区| 国产精品亚洲四区在线观看| 日韩视频一区二区三区四区| julia中文字幕久久亚洲蜜臀| 免费观影入口看日本视频| 欧美老熟妇乱大交xxxxx| 国产毛片视频| 麻豆精品不卡国产免费看| 亚洲福利视频三区| 精品精品国产高清一毛片一天堂| 久久精品www人人爽人人| 精品三级久久久| 91精品人妻一区二区三区四区| 国产 欧美 日韩 在线| 久久人人爽人人片| 色屁屁www国产馆在线观看| av动漫免费观看| 成人亚洲综合色就1024| 欧美日韩视频在线观看一区二区三区| 国产原创在线视频| 91免费电影网站| 噜噜噜久久亚洲精品国产品小说| 中日韩av在线播放| 日本aⅴ大伊香蕉精品视频| 九九热久久66| 老司机精品影院| 好吊色一区二区| 免费人成在线观看| 久久不见久久见中文字幕免费| 亚洲一级不卡视频| 色婷婷av一区二区三区久久| 久久丝袜美腿综合| 日韩在线视频网站| 日韩av资源在线播放| 国产欧美一区二区三区在线观看视频| 久草免费资源| 久久久久久久一| 国产黄在线免费观看| 日本在线精品| 欧美日韩精品| 日本高清好狼色视频| 国产伦精品免费视频| 国产精品久久久久久久久婷婷| 久久久精品国产一区二区三区| 免费毛片观看| 欧美日韩国产黄色| 国产日韩在线观看一区| 国产精品免费人成网站酒店| 精品国产乱码久久久久久蜜臀| 欧美一区午夜视频在线观看| 国产网站在线免费观看| 蜜桃免费在线视频|