整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          php性能優化

          php性能優化

          范說明

          性能是網站運行是否良好的關鍵因素, 網站的性能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的代碼是我們每個開發人員必備的素質,也是我們良好的職業素養。

          影響性能的因素

          • 商業需求需求合理性需求與系統的整合需求所帶來的商業利益是否與需求開發的成本成正比需求所帶來的風險
          • Web 服務器并發處理能力高負載的能力負載均衡的能力動態內容與靜態內容的處理能力Web 服務器部署
          • DataBase 服務器并發訪問數據庫服務器的部署數據庫的 shema 架構與的表設計是否合理數據檢索
          • 操作系統
          • 客戶端請求
          • 程序/語言

          分析性能的指標

          • 程序的運行時間
          • 程序的運行所消耗的內存
          • 單位時間內的并行處理
          • 磁盤 IO 的處理

          優化性能的目標

          快速、并發、資源消耗低(內存、磁盤 IO、CPU 負載)

          優化性能的原則

          • 服務器配配置最優化
          • 服務器部署合理化
          • 商業需求合理并與產出的商業價值成正比
          • 架構可用、可維護、可擴展
          • 程序的正確性、簡單性、邏輯的合理性。
          • 不斷的分析性能的的瓶頸
          • 不斷的重構已有的代碼
          • 優化的優先級:program->database->web sersver->os->client

          優化

          程序優化

          • 變量變量大小,注意變量大小是節約內存的最有效手段,對于來自用戶表單、數據庫和文件緩存的數據都需要控制變量的大小。 因為cpu要處理的數據是來源于內存變量有效期,使用unset()函數注銷不需要的變量是一種良好的習慣,將一些不需要的變量立即注銷可提高內存的使用率。復制變量,盡量不要復制變量,否則就會帶來1倍的內存消耗,即使復制變量也應該要立即注銷原有變量。變量類型,初始化變量請注意其變量類型,一個變量在執行過程中最好只有一種類型狀態。對于數組變量,請初始化聲明,如下: $a=array();臨時變量,是處理業務邏輯的臨時存儲,這些都是需要消耗內存的。如果臨時變量使用結束請立即注銷,特別是在一些過程式代碼的執行流程中,對于一些函數,如果業務非常復雜,同樣需要立即注銷臨時變量靜態變量,對于一些需要由復雜業務產生的變量,如果在程序的執行過程中多次產生并使用,可考慮使用靜態變量,減少程序的cpu執行次數變量的性能:局部變量>全局變量>類屬性>未定義的變量。
          • 循環盡量減少循環的次數。盡量減少循環的潛逃的層次,不要超過三層。避免在循環內有過多的業務邏輯。不要循環包含文件不要循環執行數據庫操作。優先使用foreach,它比for/while效率高,如果循環內要調用函數,用array_walk最好,它的效率要比for 高出1倍,要比foreach高出43%的效率不要把 count/strlen/sizeof 放到 for 循環的條件語句中 For($i=0,$count=count($array);$i<$count;$i++){} 不要使用for($i=0;$i<count($array);$i++){};for($i=$total;$i>0;$i–){}性能好于for($i=0;$i<$total;$–){}保持循環體內的業務邏輯清晰
          • 函數函數職責清晰,一個函數只干一件事,不要雜揉過多的業務邏輯函數代碼體不要超過20行,反之,考慮拆分。優先使用php內置函數常量與函數同時能干一件事,優先使用常量。 phpversion() < PHP_VERSION get_class() < CLASS is_null() < NULL===echo 的性能好于print,輸入多個變量的時候用echo $str,$str1,不用.連接符$_SERVER[REQUEST_TIME]替換time();字符串替換strtr()->str_replace()->preg_replace()->epreg();發揮trim最大功效,替換substr。$filepath=trim($filename,’/’).’/’;Isset/empty 雖然兩個函數功能有所差異,但在同樣的情況下推薦使用 empty()isfile/file_exist 兩個函數的功能有所不同,file_exist既可判斷文件是否存在,也可以判斷目錄是否存在,在同樣的情況下推薦使用is_file
          • 文件減少文件包含數,減少磁盤 IO使用完整路徑,或者容易轉換的相對路徑。避免在 include_path 查找文件的代碼行數不要超過 2000 行Require_once/include_once 效率低于 require/include, 需要額外的去查看系統是否已經調用過這個文件. 因為它們在一個 opcode 緩存下的調用非常慢程序執行文件用 requie/require_once,緩存文件用include/include_once。Include 效率好于 require優化 spl 中的文件自動加載機制,可參靠 yii類庫文件加載,是否考慮類是否已經實例化,可考慮采用設計模式之單例模式文件讀寫的并發性
          • 面向對象控制實例的創建的數量優先使用常量、類常量優先例用靜態變量,靜態屬性類的結構合理面象接口編程封裝變化點依賴于抽象,不依賴于細節優先使用靜態成員類的接口清晰穩定,類的職責單一,類與類的通信合理使用常量的好處 編譯時解析,沒有額外開銷 雜湊表更小,所以內部查找更快 類常量僅存在于特定「命名空間」,所以雜湊名更短 代碼更干凈,使除錯更方便
          • 字符串 用單引號替代雙引號引用字符串;避免檢索字符串中的變量
          • 運算用 i+=1 代替i=i+1。符合c/c++的習慣,效率還高++$i 的效率高于++$i,–$i 同理
          • 數組多維數組盡量不要循環嵌套賦值;使用$array[‘name’]方式訪問數組,禁止$array[name]/$array[“name”]
          • 判斷邏輯判斷請優先使用switch 的方式,對于業務邏輯相對較多的情況請選擇if/else,提高代碼的可讀性盡量控制if/else判斷的個數,如果太多請考慮功能優化或代碼優化盡量使用恒等用于比較判斷,恒等的效率高于等于,而且還能避免一些類型強制轉換的錯誤if/else與_&&,單條語句判斷請選擇&&的形式, &&的效率高于if/else,如下 : if ($a==1) { $b=2; } 可選擇為($a==1) && $b=2;

          緩存

          • 使用php加速器,緩沖opcode
          • 例用memcache/nosql
          • 使用內存數據庫、
          • 使用文件緩存
          • 緩沖功能

          其它

          • 少用@符號,嚴重影響性能
          • 適時關閉遠程資源連接如數據庫,ftp、socket等,適時的清理這些資源
          • 合理的商業需情
          • 數據庫 schema 架構優化
          • 垂直與水平分庫分表
          • 索引優化,查詢優化
          • 第三方開源檢索工具(sphinx)
          • 主從數據庫服務器的使用。
          • Web 服器優化(暫未整理,有相應的 Web 服務器優化手冊)
          • 操作系統優化(暫未整理,有相應的 OS 優化手冊)
          • 前端優化合理的 html 結構合理 html 與css 的同時,考慮 Css 設計合理,減少 http 請求合理 html 與java script 的同時,考慮拆分是否合理,減少 http 請求優化 java script 代碼,讓用戶有良好的體驗根據 http 協議,優化高并發請求

          性能檢測工具

          • Web Server
          • ab
          • http_load
          • xhprof
          • OneAPM
          • apd
          • xdebug
          • Mysql
          • explain
          • profiler


          hp超級全局變量




          PHP中預定義了幾個超級全局變量(superglobals) ,這意味著它們在一個腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數及類中使用。

          PHP 超級全局變量列表:

        1. $GLOBALS
        2. $_SERVER
        3. $_REQUEST
        4. $_POST
        5. $_GET
        6. $_FILES
        7. $_ENV
        8. $_COOKIE
        9. $_SESSION


        10. $GLOBALS

          $GLOBALS 是PHP的一個超級全局變量組,在一個PHP腳本的全部作用域中都可以訪問

          $GLOBALS 是一個包含了全部變量的全局組合數組。變量的名字就是數組的鍵

          
          <?php 
          $x=75; 
          $y=25;
           
          function addition() 
          { 
              $GLOBALS['z']=$GLOBALS['x'] + $GLOBALS['y']; 
          }
           
          addition(); 
          echo $z; 
          ?>
          

          $_SERVER

          $_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器創建

          
          <?php 
          echo $_SERVER['PHP_SELF'];
          echo "<br>";
          echo $_SERVER['SERVER_NAME'];
          echo "<br>";
          echo $_SERVER['HTTP_HOST'];
          echo "<br>";
          echo $_SERVER['HTTP_REFERER'];
          echo "<br>";
          echo $_SERVER['HTTP_USER_AGENT'];
          echo "<br>";
          echo $_SERVER['SCRIPT_NAME'];
          ?>
          

          $_REQUEST

          PHP $_REQUEST 用于收集HTML表單提交的數據。

          以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至<form>標簽中 action 屬性中指定的腳本文件。 在這個實例中,我們指定文件來處理表單數據。如果你希望其他的PHP文件來處理該數據,你可以修改該指定的腳本文件名。 然后,我們可以使用超級全局變量 $_REQUEST 來收集表單中的 input 字段數據:

          
          <html>
          <body>
           
          <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
          Name: <input type="text" name="fname">
          <input type="submit">
          </form>
           
          <?php 
          $name=$_REQUEST['fname']; 
          echo $name; 
          ?>
           
          </body>
          </html>
          

          $_POST

          $_POST 被廣泛應用于收集表單數據,在HTML form標簽的指定該屬性:"method="post"。

          以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至<form>標簽中 action 屬性中指定的腳本文件。 在這個實例中,我們指定文件來處理表單數據。如果你希望其他的PHP文件來處理該數據,你可以修改該指定的腳本文件名。 然后,我們可以使用超級全局變量 $_POST 來收集表單中的 input 字段數據

          
          <html>
          <body>
           
          <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
          Name: <input type="text" name="fname">
          <input type="submit">
          </form>
           
          <?php 
          $name=$_POST['fname']; 
          echo $name; 
          ?>
           
          </body>
          </html>
          

          $_GET

          PHP $_GET 同樣被廣泛應用于收集表單數據,在HTML form標簽的指定該屬性:"method="get"。

          $_GET 也可以收集URL中發送的數據。




          PHP中get和post區別?

          第一種:

          • GET在瀏覽器回退時是無害的,而POST會再次提交請求。
          • GET產生的URL地址可以被Bookmark(標記),而POST不可以。
          • GET請求會被瀏覽器主動cache(存儲),而POST不會,除非手動設置。
          • GET請求只能進行url編碼,而POST支持多種編碼方式。
          • GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
          • GET請求在URL中傳送的參數是有長度限制的,而POST么有。
          • 對參數的數據類型,GET只接受ASCII(美國信息交換標準碼)字符,而POST沒有限制。
          • GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。
          • GET參數通過URL傳遞,POST放在Request body中。

          第二種、

          • get是從服務器上獲取數據,post是向服務器傳送數據。
          • get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。
          • post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
          • get傳送的數據量較小,不能大于2KB。
          • post傳送的數據量較大,一般被默認為不受限制。
          • get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。

          注意:post只是相比較get安全性更高一點,并不是說是萬無一失的,在編程語言中,安全是最重要的(在輸出語句中echo,print,var_dump等輸出語句一定要使用過濾函數如htmlentiti()或正則過濾);




          Cookie

          cookie 常用于識別用戶。cookie 是一種服務器留在用戶計算機上的小文件。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能夠創建并取回 cookie 的值。

          如何創建cookie?

          setcookie()函數用于設置 cookie

          注釋:setcookie() 函數必須位于 <html> 標簽之前

          語法:

           <?php
             setcookie(name , value, expire ,path , domain); 
            ?>
          <?php
            setcookie("user" , "hulitong", time()+3600); 
           ?>
             
            <html>
             ...

          取回cookie的值

           <?php
            我們使用 isset() 函數來確認是否已設置了 cookieecho $_COOKIE["user"];  //輸出user的cookie
          print_r($_COOKIE);  //獲取打印所有cookie
            ?>
          <html>
          <head>
          <meta charset="utf-8">
          <title>菜鳥教程(runoob.com)</title>
          </head>
          <body>
          
          <?php
          if (isset($_COOKIE["user"]))
              echo "歡迎 " . $_COOKIE["user"] . "!<br>";
          else
              echo "普通訪客!<br>";
          ?>
          
          </body>
          </html>

          如上:我們使用 isset() 函數來確認是否已設置了 cookie


          如何刪除Cookie?

          當刪除 cookie 時,您應當使過期日期變更為過去的時間點。

          <?php
          // 設置 cookie 過期時間為過去 1 小時
          setcookie("user", "", time()-3600);
          ?>



          Session

          session 變量用于存儲關于用戶會話(session)的信息,或者更改用戶會話(session)的設置。Session 變量存儲單一用戶的信息,并且對于應用程序中的所有頁面都是可用的

          您在計算機上操作某個應用程序時,您打開它,做些更改,然后關閉它。這很像一次對話(Session)。計算機知道您是誰。它清楚您在何時打開和關閉應用程序。然而,在因特網上問題出現了:由于 HTTP 地址無法保持狀態,Web 服務器并不知道您是誰以及您做了什么。

          PHP session 解決了這個問題,它通過在服務器上存儲用戶信息以便隨后使用(比如用戶名稱、購買商品等)。然而,會話信息是臨時的,在用戶離開網站后將被刪除。如果您需要永久存儲信息,可以把數據存儲在數據庫中。

          Session 的工作機制是:為每個訪客創建一個唯一的 id (UID),并基于這個 UID 來存儲變量。UID 存儲在 cookie 中,或者通過 URL 進行傳導

          在您把用戶信息存儲到 PHP session 中之前,首先必須啟動會話。

          注釋:session_start() 函數必須位于 <html> 標簽之前:

          <?php session_start(); ?>
           
          <html>
          <body>
           
          </body>
          </html>

          存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量

          <?php
          session_start();
          // 存儲 session 數據
          $_SESSION['views']=1;
          ?>
           
          <html>
          <head>
          <meta charset="utf-8">
          <title>菜鳥教程(runoob.com)</title>
          </head>
          <body>
           
          <?php
          // 檢索 session 數據
          echo "瀏覽量:". $_SESSION['views'];
          ?>
           
          </body>
          </html>


          銷毀session

          如果您希望刪除某些 session 數據,可以使用 unset() 或 session_destroy() 函數。

          unset() 函數用于釋放指定的 session 變量:

          <?php
          session_start();
          if(isset($_SESSION['views']))
          {
              unset($_SESSION['views']);
          }
          ?>

          您也可以通過調用 session_destroy() 函數徹底銷毀 session:

          html表單:HTML表單用于收集用戶輸入的數據,并將數據發送到服務器進行處理,創建了一個包含多種表單元素的表單。其中,<label> 標簽用來描述表單元素,<input> 標簽用來創建表單輸入框,<textarea> 標簽用來創建多行文本輸入框,<button> 標簽用來創建提交按鈕等等。下面我們一起來學習了解吧



          表單標簽

          HTML提供了幾個用于創建表單的標簽,包括<form>、<input>、<label>、<select>、<option>、<textarea>和<button>。

          <form>標記用于創建表單元素,該元素可以包含一個或多個表單控件,如文本輸入、復選框、單選按鈕等。

          action屬性指定表單數據應提交到的URL,method屬性指定用于提交的HTTP方法(通常為“GET”或“POST”)。

          下面是一個帶有文本輸入和提交按鈕的簡單表單示例:

          <form action="submit-form.php" method="POST">
            <label for="name">Name:</label>
            <input type="text" id="name" name="name">
            <button type="submit">Submit</button>
          </form>
          

          在本例中,<label>標記用于使用for屬性和id屬性將文本輸入與其標簽相關聯。輸入的name屬性指定將與表單數據一起提交的表單字段的名稱。

          <select>標記用于創建選項的下拉列表,<option>標記用于定義每個選項。下面是一個例子:

          <label for="color">Favorite color:</label>
          <select id="color" name="color">
            <option value="red">Red</option>
            <option value="green">Green</option>
            <option value="blue">Blue</option>
          </select>
          

          在本例中,每個選項的value屬性指定將與表單數據一起提交的值。

          <textarea>標記用于創建多行文本輸入。下面是一個例子:

          <label for="message">Message:</label>
          <textarea id="message" name="message"></textarea>
          

          <button>標記用于創建一個按鈕,該按鈕可用于提交表單或執行其他操作。 下面是一個例子:

          <button type="submit">Submit</button>
          

          文本框、密碼框和多行文本框

          HTML中,文本框、密碼框和多行文本框分別使用input元素的不同type屬性值來實現。

          • 文本框:使用<input type="text">標簽實現;
          • 密碼框:使用<input type="password">標簽實現;
          • 多行文本框:使用<textarea></textarea>標簽實現。

          文本框、密碼框和多行文本框是用來接收用戶輸入的常見表單元素。它們分別使用不同的標簽和屬性來實現。

          1. 文本框

          文本框(text box)是用于接受單行文本輸入的表單元素??梢酝ㄟ^設置<input>標簽的type屬性為"text"來創建文本框。例如:

          <label for="username">用戶名:</label>
          <input type="text" id="username" name="username">
          

          上面的示例代碼中,id屬性定義了文本框的唯一標識符,name屬性定義了提交表單時該文本框的名稱。

          1. 密碼框

          密碼框(password field)是用于接受密碼等敏感信息的表單元素,并且會將用戶輸入的字符隱藏起來。可以通過設置<input>標簽的type屬性為"password"來創建密碼框。例如:

          <label for="password">密碼:</label>
          <input type="password" id="password" name="password">
          
          1. 多行文本框

          多行文本框(text area)可用于接收包含多個行的文本輸入,例如評論或留言等??梢酝ㄟ^使用<textarea>標簽來創建多行文本框,然后使用它的rows和cols屬性來指定它的尺寸。例如:

          <label for="message">留言:</label>
          <textarea id="message" name="message" rows="5" cols="30"></textarea>
          

          上面的示例代碼中,rows屬性定義了多行文本框的行數,cols屬性定義了多行文本框每一行的字符數。

          單選框和復選框

          HTML中,單選框和復選框是常見的表單元素,用于讓用戶選擇不同選項。它們分別使用<input>標簽的不同type屬性值來實現。

          1. 單選框

          單選框(radio button)允許用戶在一組選項中選擇一個??梢允褂孟嗤膎ame屬性來將多個單選框關聯起來。當用戶勾選其中一個單選框時,其他單選框將自動取消選中狀態??梢酝ㄟ^設置<input>標簽的type屬性為"radio"來創建單選框。例如:

          <form>
            <p>請選擇性別:</p>
            <label><input type="radio" name="gender" value="M">男士</label>
            <label><input type="radio" name="gender" value="F">女士</label>
            <label><input type="radio" name="gender" value="O">其他</label>
          </form>
          

          上面的示例代碼中,三個單選框使用相同的name屬性,以便將它們關聯起來。當用戶勾選其中一個單選框時,另外兩個單選框將自動取消選中狀態。

          1. 復選框

          復選框(checkbox)允許用戶選擇多個選項。可以使用相同的name屬性來將多個復選框關聯起來。當用戶勾選其中一個復選框時,其他復選框保持不變??梢酝ㄟ^設置<input>標簽的type屬性為"checkbox"來創建復選框。例如:

          <form>
            <p>請選擇語言:</p>
            <label><input type="checkbox" name="lang" value="js">JavaScript</label>
            <label><input type="checkbox" name="lang" value="py">Python</label>
            <label><input type="checkbox" name="lang" value="java">Java</label>
          </form>
          

          上面的示例代碼中,三個復選框使用相同的name屬性,以便將它們關聯起來。用戶可以勾選多個復選框。

          單選框和復選框的值可以通過value屬性進行指定,當表單提交時,瀏覽器會將被選中的單選框或復選框的值作為表單數據提交到服務器并進行處理。

          下拉列表框和列表框

          HTML中,下拉列表框和列表框是用來顯示多個選項的表單元素。它們分別使用不同的標簽和屬性來實現。

          1. 下拉列表框

          下拉列表框(dropdown list)可以讓用戶從多個選項中選擇一個選項??梢允褂?lt;select>標簽來創建下拉列表框,然后使用<option>標簽定義每一個選項。例如:

          <form>
            <p>請選擇城市:</p>
            <select name="city">
              <option value="bj">北京</option>
              <option value="sh">上海</option>
              <option value="gz">廣州</option>
              <option value="sz">深圳</option>
            </select>
          </form>
          

          上面的示例代碼中,四個<option>標簽定義了四個選項。其中"value"屬性指定每個選項的值,"text"節點指定每個選項的文本內容。當用戶點擊下拉框時,會出現一個下拉菜單列出所有可用選項,用戶可以從中選擇一個選項。

          1. 列表框

          列表框(list box)是另一種顯示多個選項的表單元素,與下拉列表框不同的是,列表框可以同時顯示多個選項??梢允褂?lt;select>標簽來創建列表框,然后使用<option>標簽定義每一個選項并設置multiple屬性為"multiple"來啟用多選模式。例如:

          <form>
            <p>請選擇興趣愛好:</p>
            <select name="interests" multiple>
              <option value="reading">閱讀</option>
              <option value="music">音樂</option>
              <option value="painting">繪畫</option>
              <option value="sports">運動</option>
            </select>
          </form>
          

          上面的示例代碼中,multiple屬性指定該列表框啟用多選模式。當用戶選擇一個或多個選項時,這些選項將被高亮顯示。

          總之,在HTML中可以使用下拉列表框和列表框來為用戶提供多個選項讓用戶選擇,并在表單提交時將選擇的結果作為表單數據提交到服務器。

          按鈕和圖像按鈕

          HTML中,按鈕和圖像按鈕是用來觸發事件或提交表單的表單元素。它們分別使用<button>標簽和<input>標簽的不同type屬性值來實現。

          1. 普通按鈕

          普通按鈕(button)通常用于觸發一些事件,例如刷新頁面、清空表單等??梢允褂?lt;button>標簽來創建普通按鈕。例如:

          <button>點擊我</button>
          

          上面的示例代碼中,創建了一個簡單的按鈕,點擊按鈕會觸發一些事件。

          1. 提交按鈕

          提交按鈕(submit button)用于將表單數據提交到服務器進行處理??梢允褂?lt;input>標簽,并將其type屬性設置為"submit"來創建提交按鈕,例如:

          <input type="submit" value="提交">
          

          上面的示例代碼中,設置了一個提交按鈕,當用戶點擊該按鈕時,瀏覽器會將表單數據提交到服務器并進行處理。

          1. 圖像按鈕

          圖像按鈕(image button)與普通按鈕類似,但它使用圖片而不是文本作為按鈕的標識??梢允褂?lt;input>標簽,并將其type屬性設置為"image"來創建圖像按鈕,例如:

          <input type="image" src="submit.png" alt="提交">
          

          上面的示例代碼中,創建了一個帶有圖片的圖像按鈕。當用戶單擊圖像按鈕時,瀏覽器會將表單數據提交到服務器并進行處理。

          總結

          以上就是今天要講的內容,本文簡單介紹了HTML的表單的知識點,更多內容可以查看THTML官方文檔

          如果覺得有用,歡迎明天再來,繼續合集的下一篇文章學習
          遇到問題,私信我!!~~


          主站蜘蛛池模板: 亚洲一区二区久久| 国产午夜毛片一区二区三区 | 午夜视频一区二区三区| 精品一区二区三区在线观看视频| 亚洲电影一区二区三区| 精品日韩在线视频一区二区三区| 亚洲第一区在线观看| 亚洲国产韩国一区二区| 国产成人高清亚洲一区久久| 国产一区二区在线视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 内射少妇一区27P| 97久久精品午夜一区二区| 亚洲日本va一区二区三区| 久久精品动漫一区二区三区| 亚洲午夜日韩高清一区| 爱爱帝国亚洲一区二区三区| 精品少妇ay一区二区三区| 国产一区二区不卡在线播放| 久久亚洲日韩精品一区二区三区| 国产一区精品视频| 日韩免费一区二区三区在线| 风间由美性色一区二区三区| 日本精品一区二区三区在线视频| 韩国福利一区二区美女视频| 亚洲AV乱码一区二区三区林ゆな | 日韩好片一区二区在线看| 高清一区高清二区视频| 精品女同一区二区三区免费播放| 一区二区三区四区精品视频| 国产一区二区三区在线2021| 精品国产AⅤ一区二区三区4区 | 国产亚洲福利一区二区免费看| 无码囯产精品一区二区免费| 免费视频精品一区二区三区| 东京热无码av一区二区| 亚洲综合色自拍一区| 精品无人区一区二区三区在线| 精品国产一区二区三区四区| 亚洲av无码一区二区三区天堂| 亚洲熟女综合色一区二区三区|