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

點擊瀏覽器的前進后退按鈕時,頁面的緩存機制

系統 瀏覽器
后退/前進緩存(Back/forward cache, 以下簡稱bfcache)是一種瀏覽器優化,可實現即時的后退和前進導航。它顯著改善了用戶的瀏覽體驗,尤其是那些網絡或設備速度較慢的用戶。

[[354656]]

這是一篇譯文

原文標題:Back/forward cache

原文鏈接:https://web.dev/bfcache/

后退/前進緩存(Back/forward cache, 以下簡稱bfcache)是一種瀏覽器優化,可實現即時的后退和前進導航。它顯著改善了用戶的瀏覽體驗,尤其是那些網絡或設備速度較慢的用戶。

作為web開發人員,了解如何在所有瀏覽器上基于bfcache優化頁面非常重要。這樣可以提高用戶體驗。

瀏覽器兼容性

Firefox和Safari都早已支持bfcache,包括桌面和移動設備。

從86版開始,Chrome已經為一小部分用戶啟用了Android上的跨站點導航。在chrome87中,bfcache支持將推廣到所有Android用戶進行跨站點導航,目的是在不久的將來也支持相同的站點導航。

bfcache基礎知識

bfcache是一個內存中的緩存,它在用戶離開時存儲頁面的完整快照(包括JavaScript堆)。由于整個頁面都在內存中,如果用戶決定返回,瀏覽器可以快速輕松地恢復頁面。

有多少次你訪問一個網站,點擊一個鏈接進入另一個頁面,卻發現這不是你想要的,然后點擊后退按鈕?此時,bfcache對上一頁的加載速度會有很大的影響:

不支持bfc時:將啟動一個新的請求來加載上一個頁面,并且,根據該頁面針對重復訪問的優化程度,瀏覽器可能需要重新下載、重新解析和重新執行剛下載的部分(或全部)資源。

開啟了bfc時:加載上一個頁面基本上是即時的,因為整個頁面可以從內存中恢復,而不必訪問網絡。

bfcache不僅加快了導航速度,還減少了數據使用,因為不必再次下載資源。

Chrome的使用數據顯示,桌面上十分之一的導航和手機上五分之一的導航要么后退要么前進。啟用bfcache后,瀏覽器可以消除每天數十億個網頁的數據傳輸和加載時間!

cache是如何工作的

bfcache使用的“緩存”不同于HTTP緩存(這在加速重復導航方面也很有用)。bfcache是內存中整個頁面的快照(包括JavaScript堆),而HTTP緩存只包含以前發出的請求的響應。由于加載頁面所需的所有請求都能從HTTP緩存中得到滿足的情況非常罕見,因此使用bfcache恢復進行的重復訪問總是比最優化的非bfcache導航更快。

然而,在內存中創建頁面快照是有一定復雜性的,特別是涉及到如何最好地保存正在進行的代碼。例如,當頁面在bfcache中時,如何處理到達超時的setTimeout()調用?

答案是,瀏覽器暫停運行任何掛起的計時器或未resolved的Promise(實際上是JavaScript任務隊列中所有掛起的任務),并在頁面從bfcache恢復時(或如果)恢復處理任務。

在某些情況下,暫停任務是低風險的(例如,超時或Promise),但在其他情況下,它可能會導致非常混亂或意外的行為。例如,如果瀏覽器暫停IndexedDB事務中所需的任務,它可能會影響同一源中打開的其他選項卡(因為多個選項卡可以同時訪問同一個IndexedDB數據庫)。因此,瀏覽器通常不會嘗試在IndexedDB事務中間緩存頁面,也不會使用可能影響其他頁面的api。

有關各種API用法如何影響頁面的bfcache的詳細信息,請參考下文的內容。

監聽bfcache的API

雖然bfcache是瀏覽器自動進行的一種優化,但對于開發人員來說,知道何時發生這種情況仍然很重要,這樣他們就可以針對bfcache優化自己的頁面,并相應地調整任何指標或性能度量。

用于觀察bfcache的主要事件是頁面轉換事件pageshow和pagehide,這兩個事件存在的時間和bfcache存在的時間一樣長,并且在當今使用的幾乎所有瀏覽器中都受支持。

新的頁面生命周期事件 freeze 和 resume 也會在頁面進入或離開bfcache時以及在其他一些情況下觸發。例如,當后臺選項卡凍結以最小化CPU使用率時。注意,頁面生命周期事件目前僅在基于Chromium的瀏覽器中受支持。

監聽頁面從bfc中恢復

當頁面最初加載時,pageshow事件在load事件之后立即激發。另外,頁面從bfcache還原時,pageshow也會觸發。pageshow事件有一個persisted屬性,如果從bfcache還原頁面,則該屬性為true;如果不是,則為false。您可以使用persisted屬性來區分常規頁面加載和bfcache還原。例如:

  1. window.addEventListener('pageshow'function(event) { 
  2.   if (event.persisted === true) { 
  3.     // 頁面從bfc中恢復 
  4.     console.log('This page was restored from the bfcache.'); 
  5.   } else { 
  6.     // 頁面正常加載 
  7.     console.log('This page was loaded normally.'); 
  8.   } 
  9. }); 

在支持頁面生命周期API的瀏覽器中,當頁面從bfcache還原時(就在pageshow事件之前),resume事件也會觸發,不過當用戶重新訪問凍結的背景選項卡時,它也會觸發。如果要在凍結頁面(包括bfcache中的頁面)后恢復頁面狀態,可以使用freeze事件,但如果要測量站點的bfcache命中率,則需要使用pageshow事件。在某些情況下,您可能需要同時使用這兩種方法。

監聽頁面進入bfc

pagehide事件是pageshow事件的對應項。當頁面正常加載或從bfcache還原時,將激發pageshow事件。pagehide事件在頁面正常卸載或瀏覽器試圖將其放入bfcache時觸發。

pagehide事件還有一個persistent屬性,如果它是false,那么您可以確信頁面不會進入bfcache。但是,如果persistent屬性為true,則不能保證將緩存頁。這意味著瀏覽器打算緩存頁面,但可能有一些因素導致無法緩存。

  1. window.addEventListener('pagehide'function(event) { 
  2.   if (event.persisted === true) { 
  3.    // 頁面可能會進入bfc緩存 
  4.    console.log('This page *might* be entering the bfcache.'); 
  5.   } else { 
  6.     // 頁面會正常退出,并且會被丟棄 
  7.     console.log('This page will unload normally and be discarded.'); 
  8.   } 
  9. }); 

類似地,freeze事件將在pagehide事件之后立即觸發(如果事件的persistent屬性為true),但這同樣意味著瀏覽器打算緩存頁面。在下面描述的情況下,它可能仍然必須丟棄它。

為bfcache優化頁面

并不是所有的頁面都存儲在bfcache中,即使頁面確實存儲在那里,它也不會無限期地停留在那里。開發人員必須了解是什么使頁面符合bfcache的條件(和不符合條件),以最大限度地提高緩存命中率。

下面幾節概括了使瀏覽器盡可能緩存頁面的最佳實踐。

不要使用 unload 事件

在所有瀏覽器中優化bfcache的最重要方法是永遠不要使用unload事件。

unload事件對于瀏覽器來說是有問題的,因為它早于bfcache觸發,并且網絡上的許多頁面都是在一個(合理的)假設下運行的:unload事件觸發后,頁面將不再存在了。這就帶來了一個挑戰,因為許多頁面的構建都是基于這樣一個假設:unload事件將在用戶離開時觸發。然而,事實已經不是這樣了(而且在很長一段時間內都不是這樣)。

譯者注:這里我的理解是,瀏覽器在設計unload事件之初,就是在頁面不需要的時候觸發。如果開發者監聽了unload事件,則表示頁面銷毀時需要執行一些邏輯,這個時候,頁面自然是不需要再進行緩存了。然而這種情況下,很多開發者是希望頁面被緩存的,這和unload事件本身的含義有沖突。

所以瀏覽器面臨著一個兩難的選擇,他們必須在能改善用戶體驗的同時也可能有破壞頁面的風險。

Firefox選擇了如果添加unload偵聽器,那么頁面就不符合bfcache的條件,這樣做風險較小,但也會使很多頁面無法bfc。Safari會嘗試緩存一些監聽了unload事件的頁面,但是為了減少潛在的破壞,當用戶導航離開時,Safari不會觸發unload事件。

由于Chrome中65%的頁面都注冊了unload事件偵聽器,為了能夠緩存盡可能多的頁面,Chrome選擇與Safari保持一致。

不要使用unload事件,使用pagehide事件。pagehide事件在unload事件觸發的所有情況下都會觸發,并且在頁面放入bfcache時也會觸發。

注意,永遠不要添加unload事件偵聽器!請改用pagehide事件。在Firefox中添加unload事件監聽器會使你的站點變慢,而代碼在Chrome和Safari中大部分時間都不會運行。

僅僅有條件的添加 beforeunload 事件

beforeunload事件不會使您的頁面不符合Chrome或Safari的bfcache,但在Firefox中不行,因此除非絕對必要,否則請避免使用它。

但是,與unload事件不同,beforeunload有合法的用法。例如,當您要警告用戶他們有未保存的更改時,如果他們離開頁面,他們將丟失。在這種情況下,建議僅在用戶有未保存的更改時添加beforeunload偵聽器,然后在保存未保存的更改后立即將其刪除。

下面的寫法是?的(無條件的監聽了beforeunload事件):

  1. window.addEventListener('beforeunload', (event) => { 
  2.   if (pageHasUnsavedChanges()) { 
  3.     event.preventDefault(); 
  4.     return event.returnValue = 'Are you sure you want to exit?'
  5.   } 
  6. }); 

下面的寫法是?的:

  1. function beforeUnloadListener(event) { 
  2.   event.preventDefault(); 
  3.   return event.returnValue = 'Are you sure you want to exit?'
  4. }; 
  5.  
  6. // A function that invokes a callback when the page has unsaved changes. 
  7. // 當頁面內容未保存時,才監聽beforeunload事件 
  8. onPageHasUnsavedChanges(() => { 
  9.   window.addEventListener('beforeunload', beforeUnloadListener); 
  10. }); 
  11.  
  12. // A function that invokes a callback when the page's unsaved changes are resolved. 
  13. // 當頁面內容保存完畢時,移除beforeunload事件 
  14. onAllChangesSaved(() => { 
  15.   window.removeEventListener('beforeunload', beforeUnloadListener); 
  16. }); 

避免window.opener的references

在一些瀏覽器中(包括chrome,從86版本起),如果使用 window.open或者 target=_blank 打開一個新的頁面,但是沒有寫明:rel="noopener",那么,新打開的頁面中,會包含一個對原有頁面的引用。

除了存在安全風險外,保留了對其他頁面引用的頁面不能安全地放入bfcache,因為這可能會破壞任何試圖訪問它的頁面。

譯者注:安全問題可以參考本公眾號的這篇文章 :

使用標簽時,你可能會忽略的一個安全問題

 

因此,最好使用 rel="noopener" 來保證打開的頁面無法引用之前的頁面。如果你的站點需要打開一個新頁面并通過window.postMessage()或直接引用之前的window對象來控制之前的窗口,則新打開的頁面和之前的頁面都不符合bfcache的條件。

總是在用戶導航離開之前關閉打開的連接

如上文所述,當一個頁面被放入bfcache時,所有預定的JavaScript任務都將暫停,然后在頁面從緩存中取出時繼續執行。

如果這些計劃的JavaScript任務只訪問dom api或其他與當前頁面隔離的api,那么用戶看不到頁面時,暫停這些任務不會導致任何問題。

但是,如果這些任務涉及到和其他頁面有關的api(例如:IndexedDB、Web Locks、WebSockets等),則可能會出現問題,因為暫停這些任務可能會阻止其他選項卡中的代碼運行。因此,在以下情況下,大多數瀏覽器不會嘗試將頁面放入bfcache:

  • 頁面有未完成的indexdb事物
  • 頁面有進行中的fetch和ajax請求
  • 頁面具有打開的WebSocket或WebRTC的連接

如果您的頁面正在使用這些api中的任何一個,那么最好在pagehide或freeze事件期間始終關閉連接并移除或斷開觀察者。這將允許瀏覽器安全地緩存頁面,而不會影響其他打開的選項卡。

然后,如果頁面從bfcache恢復,則可以重新打開或重新連接到這些api(在pageshow或resume事件中)。

測試以確保頁面可緩存

雖然無法確定頁面在卸載時是否已放入緩存,但可以斷言:后退或前進導航確實從緩存中還原了頁面。

目前,在Chrome中,一個頁面可以在bfcache中停留3分鐘,這應該足夠運行一個測試(使用puppeter或WebDriver等工具),以確保pageshow事件的persistent屬性在離開頁面并單擊back按鈕后為true。

請注意,雖然在正常情況下,頁面應該在緩存中保留足夠長的時間來運行測試,但可以隨時以靜默方式將其逐出(例如,如果系統處于內存壓力下)。失敗的測試并不一定意味著頁面不可緩存,因此您需要相應地配置測試或構建失敗標準。

退出bfcache的方法

如果不希望頁面存儲在bfcache中,可以通過將頂級頁面響應中的Cache-Control頭設置為no-store來確保該頁面不會被緩存:

  1. Cache-Control: no-store 

所有其他緩存指令(包括子frame中的 no-cache 甚至 no-store)不會影響頁面bfcache的資格。

雖然這個方法是有效的,并且可以跨瀏覽器工作,但是它還有其他緩存和性能影響。為了解決這個問題,有人提議添加一個更明確的退出機制,包括在需要時清除bfcache的機制(例如,當用戶從共享設備上的網站注銷時)。

在Chrome中,可以通過設置#back-forward-cache 標志位來實現,或者一個企業級的證書。

bfcache如何影響分析和性能度量

如果你用分析工具跟蹤你的網站訪問量,你可能會注意到報告的頁面瀏覽量減少了,因為Chrome繼續為更多用戶啟用bfcache。

事實上,您可能已經低估了其他實現bfcache的瀏覽器的頁面瀏覽量,因為大多數流行的分析庫都不會將bfcache恢復作為新的頁面視圖進行跟蹤。

如果不希望由于啟用Chrome的bfcache而導致pv數下降,可以通過監聽pageshow事件并檢查persistent屬性,將bfcache還原報告為pv。

例如:

  1. // Send a pageview when the page is first loaded. 
  2. gtag('event''page_view'
  3.  
  4. window.addEventListener('pageshow'function(event) { 
  5.   if (event.persisted === true) { 
  6.     // Send another pageview if the page is restored from bfcache. 
  7.     gtag('event''page_view'
  8.   } 
  9. }); 

性能度量

bfcache還可能對字段中收集的性能指標產生負面影響,特別是度量頁面加載時間的指標。

由于bfcache導航還原現有頁面而不是啟動新頁面加載,因此啟用bfcache時收集的頁面加載總數將減少。但是,關鍵的是,由bfcache恢復替換的頁面加載可能是數據集中最快的頁面加載。這是因為根據定義,后退和前進導航是重復訪問,并且重復頁面加載通常比首次訪問的頁面加載快(由于前面提到的HTTP緩存)。

結果是數據集中的快速頁面加載更少,這可能會使分布更慢,盡管用戶體驗到的性能可能已經提高!

有幾種方法可以解決這個問題。一種方法是用各自的導航類型注釋所有頁面加載度量:導航、重新加載、后退向前或預加載。這將允許您繼續監視這些導航類型中的性能,即使總體分布為負。對于非以用戶為中心的頁面加載指標,如第一個字節的時間(TTFB),建議使用這種方法。

對web核心指標的影響

web核心指標衡量用戶在不同維度(加載速度、交互性、視覺穩定性)對網頁的體驗,由于用戶體驗到bfcache恢復比傳統頁面加載更快的導航,因此核心Web Vitals指標反映這一點很重要。畢竟,用戶并不關心bfcache是否被啟用,他們只關心導航是否快速!

Chrome用戶體驗報告(Chrome User Experience Report)等工具將很快更新,以將bfcache恢復視為數據集中單獨的頁面訪問。

雖然在bfcache恢復后還沒有專門的web性能api來度量這些指標,但是可以使用現有的web api來近似計算它們的值。

  • 對于最大內容繪制(LCP),可以使用pageshow事件的時間戳和下一個繪制幀的時間戳之間的增量(因為幀中的所有元素都將同時繪制)。請注意,對于bfcache還原,LCP和FCP(首幀內容繪制)是相同的。
  • 對于First Input Delay(FID),可以在pageshow事件中重新添加事件監聽器(與FID polyfill使用的監聽器相同),并將FID報告為bfcache還原后第一個輸入的延遲。
  • 對于累積布局移位(CLS),您可以繼續使用現有的Performance Observer;你只需將當前的CLS值重置為0。

本文轉載自微信公眾號「符合預期的CoyPan」,可以通過以下二維碼關注。轉載本文請聯系符合預期的CoyPan公眾號。

 

 

 

責任編輯:武曉燕 來源: 符合預期的CoyPan
相關推薦

2011-05-06 09:36:16

動態頁面

2017-04-26 14:15:35

瀏覽器緩存機制

2017-05-15 13:40:20

瀏覽器http緩存機制

2018-08-07 10:44:50

緩存技術瀏覽器

2021-07-22 09:55:28

瀏覽器前端緩存

2016-01-05 12:54:52

瀏覽器瀏覽器端緩存

2017-09-28 12:03:40

前端

2020-03-11 20:42:34

瀏覽器緩存機制

2017-05-19 08:05:08

瀏覽器緩存HTTP

2019-04-08 10:27:00

渲染瀏覽器DOM

2019-01-03 13:09:58

瀏覽器緩存原理

2020-10-29 11:04:28

緩存瀏覽器LocalStorag

2020-07-16 08:04:21

瀏覽器緩存策略

2021-06-01 09:12:47

前端瀏覽器緩存

2021-08-02 13:05:49

瀏覽器HTTP前端

2022-04-29 09:11:14

CORS瀏覽器

2019-08-16 10:54:03

本地存儲javascripthttp緩存

2020-11-13 11:15:17

數據加密攻擊模型瀏覽器密碼

2020-12-29 09:56:29

瀏覽器緩存HTTP

2018-11-30 09:00:19

html5cssjavascript
點贊
收藏

51CTO技術棧公眾號

aiai久久| av免费不卡国产观看| 麻豆传媒一区二区三区| 久久综合国产精品台湾中文娱乐网| 欧美色图校园春色| 伊人网在线播放| 国产精品三级在线观看| 亚洲一区二区三区在线视频| 久久草视频在线| 欧美军人男男激情gay| 日韩欧美电影一二三| 国产精品宾馆在线精品酒店| 日本三级视频在线观看| 99国产麻豆精品| 91精品久久久久久久久中文字幕 | 中文字幕日本人妻久久久免费 | 久久精彩免费视频| 六十路息与子猛烈交尾| 亚州欧美在线| 色天使色偷偷av一区二区| 无码人妻aⅴ一区二区三区日本| 人成免费电影一二三区在线观看| 国产乱码精品一品二品| 青青青国产精品一区二区| 三级影片在线看| 精品国产一区二区三区久久久蜜臀| 欧美成人一区二区| 粉色视频免费看| 亚洲天堂手机| 亚洲无人区一区| 久久最新免费视频| 无遮挡的视频在线观看 | 69视频在线观看免费| 2021年精品国产福利在线| 欧美色涩在线第一页| 国产视频九色蝌蚪| 日本高清成人vr专区| 国产精品色婷婷久久58| 日本亚洲导航| 青青色在线视频| 成人av电影在线观看| 5566av亚洲| 国产精品视频a| 麻豆成人免费电影| 国产精品久久久久久久久久| 伊人手机在线视频| 亚洲国产三级| 欧美精品成人91久久久久久久| 男人晚上看的视频| 国产韩日影视精品| 色噜噜久久综合伊人一本| 性欧美一区二区| 黑人操亚洲人| 国产亚洲视频中文字幕视频| 国产伦精品一区二区三区视频女| 亚洲欧美校园春色| 亚洲另类欧美自拍| 精品成人av一区二区三区| 最近国产精品视频| 亚洲色图偷窥自拍| 嘿嘿视频在线观看| 成人情趣视频| 色妞欧美日韩在线| 538精品在线视频| 欧美91福利在线观看| 欧美另类极品videosbestfree| 免费一级黄色大片| 夜夜爽av福利精品导航| 日韩av电影在线网| www.av88| 国模无码大尺度一区二区三区| 成人网在线视频| 99久久精品无免国产免费| 国产黑丝在线一区二区三区| 成人激情av| 午夜性色福利影院| 国产精品青草久久| 日韩 欧美 自拍| 波多野结衣乳巨码无在线观看| 午夜欧美视频在线观看| 国产精品免费观看久久| 97成人超碰| 欧美一区二区三区在线观看视频| 久久久久亚洲AV成人网人人小说| 日韩精品社区| 色综合伊人色综合网| 九九热精彩视频| 亚洲一区二区毛片| 国产精品一区电影| 亚洲第一大网站| 久久久精品免费免费| 日本福利视频导航| 黄色大片在线| 欧美特级限制片免费在线观看| 91欧美一区二区三区| 久久a级毛片毛片免费观看| 亚洲人高潮女人毛茸茸| 波多野结衣在线网址| 99国产精品久久久久久久成人热| 日本久久久久久久久| 国产三级漂亮女教师| 99视频一区二区三区| 亚洲午夜精品久久久久久浪潮| 天堂8中文在线| 色婷婷综合久久久久中文 | 久久久精品视频网站| 国产麻豆欧美日韩一区| 欧美日韩国产精品一卡| 成人在线直播| 在线精品视频免费播放| yjizz视频| 91av精品| 国产精品久久二区| 天堂网av在线播放| 亚洲精品日产精品乱码不卡| www黄色av| 精品久久ai电影| 美日韩精品视频免费看| 国内av在线播放| a美女胸又www黄视频久久| 男女啪啪的视频| 3d欧美精品动漫xxxx无尽| 精品国产乱码久久| 成人在线观看高清| 日本欧美大码aⅴ在线播放| 狠狠干一区二区| 调教一区二区| 日韩一级精品视频在线观看| av在线播放中文字幕| 视频一区二区不卡| 欧美精品一区二区三区在线四季| tube8在线hd| 日韩欧美国产综合在线一区二区三区 | 福利一区二区三区四区| 国产一区中文字幕| www.午夜色| 婷婷激情成人| 中文字幕一区电影| 亚洲高清视频免费观看| 国产日产欧美一区二区三区| 乱妇乱女熟妇熟女网站| 九九热播视频在线精品6| 久久久久久久国产精品视频| www.综合色| 夜夜爽夜夜爽精品视频| 欧美图片自拍偷拍| 国产精品videosex极品| 亚洲综合成人婷婷小说| 午夜伦理在线视频| 欧美一区二区三区思思人| 欧美激情图片小说| 国产精品亚洲午夜一区二区三区 | 亚洲男女自偷自拍| 欧美lavv| 欧美在线va视频| 色偷偷噜噜噜亚洲男人| 97caocao| 亚洲综合色成人| 香蕉久久久久久av成人| 在线观看日韩av电影| 好吊色欧美一区二区三区视频| 日本色护士高潮视频在线观看| 精品国产乱码久久久久久图片| 亚洲一区欧美在线| 久久精品这里都是精品| 午夜久久久精品| 影视一区二区| 国产精品国产精品| 一区二区三区电影大全| 伊人伊成久久人综合网小说| 91国在线视频| 一区二区三区在线视频免费| 中文字幕在线永久| 日韩综合小视频| 黄色高清视频网站| 欧美韩一区二区| 国产精品美女免费| 国产福利视频在线观看| 亚洲激情视频在线观看| 中文字幕免费高清网站| 成人免费一区二区三区在线观看| gogo亚洲国模私拍人体| 媚黑女一区二区| 亚洲精品无人区| 亚洲一二av| 日韩女优在线播放| 91麻豆国产福利在线观看宅福利 | a中文在线播放| 日韩午夜三级在线| 五月天综合激情网| 亚洲你懂的在线视频| 国产黑丝一区二区| 蜜桃视频一区二区三区在线观看| 91嫩草国产丨精品入口麻豆| 亚洲免费毛片| av激情久久| 91亚洲精品| 国内外成人免费激情在线视频| 成人在线播放视频| 亚洲国产成人精品电影| 亚洲一区 中文字幕| 午夜久久久影院| 成人18视频免费69| 91原创在线视频| 五月天国产视频| 久久久综合网| 少妇无码av无码专区在线观看| 国产高清一区二区| 日韩av在线一区二区三区| 91亚洲无吗| 成人欧美一区二区三区在线湿哒哒| 日韩理论视频| 九九九久久久久久| 日本中文在线观看| 亚洲天堂精品在线| 无码国产精品一区二区免费16| 777奇米成人网| 性色av免费观看| 午夜免费久久看| 久久99久久久| 亚洲视频免费看| 综合 欧美 亚洲日本| 久久久.com| 亚洲久久久久久久| 91在线porny国产在线看| 日韩精品国产一区| 国产一区二区三区在线观看精品 | 日本黄色片视频| 亚洲精品国久久99热| 日本裸体美女视频| 欧美激情资源网| 熟女俱乐部一区二区视频在线| 成人国产一区二区三区精品| 亚洲免费看av| 日韩精品1区2区3区| 国模杨依粉嫩蝴蝶150p| 久久精选视频| 麻豆av免费在线| 先锋a资源在线看亚洲| 免费看国产曰批40分钟| 亚洲大片在线| 国产中文字幕二区| 亚洲综合社区| 少妇性l交大片| 日韩精品一级二级| 天天干在线影院| 蜜桃免费网站一区二区三区| 婷婷激情四射五月天| 奇米一区二区三区| 色噜噜狠狠一区二区| 麻豆视频观看网址久久| 亚洲高清免费在线观看| 精品中文字幕一区二区| 在线观看免费看片| 东方aⅴ免费观看久久av| 国产女人18毛片水真多18| 99精品国产视频| av永久免费观看| 一色桃子久久精品亚洲| 91视频免费在线看| 午夜精品久久久久久久久| 欧美三日本三级少妇99| 精品美女永久免费视频| 在线观看亚洲欧美| 欧美亚洲综合另类| 99免费在线视频| 亚洲第一天堂av| 欧美黄色小说| 少妇高潮 亚洲精品| 四虎影视成人| 欧美自拍视频在线观看| 亚洲第一会所| 亚洲va欧美va国产综合剧情| 999久久久精品一区二区| 蜜桃91精品入口| 天天操夜夜操国产精品| 免费在线观看视频a| 视频在线观看91| 91亚洲一区二区| 久久综合中文字幕| 免费看特级毛片| 五月天亚洲婷婷| 老熟妇一区二区三区啪啪| 欧美一区二区三区影视| 三级小视频在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产视频中文字幕在线观看| 午夜欧美不卡精品aaaaa| 国产成人精品一区二区三区视频 | 国产精品日韩专区| 91蝌蚪精品视频| 欧洲亚洲一区二区| 激情成人亚洲| 国产又猛又黄的视频| 成人免费高清视频在线观看| 99自拍偷拍视频| 午夜电影网一区| 一级黄色a毛片| 精品亚洲一区二区三区四区五区| 免费网站成人| 国产91网红主播在线观看| 欧洲大片精品免费永久看nba| 欧美国产一区二区在线| 欧美三级小说| jizzzz日本| 久久理论电影网| 国产精彩视频在线观看| 欧美日本韩国一区二区三区视频| 天堂在线观看av| 欧美老女人性生活| 亚洲一区导航| 日韩精品不卡| 国产精品永久| 亚洲中文字幕无码一区| 亚洲品质自拍视频网站| 中文字幕乱码视频| 亚洲欧美日韩久久久久久| sm性调教片在线观看 | 日韩av自拍偷拍| 国产欧美一区二区精品忘忧草 | 欧美一区二区在线播放| 国产一级免费在线观看| 2025国产精品视频| 精品精品国产毛片在线看| 国产尤物av一区二区三区| 精品一区二区三区视频在线观看 | 999精品色在线播放| 91淫黄看大片| 国产午夜三级一区二区三| 国偷自拍第113页| 日韩av影视在线| 91九色porn在线资源| 国产99在线播放| 欧美日韩网址| 亚洲av综合色区无码另类小说| 18欧美亚洲精品| 91美女精品网站| 俺去啦;欧美日韩| 国产精品亚洲综合在线观看 | 欧美精品久久久久久久多人混战 | 日韩av片网站| 国产免费观看久久| 波多野结衣二区三区| 亚洲人在线视频| 日韩电影大全网站| 欧洲精品国产| 奇米一区二区三区| 精品视频第一页| 制服丝袜中文字幕亚洲| 成人在线免费看黄| 国产伦精品一区二区三区照片 | 欧美有码在线观看| 亚洲制服一区| 少妇激情一区二区三区| 国产精品久久久久一区| 99精品视频免费看| 国产69精品久久久久9999| 欧美激情影院| 久久久久国产精品熟女影院| 国产精品热久久久久夜色精品三区 | 91精品人妻一区二区三区蜜桃欧美 | av午夜精品一区二区三区| 欧美一级视频免费观看| 亚洲欧美福利视频| 久久久加勒比| a级黄色片免费| 久久久久久久久蜜桃| 在线观看亚洲国产| 欧美精品少妇videofree| 凹凸av导航大全精品| 亚洲熟女乱色一区二区三区| 中文字幕精品一区二区精品绿巨人 | 日韩女同互慰一区二区| a天堂资源在线| 午夜老司机精品| 成人在线视频首页| 国产成人麻豆免费观看| 欧美超级乱淫片喷水| 林ゆな中文字幕一区二区| 日日碰狠狠丁香久燥| 亚洲天堂福利av| 三级在线视频| 成人福利在线视频| av不卡在线| 97精品在线播放| 亚洲精品www| 亚洲一区二区小说| 欧洲av无码放荡人妇网站| 1000精品久久久久久久久| 天天综合网天天综合| 国产在线久久久| 亚洲人成久久| 北条麻妃在线观看视频| 亚洲精品久久久久久久久久久| 国产精品伦一区二区| 国产精品自拍片| 亚洲日本护士毛茸茸| 欧美一区二区少妇| 国产不卡一区二区在线观看| 日韩不卡一区二区三区|