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

首頁 > 編程 > ASP > 正文

詳解ASP緩存技術

2024-05-04 11:05:41
字體:
來源:轉載
供稿:網友

我們在ASP開發中,使用緩存技術可以大大提高網站的性能,實際上,這些實現方法非常簡單,下面錯新技術頻道小編就給大家介紹詳解ASP緩存技術,希望對你有所幫助。

一、何謂ASP緩存/為什么要緩存
  當你的web站點采用asp技術建立的初期,可能感覺到的是 asp動態網頁技術帶來的便利性,以及隨意修改性、自如的http控制。但是,隨著訪問量的增加,你一定會發現自己的站點訪問速度越來越慢,IIS重新啟動得越來越頻繁。接下來,你一定想優化asp,諸如更換性能更優異的數據庫、建立索引、編寫存儲過程等等。這些措施有些不需要增加成本壓力,有些則成本壓力很大(譬如叢access到SQL),而且效果還不一定。

  面對web訪問壓力,我認為最經濟的辦法是利用緩存優化技術來實現緩解 web的服務壓力。
Web訪問量增加通常意味著以下資源需求的快速增長:

1、 網卡流量增加,需要消耗更多的CPU處理網絡流量和網絡I/O線程。
2、 需要更頻繁的打開/關閉數據庫連結(如果使用數據庫技術—通常asp都會采用數據庫作為數據存儲),嚴重消耗資源的事物數量、以及事務相互競爭資源引起的死鎖、會增加網絡I/O或者CPU消耗。
3、 如果采用session的話,IIS為了維持狀態,會消耗更多內存,而內存消耗可能會引發物理內存不夠,引起物理內存同輔存間的頻繁交換,從而引起代碼執行的停頓,web響應阻滯。
4、 由于訪問的不到及時響應,會引起網頁訪問故障,導致用戶刷新,從而加劇CPU、內存等資源需求。

  實際上,考慮通常的web應用程序,很多時候的動態代碼執行是不必要的。

二、asp緩存的分類

  擅自總結,asp的緩存可以分為兩類:

  1、 文件緩存
  所謂文件緩存,就是根據邏輯判斷,一段時間內某個asp的特定執行將不會有很大的變動,因而將內容以靜態html的形式存放,然后以web的重定向技術讓客戶端訪問靜態文件,以達到減少CPU、數據庫資源等的需求。這樣的應用很多,譬如很多論壇就是在回復貼子的時候將整個貼子重新生成一個靜態文件,然后進行重定向的,例如 donews.com的論壇。該成靜態還有一個副作用(好處)–可以很容易被google等搜索引擎收錄。一些所謂新聞發布系統的都采用了此技術。

  2、 文件片斷緩存

  所謂文件緩存,也是基于邏輯判斷,某部分數據(通常是需要消耗資源的大容量數據庫查詢取得)在一定時間內不會改變,所以我們可以將這些數據利用文件的形式進行存儲,當需要時候,可以通過讀取文件來獲取數據,避免增加數據庫的負擔。例如,我們通常將一些數據以xml格式存儲,然后利用xslt技術實現顯示(xml處理通常需要大量CPU資源,所以通常是IE直接讀取xml到客戶端在客戶的CPU上進行處理)。CSDN的論壇就是這樣處理的。

  3、 主存緩存

  除此之外,還可以考慮在內存中處理緩存,將需要及時響應的內容存儲在內存中,一旦訪問需求,立即從快速的貯存中輸送出去。如果極大量的訪問需求集中在幾個少量的頁面或者主存足夠多,我想采用主存緩存一定可以大幅度提高web訪問性能。

三、如何實現/使用緩存

  實現緩存需要考慮以下問題:

  1、 哪些頁面會在短時間內不會改變?
  分析自己的站點,這樣的頁面很多。譬如一個站點通常都有新聞資訊類的欄目,這些欄目通常都是站點維護人員在一天的某個時間發布資料,之后很少改動頁面。那么這些頁面就適合于采用靜態文件緩存。實際上,所謂新聞發布系統就是這么做的,那么那也可以參考這些系統的思想改造自己的原有動態asp頁面。

  2、 那些頁面針對全部訪問者都采用同一個邏輯生成(也就是不區分訪問者)。
  除了新聞資訊之類的欄目所有訪問者都看一個界面外,論壇等消耗資源的應用一般也可以設計成統一邏輯生成(同一個貼子,張三李四看的都一樣),針對這類應用頁面我們也可以采用靜態緩存來實現。也可以考慮將數據片斷化,利用腳本技術在服務器處理能力之外也就是客戶端瀏覽器進行處理。

  3、 采用緩存的代價和收獲。
  主要就是“空間換(響應)時間”。利用緩存技術將之后頻繁需要的內容進行預處理,使之提高web服務器響應能力,更重要贏得訪問者的歡心。
代價就是web空間需求增加,同時又可能影響到訪問效果。
但我認為適當的緩存,是利大于弊的。

  4、 那些地方不適宜采用緩存
  動態查詢頁面,每個人的查詢內容不一樣,所以顯示結果不大一樣,所以不大可能將查詢結果生成緩存,所以采用緩存較為復雜且緩存利用率底下,造成管理成本上什(假設你緩存了1000個查詢關鍵字,那么管理這些關鍵字同緩存的對應也是麻煩事)。

四、實例分析

  假設一個建議論壇的原有布局如下:

根目錄下:
default.asp 首頁,一般是精華、推薦之類
listBorad.asp 該文件列出全部分欄目的名稱和介紹,如果攜帶參數MainBID就表示要列出板塊下的欄目
listThread.asp 該文件如果不攜帶任何參數表示列出全部的貼子,攜帶MainBID表示列出某塊的全部貼子。如果攜帶subBID表示列出具體欄目的貼子。如果攜帶 page參數表示分頁列出主題。
ViewThread.asp 列出某個貼子內容。我們假設貼子顯示為一個發言,任意跟貼全部列在后面。ID參數為要顯示的貼子。
Reply.asp 回應某個貼子,攜帶參數Id回應某個貼子

  其它的暫不討論。

  以上,我們可以看到,如果全部是采用原始的 ASP/PHP來做,那幾乎每一個asp文件的執行都需要數據庫操作,頻繁的查詢,多表查詢。要知道查詢數據庫最終會帶來性能的下降,響應速度下降,帶給訪問者緩慢的瀏覽影響,不利于web的質量。更重要的是對于甲乙兩個人來將,他們訪問ViewThread.asp之類的如果ID一致,那么很多時候他們會看到同樣的內容(他們的瀏覽器收到的HTML代碼幾乎一樣),但是為了這“同樣的內容”,服務器需要打開數據庫連結、查詢,讀取紀錄,顯示,關閉紀錄、數據庫連結。。。。以下列的消耗服務器資源的操作,如果是更多的人來訪問,最終的結果是這些人加劇消耗服務器資源。實際上,這些為了“同樣的內容”所做的重復勞動是可以利用緩存技術進行優化避免的。譬如:

  在reply.asp提交內容后,我們立即調用生成靜態的功能,將整個貼子內容存儲為viewThread_xxxx.htm之類的靜態html文件,再通常情況下訪問viewThread.asp?ID=xxxx的時候,系統自動 redirect到對應的靜態文件viewThreadxxxx.htm去。這樣,當一個貼子沒有最新發布時候,他始終是靜態內容提供給瀏覽者;一旦有了新的提交,將會更新到靜態文件中去,這樣,將會節省很多次數據庫操作,大大提高響應速度。

  listBorad.asp也可以實施靜態化。我們可以分析其可能攜帶的參數,將緩存文件名設定為listBoard_xx.htm,在增加新的欄目時候進行更新 listBoard_xxx.htm。listThread.asp也類似,只不過由于其參數更多,所以緩存文件也會很多。擊若要緩存 listThread.asp? subBID=xxx&page=2,那么對應的靜態文件是listThread_xxx_p2.htm。default.asp也一樣。

  那么如何判斷什么時候更新?在什么時機更新?
討論listThread.asp? subBID=xxx&page=2,我們在執行listThread.asp俄時候提取subID和page,然后探測 listThread_xxx_p2.htm是否存在,如果不存在就調用靜態生成功能進行生成該文件,最終重定向到此靜態文件。注意,此處的不存在就意味著出現了新的內容需要我們進行更新。

  那如何造成文件不存在呢?刪除。我們在發表一個新的貼子、刪除貼子、移動貼子的時候我們可以將類似listThread_xxx_p2.htm之類的靜態文件全部刪除。這樣就通知了何時要進行緩存。

  現在還剩下一個問題,如何生成靜態文件?

  我們注意到,之前我們提到的“同樣的內容”。我們可以將改造前的default.asp、listThread.asp等拷貝一個副本,取名為default_d.asp、listThread_2.asp,且在同一個目錄中(理論上 listThtrad.asp?subID=123同LISTtHREAD_D.ASP?SUBID=123的訪問結果會是同樣的內容),這樣我們在需要生成靜態文件的邏輯中,通過WEB訪問請求的方式調用改造前的副本,得到html代碼,并存儲為靜態文件。這個web請求實際上相當于在任何真實瀏覽者訪問靜態內容之前,由服務器自身現察看將會輸出的html,然后返回這些代碼,利用文件操作功能存儲為靜態文件。這樣,緩存文件就在真正瀏覽者之前被創建。

  這樣的方案幾乎不觸動原來的布局,幾乎不會造成因為改造出現404之類的錯誤。其次,靜態文件也會幫助你的站點容易被被google之類的搜索引擎收錄。何樂而不為?

  最后,提醒,通過web訪問,asp編程環境下,很多人采用xmlHTTP組件訪問,這會造成很多問題。 xmlhttp自身會cache請求的資源,導致我們通過此組件請求得到的內容不是最新的,造成邏輯上的混亂。所以,應當選擇xml Server http對象或者winhttp組件來實現web請求資源。
使用ASP中的緩存技術可以很大程度上提高你的網站性能,其實這些實現方法是非常的簡單,它將說明如何在服務器上的緩存是如何工作以及你如何使用一種被稱為斷開連接的ADO連接技術。

  在介紹這些技術之前先說明一下到底什么是ASP的緩存技術。

  所謂緩存其實就是在內存中開辟一個用來保存數據的空間,使用緩存你就不用頻繁的訪問你保存在硬盤上的數據了,靈活的使用緩存你就免去了心疼的看著可憐的硬盤飽受讀數據時的折磨了。當你一旦執行了一個查詢動作,并且將查詢結果放入緩存中后,你就可以很迅速的重復訪問這些數據了。而如果你不把數據放入緩存的話,當你再次執行這個查詢時,服務器會將進程耗費在從數據庫中獲取并排序上了。

  當數據保存在緩存中時,再次查詢時耗費的時間主要是在顯示數據的時間上了。
也就是說,我們不應該把經常需要改變的數據放到服務端的緩存中,我們應該把改變少,但是又需要經常訪問的數據放到緩存中。

  現在我們先討論ASP在服務端使用緩存的技術,過會再討論ASP如何在客戶端使用
緩存的技術。

  當你有大量的數據(靜態的,就是說變動比較少的)需要顯示給客戶端時,你就可以考慮使用服務端的緩存技術了。這種技術尤其適用于那些顯示風格一致性比較強的網站(呵呵,對于非主流的網站可不好用的說。)

  其實實現方法特別的簡單,大家只要看看下面這個簡單的例子就明白了。

  這是一個用來顯示書籍分類的例子程序

DisplayBooks.ASP文件:

復制代碼 代碼如下:

< %@ LANGUAGE=JavaScript % >???
< html >???
< body >???
< form method=post >???
書籍分類; < %= getBooksListBox() % >???
< p>???
< input type=submit >???
?
< %???
function getBooksListBox()???
{???
BooksListBox = Application("BooksListBox")???
if (BooksListBox != null) return BooksListBox;???
crlf = String.fromCharCode(13, 10)???
BooksListBox = "< select name=Books>" + crlf;???
SQL = "Select * FROM Books orDER BY Name";???
cnnBooks = Server.CreateObject("ADODB.Connection");???
cnnBooks.Open("Books", "Admin","");???
rstBooks = cnnBooks.Execute(SQL);???
fldBookName = rstBooks("BookName");???
while (!rstBooks.EOF){???
BooksListBox = BooksListBox + " < option>" +???
fldBookName + "" + crlf;???
rstBooks.MoveNext();???
}???
BooksListBox = BooksListBox + ""???
Application("BooksListBox") = BooksListBox???
return BooksListBox;???
}???
% >

?

很簡單把,其實就是用了很簡單的Application技術,而且就一句話的不同:

復制代碼 代碼如下:

?Application("BooksListBox") = BooksListBox

?

你可以驗證一下你就會發現服務器上的請求數量會降低不少的。這種情況尤其適合與那些更新不是很頻繁的網站內容,例如你一天(或則很長時間)只更新一次。

  下面再討論一種客戶端的緩存技術這種技術也叫斷開連接的ADO連接技術(翻譯水平太次,聽上去怎么這么別扭)。這種技術主要使用在用來保存用戶個人信息,例如用戶的密碼,代號等等上面。它主要使用了ADO的一些屬性。同時也回答了一些網友曾經提到過的能否在Application中使用ADO對象的問題。解釋不清楚,下面讓代碼來發言:
文件GLOBAL.ASA:

?

復制代碼 代碼如下:

<!--METADATA TYPE="TypeLib" FILE="C:/Program Files/Common??
Files/system/ado/msado15.dll"-- >???
< SCRIPT LANGUAGE=VBScript RUNAT="Server" >???
Sub Application_OnStart???
SQL = "Select UserName, Password FROM UserInfo"???
cnnUsers = "DSN=User"???
Set rsUsers = Server.CreateObject("ADODB.Recordset")???
'注意下面這兩句話,就是用來實現那個叫可用的斷開連接的ADO技術???
rsCustomers.CursorLocation = adUseClient???
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly???
' 斷開RecordSet的和數據庫的連接???
rsCustomers.ActiveConnection = Nothing???
Set Application("rsCustomers") = rsCustomers???
End Sub

?

文件Users.ASP

復制代碼 代碼如下:

< %???
'Clone方法使得每個用戶擁有自己的一個RecordSet集合???
Set yourUsers = Application("rsUsers").Clone???
Set UserName = yourUsers("UserName")???
Set Password = yourUsers("Password")???
Do Until yourUsers.EOF???
% >???
?
用戶姓名:< %= UserName % > 用戶密碼:< %= Password % >
?
< %???
yourUsers.MoveNext???
Loop???
% >

?

于緩存的作用,我想我也不用再多說了,它的作用已經很明顯,特別是對于信息量非常大或是全數據庫頁面的網站,他能很好地利用主機的內存資源,加速ASP的執行效率,減輕服務器的負擔,而動網在這一方面做得是最突出的,像他現在的dvbbs7.1.0版,更是在緩存的利用上更上一層樓,前后臺大多的操作都和緩存有關,而現在動網里用的也就是迷城浪子的緩存類:

?

復制代碼 代碼如下:

< %???
Class Cls_Cache???
'==================使用說明====================???
'本類模塊是動網先鋒原創,作者:迷城浪子。如采用本類模塊,請不要去掉這個說明。
'公有變量:Reloadtime 過期時間(單位為分鐘)缺省值為14400???
'MaxCount 緩存對象的最大值,超過則自動刪除使用次數少的對象。缺省值為300???
'CacheName 緩存組的總名稱,缺省值為"Dvbbs",如果一個站點中有超過一個緩存組,則需要外部改變這個值。???
'屬性:Name 定義緩存對象名稱,只寫屬性。???
'屬性:value 讀取和寫入緩存數據。???
'函數:ObjIsEmpty()判斷當前緩存是否過期。???
' 方法:DelCahe(MyCaheName)手工刪除一個緩存對象,參數是緩存對象的名稱。???
'========================???
Public Reloadtime,MaxCount,CacheName???
Private LocalCacheName,CacheData,DelCount???
?
Private Sub Class_Initialize()???
Reloadtime=14400 '過期時間(單位為分鐘)???
CacheName="Dvbbs" '緩存組的總名稱???
End Sub???
?
Private Sub SetCache(SetName,NewValue)???
Application.Lock???
Application(SetName) = NewValue???
Application.unLock???
End Sub???
?
Public Property Let Name(ByVal vNewValue) '緩存對象名稱???
LocalCacheName=LCase(vNewValue)???
End Property???
?
Public Property Let Value(ByVal vNewValue) '讀取和寫入緩存數據???
If LocalCacheName<>"" Then???
CacheData=Application(CacheName"_"&LocalCacheName)???
If IsArray(CacheData) Then???
CacheData(0)=vNewValue???
CacheData(1)=Now()???
Else???
ReDim CacheData(2)???
CacheData(0)=vNewValue???
CacheData(1)=Now()???
End If???
SetCache CacheName"_"&LocalCacheName,CacheData???
Else???
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName."???
End If???
End Property???
?
Public Property Get Value()???
If LocalCacheName<>"" Then???
CacheData=Application(CacheName"_"&LocalCacheName)???
If IsArray(CacheData) Then???
Value=CacheData(0)???
Else???
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " The CacheData Is Empty."???
End If???
Else???
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName."???
End If???
End Property???
?
Public Function ObjIsEmpty() '判斷當前緩存是否過期???
ObjIsEmpty=True???
CacheData=Application(CacheName"_"&LocalCacheName)???
If Not IsArray(CacheData) Then Exit Function???
If Not IsDate(CacheData(1)) Then Exit Function???
If DateDiff("s",CDate(CacheData(1)),Now()) < 60*Reloadtime Then ObjIsEmpty=False???
End Function???
?
Private Sub makeEmpty(SetName) '釋放內存???
Application.Lock???
Application(SetName) = Empty???
Application.unLock???
End Sub???
?
Public Sub DelCahe(MyCaheName) '刪除緩存???
makeEmpty(CacheName"_"&MyCaheName)???
End Sub???
End Class???
?
'Set WydCache=New Cls_Cache???
'WydCache.Reloadtime=0.5 '定義過期時間 (以分鐘為單位)???
'WydCache.CacheName="pages" '定義緩存名???
'IF WydCache.ObjIsEmpty() Then ''判斷是否可用(包括過期,與是否為空值)???
'Response.write WydCache.Value???
'Else???
'..................???
'BoardJumpList=xxx???
'WydCache.Value=BoardJumpList '寫入內容???
'Response.write BoardJumpList???
'End if???
'???
'mycache.DelCahe(" 緩存名") 刪除緩存???
%>

上面就是錯新技術頻道小編給大家介紹的詳解ASP緩存技術,其實我們可以空余的時間可以好好的利用平臺進行學習,希望這篇文章能夠幫助到你。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲桃花岛网站| 欧美日本国产在线| 欧美一级bbbbb性bbbb喷潮片| 欧美午夜性色大片在线观看| 国自产精品手机在线观看视频| 精品福利樱桃av导航| 欧美成人午夜激情在线| 亚洲午夜女主播在线直播| 欧美高清自拍一区| 亚洲自拍偷拍视频| 日韩av一区在线观看| 欧美午夜片欧美片在线观看| 综合激情国产一区| 国产91免费看片| 国产精品爱久久久久久久| 91色在线视频| 日韩一二三在线视频播| 亚洲成人a**站| 日韩美女激情视频| 国产亚洲精品美女久久久| 欧美高清视频免费观看| 国产v综合ⅴ日韩v欧美大片| 91夜夜未满十八勿入爽爽影院| 日韩精品欧美国产精品忘忧草| 国产剧情日韩欧美| 日韩成人xxxx| 九九综合九九综合| 一区二区亚洲欧洲国产日韩| 成人免费视频97| 亚洲色图五月天| 狠狠色香婷婷久久亚洲精品| 亚洲va欧美va在线观看| 日韩av中文字幕在线| 日韩在线观看成人| 欧美高清不卡在线| 国产精品亚洲精品| 夜夜嗨av色综合久久久综合网| 国产综合在线视频| 91社影院在线观看| 欧美国产日本高清在线| 日本不卡高字幕在线2019| 91香蕉电影院| 国产主播欧美精品| 日韩在线观看免费高清完整版| 国产精品日韩在线播放| 欧美巨猛xxxx猛交黑人97人| 欧美丝袜一区二区| zzijzzij亚洲日本成熟少妇| 欧美高清视频在线观看| 97视频在线观看亚洲| 日韩中文字幕网址| 欧美性猛交xxxx免费看久久久| 乱亲女秽乱长久久久| 欧美精品日韩www.p站| 日韩中文字幕久久| 日韩av大片免费看| 亚洲精品第一国产综合精品| 国产精品福利在线| 在线播放日韩av| 黄网动漫久久久| 国语自产精品视频在线看抢先版图片| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美激情精品久久久久| 成人av在线网址| 国产精品美乳在线观看| 91精品国产777在线观看| 91在线精品播放| 成人免费视频在线观看超级碰| 亚洲欧美日韩爽爽影院| 欧美日韩国产黄| 91经典在线视频| 久久精品国产成人| 国产精品揄拍一区二区| 欧美一级淫片播放口| 国产精品网站视频| www.国产精品一二区| 精品久久久一区| 91精品国产高清自在线看超| 欧美成人小视频| 欧美在线视频a| 国产成人精品av在线| 在线视频亚洲欧美| 这里只有精品在线播放| 亚洲欧美激情视频| 在线观看日韩www视频免费| 久久久亚洲影院你懂的| 78m国产成人精品视频| 日韩有码视频在线| 欧美日韩国产精品一区二区三区四区| 日韩大陆欧美高清视频区| 日韩欧美国产中文字幕| 欧美激情一区二区久久久| 国产噜噜噜噜噜久久久久久久久| 久久久亚洲网站| 国产有码在线一区二区视频| 久久99久久亚洲国产| 久久精品一本久久99精品| 欧美成人精品不卡视频在线观看| 欧美国产日韩视频| 在线播放国产一区中文字幕剧情欧美| 欧美日韩国产91| 久久久久亚洲精品国产| 久久人人爽亚洲精品天堂| 亚洲成人三级在线| 成人黄色在线观看| 在线播放国产一区二区三区| 久久精品电影一区二区| 亚洲精品成人免费| 在线午夜精品自拍| 亚洲日本成人女熟在线观看| 欧美性猛交xxxxx水多| 最新亚洲国产精品| 精品夜色国产国偷在线| 色噜噜亚洲精品中文字幕| 欧美午夜片欧美片在线观看| 日韩精品免费综合视频在线播放| 亚洲精品国产综合区久久久久久久| 欧美日韩国内自拍| 久久亚洲一区二区三区四区五区高| 精品亚洲夜色av98在线观看| 亚洲成在人线av| 精品国偷自产在线视频| 成人网在线观看| 欧美在线视频免费| 国产色婷婷国产综合在线理论片a| 欧美精品免费在线| 欧美精品免费在线观看| 久久久久久久久国产精品| 亚洲乱码一区二区| 成人久久精品视频| 亚洲国产欧美在线成人app| 国产精品久久久久久网站| 日韩高清中文字幕| 国产精品日日摸夜夜添夜夜av| 中文字幕亚洲无线码在线一区| 中文字幕精品一区二区精品| 亚洲精品一区二区三区不| 久久成人精品一区二区三区| 国产情人节一区| 欧美日本亚洲视频| 亚洲码在线观看| 亚洲人成五月天| 成人午夜激情免费视频| 97精品伊人久久久大香线蕉| 九九久久综合网站| 国产精品亚洲美女av网站| 91久久嫩草影院一区二区| 精品国产欧美一区二区五十路| 欧美激情2020午夜免费观看| 亚洲精品日韩av| 日韩在线精品视频| 日韩精品视频免费| 亚洲第一区在线观看| 欧美国产极速在线| 欧美在线视频免费观看| 成人网欧美在线视频| 亚洲乱码一区二区| 欧美专区第一页| 成人国产精品日本在线| 一区二区三区 在线观看视| 欧美日韩在线另类| 国产99在线|中文| 7777kkkk成人观看| 国自在线精品视频|