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

基于 Next.js 的 SSR/SSG 方案了解一下?

開發(fā) 前端
服務(wù)端渲染(SSR,Server Side Render)與客戶端渲染(CSR,Client Side Render)的核心區(qū)分點簡單來說就是完整的 HTML 文檔在服務(wù)端還是瀏覽器里組裝完成。

[[442187]]

本文主要是講講如何使用 Next.js 框架實現(xiàn)服務(wù)端渲染,將有效提升網(wǎng)頁的 SEO 和首屏渲染速度,說不定哪天就用上了,是吧!

一、服務(wù)端渲染(SSR)

服務(wù)端渲染(SSR,Server Side Render)與客戶端渲染(CSR,Client Side Render)的核心區(qū)分點簡單來說就是完整的 HTML 文檔在服務(wù)端還是瀏覽器里組裝完成。

SSR 的另一概念是同構(gòu)渲染,可以看看知乎中的討論:什么是前端的同構(gòu)渲染?[1]

同構(gòu)渲染簡單來說就是一份代碼,服務(wù)端先通過服務(wù)端渲染(SSR),生成 HTML 以及初始化數(shù)據(jù),客戶端拿到代碼和初始化數(shù)據(jù)后,通過對 HTML 的 DOM 進行 patch 和事件綁定對 DOM 進行客戶端激活(client-side hydration),該整體過程叫同構(gòu)渲染。

SSR 的原理,本文就不再贅述了,感興趣的朋友推薦閱讀這篇文章:《徹底理解服務(wù)端渲染 - SSR原理》

二、Next.js

Next.js[2] 是一款用于生產(chǎn)環(huán)境的 React 框架,無需配置,默認提供了生產(chǎn)環(huán)境所需所有功能的最佳開發(fā)實踐:支持靜態(tài)渲染和服務(wù)端渲染、支持 TypeScript、智能打包、路由預(yù)加載等功能。

與此同時,Next.js 還提供了如下開箱即用的 SDK 輔助開發(fā) Web 應(yīng)用:

閱讀過 SSR 原理一文可看到配置支持服務(wù)端渲染還是挺麻煩的,但借助 Next.js,可以很輕松的上手改造支持現(xiàn)有 Web 應(yīng)用服務(wù)端渲染。

是否采用服務(wù)端渲染還得綜合考慮收益,服務(wù)端渲染畢竟會增加服務(wù)器的計算開銷,穩(wěn)定性相較于 CSR 差一些。

三、創(chuàng)建 Next.js 應(yīng)用

初始化一個 Next.js 應(yīng)用可以直接通過腳手架快速完成:

  1. npx create-next-app@latest --ts 
  2. or 
  3. yarn create next-app --typescript 

中途會要求輸入項目名,并自動安裝所需的模塊

執(zhí)行 yarn dev 后需要手動再瀏覽器打開網(wǎng)址:http://localhost:3000 ,即可看到如下頁面:

首頁的內(nèi)容對應(yīng) ./pages/index.tsx 文件

初始的目錄結(jié)構(gòu)如下:

  1. ├── pages // 采用約定式路由(文件系統(tǒng)路由) 
  2. │   ├── _app.tsx 
  3. │   ├── api // API 目錄 
  4. |      ├── hello.ts 
  5. │   └── index.tsx // 首頁 
  6. ├── public // 公共資源 
  7. │   ├── favicon.ico 
  8. │   └── vercel.svg 
  9. ├── styles // 樣式 
  10. │   ├── Home.module.css 
  11. │   └── globals.css 
  12. ├── next-env.d.ts // Next 相關(guān)的 TS 定義 
  13. ├── next.config.js // Next.js 自定義配置 
  14. ├── node_modules 
  15. ├── package.json 
  16. ├── tsconfig.json 
  17. ├── README.md 
  18. └── yarn.lock 

四、頁面路由

通常我們的 Web 應(yīng)用是多頁面、多路由的,因此會涉及到在各個頁面之間跳轉(zhuǎn),因此有必要熟悉 Next.js 的路由使用方式。

上述講到了 Next.js 是約定式路由,基于文件系統(tǒng),對應(yīng)到 ./pages 目錄下,當添加頁面文件到 ./pages 目錄,Next.js 會自動識別并將對應(yīng)文件注冊的路由上

4.1 索引路由

Next.js 會自動將文件夾內(nèi)的 “index” 文件注冊為文件夾的主頁

4.2 嵌套路由

Next.js 支持嵌套文件的路由,如果您創(chuàng)建嵌套文件夾結(jié)構(gòu),文件仍將自動以相同方式路由解析。

4.3 動態(tài)參數(shù)路由

常見于比如博客的文章詳情頁面,文章的 id 是動態(tài)變化的,Next.js 中可以使用中括號解析到對應(yīng)的命名參數(shù)

更多關(guān)于動態(tài)路由的解析可參閱:https://nextjs.org/docs/routing/dynamic-routes

4.4 路由跳轉(zhuǎn)

之前有提到 Next.js 中的路由預(yù)加載功能,需借助 Next.js 提供的 next/link,寫法如下:

  1. <Link href="/blog/hello-world"
  2.   <a>第一篇文章</a> 
  3. </Link> 

應(yīng)用頁面之間的跳轉(zhuǎn),可以用 標簽包裹。

屬性 href 的值是跳轉(zhuǎn)頁面的路徑字符串或 URL 對象:

  1. import Link from 'next/link' 
  2.  
  3. function Articles({ articles }) { 
  4.   return ( 
  5.     <ul> 
  6.       {articles.map((article) => ( 
  7.         <li key={article.id}> 
  8.           <Link 
  9.             href={{ 
  10.               pathname: '/article/[slug]'
  11.               query: { slug: article.slug }, 
  12.             }} 
  13.           > 
  14.             <a>{article.title}</a> 
  15.           </Link> 
  16.         </li> 
  17.       ))} 
  18.     </ul> 
  19.   ) 
  20.  
  21. export default Articles 

如有需要對路由通過 js 跳轉(zhuǎn),則可以通過 Next.js 提供的 next/router[3] 中的 useRouter[4] Hook。

4.5 代碼拆分和預(yù)加載

通過 Next.js 的路由功能,可以自動完成頁面按需加載當前頁面所需的代碼,同時會自動預(yù)加載頁面中屬于自身應(yīng)用的鏈接。

這意味著在呈現(xiàn)主頁時,最初不會提供其他頁面的代碼,同時可確保即使您有數(shù)百個頁面,主頁也能按需快速加載。

僅加載您請求的頁面的代碼也意味著頁面變得獨立,如果某個頁面拋出錯誤,應(yīng)用程序的其余部分仍然可以工作。

在 Next.js 的生產(chǎn)版本中,每當 Link 組件出現(xiàn)在瀏覽器的視口中時,Next.js 都會在后臺自動預(yù)取鏈接頁面的代碼。當您單擊鏈接時,目標頁面的代碼已在后臺加載,頁面轉(zhuǎn)換將近乎即時。

五、靜態(tài)資源

所有靜態(tài)資源都可以放到 ./public 目錄下,Next.js 會自動為其中的文件注冊路由,按照文件系統(tǒng)的方式,與 Page 的路由類似。

5.1 圖片元素

一般網(wǎng)頁中的圖片寫法如下:

  1. <img src="/images/logo.png" alt="logo" /> 

但這種寫法會需要開發(fā)者手動去優(yōu)化,比如按需加載、錯誤處理等。

Next.js 考慮到這點,為了減輕開發(fā)者負擔,于是提供了 next/image[5],開箱即用。

這里其實可以借鑒一下,別的項目中為了業(yè)務(wù)統(tǒng)一處理圖片,可以封裝一個 Image 組件,提升研發(fā)效率。

  1. import Image from 'next/image' 
  2.  
  3. const YourComponent = () => ( 
  4.   <Image 
  5.     src="/images/profile.jpg" // 圖片文件路徑 
  6.     height={144} // 具有正確縱橫比的所需尺寸 
  7.     width={144} 
  8.     alt="Image Alt" 
  9.   /> 
  10.  
  11. export default YourComponent; 

5.2 Meta 數(shù)據(jù)

網(wǎng)頁的 Meta 數(shù)據(jù),也就是在 html->head 標簽中的內(nèi)容

Next.js 提供了 next/head[6] 用于聲明式編寫網(wǎng)頁的 head 內(nèi)容。

  1. import Link from 'next/link' 
  2. import Head from 'next/head' 
  3.  
  4. export default function FirstPost() { 
  5.   return ( 
  6.     <> 
  7.       <Head> 
  8.         <meta charset="UTF-8" /> 
  9.         <title>First Post</title> 
  10.         <link rel="shortcut icon" href="/favicon.ico" /> 
  11.         <meta name="keywords" content="網(wǎng)頁關(guān)鍵詞" /> 
  12.         <meta name="description" content="網(wǎng)頁描述" /> 
  13.         <meta name="author" content="DYBOY,dyboy2017@qq.com" /> 
  14.         <meta name="version" content="1.0" /> 
  15.         <link rel="stylesheet" href="//at.alicdn.com/t/font_2319527_hng3o947ocv.css" /> 
  16.         <link rel="stylesheet" href="/style/fancybox.css" /> 
  17.         <link rel="stylesheet" href="/style/app.css" /> 
  18.         <script src="/scripts/jquery.js"></script> 
  19.       </Head> 
  20.       <h1>First Post</h1> 
  21.       <h2> 
  22.         <Link href="/"
  23.           <a>Back to home</a> 
  24.         </Link> 
  25.       </h2> 
  26.     </> 
  27.   ) 

此外,若我們有需要修改 的訴求時,可創(chuàng)建pages/_document.js 文件,并通過“自定義文檔[7]”的方式繼承并統(tǒng)一改造所有網(wǎng)頁輸出的公共內(nèi)容。

5.3 JS 腳本文件

例如我們使用了三方庫 Jquery,雖然可以直接在 組件中直接寫:

  1. <script src="/scripts/jquery.js"></script> 

但是,這種方式包含腳本并不能明確說明何時加載同一頁面上獲取的其他 JavaScript 代碼。如果某個特定腳本會阻塞渲染并且會延遲頁面內(nèi)容的加載,則會顯著影響性能。

因此,可以通過 next/script[8] 來優(yōu)化

  1. import Link from 'next/link' 
  2. import Head from 'next/head' 
  3. import Script from 'next/script' 
  4.  
  5. export default function FirstPost() { 
  6.   return ( 
  7.     <> 
  8.       <Head> 
  9.         <title>First Post</title> 
  10.       </Head> 
  11.       <Script 
  12.         src="/scripts/jquery.js" 
  13.         strategy="lazyOnload" // 設(shè)置 js 加載的方式 
  14.         onLoad={() => 
  15.           // js 腳本文件加載完成后的回調(diào)函數(shù) 
  16.           console.log(`script loaded correctly`) 
  17.         } 
  18.       /> 
  19.       <h1>First Post</h1> 
  20.       <h2> 
  21.         <Link href="/"
  22.           <a>返回首頁</a> 
  23.         </Link> 
  24.       </h2> 
  25.     </> 
  26.   ) 

 5.4 CSS 文件

Next.js 已經(jīng)內(nèi)置支持了 CSS 和 SASS,允許開發(fā)者引入 .css 和 .sass 文件方式引入樣式文件,同時還支持 Tailwind CSS。

需要手動安裝 SASS 模塊

  1. yarn add sass 

默認還支持 CSS-in-JS,借助 styled-jsx[9] 這個模塊,可以直接在 React 組件中直接寫 CSS,同時限制作用域,不會影響其他組件。

如果需要 CSS 模塊化[10],那么 CSS 文件命名應(yīng)當為 *.module.css 格式。

  1. import styles from './layout.module.css' 
  2.  
  3. export default function Layout({ children }) { 
  4.   return <div className={styles.container}>{children}</div> 

全局 CSS 注入,則在根目錄的 ./styles 目錄編寫,同時也僅在 ./pages/_app.tsx 文件中引入全局樣式文件

  1. import '../styles/globals.css' // 引入全局樣式 
  2. import type { AppProps } from 'next/app' 
  3.  
  4. function MyApp({ Component, pageProps }: AppProps) { 
  5.   return <Component {...pageProps} /> 
  6.  
  7. export default MyApp 

Next.js 使用 PostCSS[11] 編譯 CSS,自定義配置 PostCSS 的方式可參考:【自定義 PostCSS 配置[12]】

六、預(yù)渲染和數(shù)據(jù)獲取

Next.js 支持:

  • 在服務(wù)端預(yù)渲染
  • 靜態(tài)頁面生成和服務(wù)端渲染
  • 有數(shù)據(jù)和無數(shù)據(jù)的靜態(tài)生成
  • 一些預(yù)定義的方法(生命周期函數(shù))注入數(shù)據(jù)

6.1 預(yù)渲染

默認情況下,Next.js 預(yù)渲染每個頁面。這意味著 Next.js 會提前為每個頁面生成 HTML,預(yù)渲染可以帶來更好的性能和SEO。

每個生成的 HTML 都與該頁面所需的最少 JavaScript 代碼相關(guān)聯(lián)。當瀏覽器加載頁面時,其 JavaScript 代碼會運行并使頁面完全交互。

預(yù)渲染和無預(yù)渲染的對比如下:

 6.2 靜態(tài)生成和服務(wù)端渲染

Next.js 支持兩種形式的預(yù)渲染方式:靜態(tài)生成和服務(wù)端渲染

  • 靜態(tài)生成: 在構(gòu)建時生成 HTML 的預(yù)渲染方法。然后在每個請求上重用預(yù)渲染的 HTML。
  • 服務(wù)器端渲染: 在每個請求上生成 HTML 的預(yù)渲染方法。

6.3 獲取數(shù)據(jù)

(1)靜態(tài)生成時獲取數(shù)據(jù)

在服務(wù)端構(gòu)建生成靜態(tài)頁面之前,有時候需要獲取一些數(shù)據(jù),可以借助 getStaticProps 方法。

在頁面組件內(nèi),同時導(dǎo)出一個 getStaticProps 方法:

  1. export default function HomePage(props) { ... } 
  2.  
  3. // 導(dǎo)出異步獲取數(shù)據(jù)方法 
  4. export async function getStaticProps() { 
  5.   // 獲取數(shù)據(jù),例如從數(shù)據(jù)庫、API、文件等 
  6.   const data = ... 
  7.  
  8.   // 返回的參數(shù)將會按照 key 值賦值到 HomePage 組件的同名入?yún)⒅?nbsp;
  9.   return { 
  10.     props: ... 
  11.   } 

注意,僅在頁面組件內(nèi)導(dǎo)出該方法

(2)服務(wù)端渲染時獲取數(shù)據(jù)

比如用戶的個人中心頁面,該頁面時不需要 SEO 優(yōu)化的,其數(shù)據(jù)通常需要實時更新獲取,因此采用 SSR 的方式,而 SSR 在服務(wù)端獲取數(shù)據(jù)可以借助 getServerSideProps 方法

和構(gòu)建時獲取數(shù)據(jù)方法類似:

  1. export default function HomePage(props) { ... } 
  2.  
  3. // 導(dǎo)出異步獲取數(shù)據(jù)方法 
  4. export async function getServerSideProps() { 
  5.   // 獲取數(shù)據(jù),例如從數(shù)據(jù)庫、API、文件等 
  6.   const data = ... 
  7.  
  8.   // 返回的參數(shù)將會按照 key 值賦值到 HomePage 組件的同名入?yún)⒅?nbsp;
  9.   return { 
  10.     props: ... 
  11.   } 

(3)客戶端渲染時獲取數(shù)據(jù)

如果不需要“預(yù)渲染”時候獲取數(shù)據(jù),即不需要“靜態(tài)生成”和“服務(wù)端渲染”的時候獲取數(shù)據(jù),則可以在對應(yīng)頁面組件代內(nèi),編寫網(wǎng)絡(luò)請求相關(guān)代碼。

Next.js 團隊提供了一個基于 React Hooks 的 useSWR 鉤子,推薦使用,該鉤子會處理緩存、重新驗證、焦點跟蹤、間隔重新獲取等。

一個簡單的示例如下:

  1. import useSWR from 'swr' 
  2.  
  3. function Profile() { 
  4.   const { data, error } = useSWR('/api/user'fetch
  5.  
  6.   if (error) return <div>failed to load</div> 
  7.   if (!data) return <div>loading...</div> 
  8.   return <div>hello {data.name}!</div> 

和一些封裝的請求 Hooks 類似,useSWR 還支持自定義請求庫,默認使用的是 fetch 的 pollyfill 模塊(unfetch[13]),提供的中文官方的文檔也非常清晰,地址:https://swr.vercel.app/zh-CN/docs/getting-started

七、動態(tài)路由

上面講到了預(yù)渲染,如果是動態(tài)路由的預(yù)渲染該如何處理?這里需要依賴方法 getStaticPaths 獲得動態(tài)路由需要生成頁面列表。

  1. // ./pages/post/[id].tsx 
  2. import Layout from '../../components/layout' 
  3.  
  4. export default function Post({id, article}) { 
  5.   return ( 
  6.       <Layout> 
  7.           <Head> 
  8.               <title>{article.title}</title> 
  9.           </Head> 
  10.           {article.title} 
  11.           <br /> 
  12.           {id} 
  13.           <br /> 
  14.           {article.date
  15.       </Layout> 
  16.    ) 
  17.  
  18. export async function getStaticPaths() { 
  19.   // 返回所有可能的文章 id 所對應(yīng)的列表 
  20.     const paths = [ 
  21.       { 
  22.         params: { 
  23.           id: 'ssg-SSR' 
  24.         } 
  25.       }, 
  26.       { 
  27.         params: { 
  28.           id: 'pre-rendering' 
  29.         } 
  30.       } 
  31.     ] 
  32.      
  33.     return { 
  34.         paths, 
  35.         fallback: false, // 如果在 paths 中 id 找不到對應(yīng)值,則指向 404 頁面 
  36.     } 
  37.  
  38. export async function getStaticProps({ params }) { 
  39.   // 通過 params.id 獲取必要的文章數(shù)據(jù)  
  40.   // parmas 即路由中的參數(shù)對象 
  41.   const article = getContentById(parmas.id); 
  42.   return { 
  43.       props: { 
  44.           id, 
  45.           artcile, 
  46.       } 
  47.   } 

關(guān)于 fallback 可以參閱:fallback props[14]

自建一個 404 頁面,文件路徑為:./pages/404.tsx

  1. export default function Custom404() { 
  2.   return <h1>404 - Page Not Found</h1> 

八、BFF API

在初始化的目錄結(jié)構(gòu)中的 ./pages/api/hello.ts 文件,就是一個 API 頁面,他的路由和頁面路由相同

  1. import type { NextApiRequest, NextApiResponse } from 'next' 
  2.  
  3. type Data = { 
  4.   name: string 
  5.  
  6. export default function handler( 
  7.   req: NextApiRequest, 
  8.   res: NextApiResponse<Data> 
  9. ) { 
  10.   res.status(200).json({ name'John Doe' }) 

在 ./pages/api/ 目錄下,前端開發(fā)者編寫人意的 API 應(yīng)用,也就是被稱為 Serverless Functions,類似于字節(jié)的“輕服務(wù)[15]”

九、部署

官方推薦使用 Vercel[16] 來完成一鍵自動化構(gòu)建部署

首先執(zhí)行構(gòu)建,構(gòu)建時候會自動做相關(guān)優(yōu)化

  1. yarn build 
  2. // 實際執(zhí)行 
  3. next build 

然后是啟動服務(wù):

  1. yarn start 
  2. // 實際執(zhí)行 
  3. next start -p 8080 

在生產(chǎn)環(huán)境,再用 PM2[17] 管理守護進程

然后使用 Nginx 作為網(wǎng)關(guān),配置域名,SSL,映射到本地 8080 端口即可。

拓展更多

Next.js 還有更多細節(jié)和 API,需要深入了解的小伙伴可以參閱:Next.js API文檔[18]

除了 Next.js,還有 Razzle.js[19] 也可以學習下。

推薦閱讀:

  • 《徹底理解服務(wù)端渲染 - SSR原理》
  • 《魅族官網(wǎng)基于 next.js 重構(gòu)實踐總結(jié)與分享[20]》
  • 《SWR - 用于數(shù)據(jù)請求的 React Hooks 庫[21]》
  • 《react 服務(wù)端(SSR) 框架next.js開發(fā)個人網(wǎng)站分享[22]》
  • 《Next.js 應(yīng)用開發(fā)實踐[23]》

總結(jié)

通過對 Next.js 的初步上手使用,SSR 確實有助于提升用戶的體驗,比如一些文檔網(wǎng)站、官網(wǎng)、營銷網(wǎng)頁,個人非常推薦這種方式,但其缺點也很明顯,服務(wù)端的穩(wěn)定性會有所降低,穩(wěn)定性可以通過增加成本提高,相較于其優(yōu)點,還是值得投入的!

Next.js 把一些生產(chǎn)配置初始化就構(gòu)建完成,對于開發(fā)者來說,開箱即用的感覺真的太棒了!

參考資料

[1]什么是前端的同構(gòu)渲染?: https://www.zhihu.com/question/325952676

[2]Next.js: https://nextjs.org/

[3]next/router: https://nextjs.org/docs/api-reference/next/link

[4]useRouter: https://nextjs.org/docs/api-reference/next/router#userouter

[5]next/image: https://nextjs.org/docs/api-reference/next/image

[6]next/head: https://nextjs.org/docs/api-reference/next/head

[7]自定義文檔: https://nextjs.org/docs/advanced-features/custom-document

[8]next/script: https://nextjs.org/docs/api-reference/next/script

[9]styled-jsx: https://github.com/vercel/styled-jsx

[10]CSS 模塊化: https://nextjs.org/docs/basic-features/built-in-css-support#adding-component-level-css

[11]PostCSS: https://postcss.org/

[12]自定義配置 PostCSS: https://nextjs.org/docs/advanced-features/customizing-postcss-config

[13]unfetch: https://www.npmjs.com/package/unfetch

[14]fallback props: https://nextjs.org/docs/basic-features/data-fetching#the-fallback-key-required

[15]輕服務(wù): https://qingfuwu.cn/

[16]Vercel: https://vercel.com/

[17]PM2: https://pm2.keymetrics.io/

[18]Next.js API文檔: https://nextjs.org/docs/api-reference/cli

[19]Razzle.js: https://razzlejs.org/

[20]魅族官網(wǎng)基于 next.js 重構(gòu)實踐總結(jié)與分享: https://zhuanlan.zhihu.com/p/113853235

[21]SWR - 用于數(shù)據(jù)請求的 React Hooks 庫: https://swr.vercel.app/zh-CN/docs/getting-started

[22]react 服務(wù)端(SSR) 框架next.js開發(fā)個人網(wǎng)站分享: http://www.liuweibo.cn/p/206

[23]Next.js 應(yīng)用開發(fā)實踐: https://nextjs-in-action-cn.taonan.lu/

【編輯推薦】

 

責任編輯:姜華 來源: DYBOY
相關(guān)推薦

2023-01-03 08:00:00

2020-12-04 09:26:13

SSR 框架企業(yè)級

2024-04-03 13:27:28

Next.js擴展項目

2025-07-24 08:32:39

2025-03-06 00:00:00

2025-07-23 04:00:00

2024-12-13 08:37:32

2025-02-03 00:00:35

2022-02-22 20:48:48

RemixNext.js框架

2022-08-02 09:00:00

開發(fā)Web工具

2024-01-25 09:04:25

2024-05-09 09:01:03

2024-11-25 07:39:48

2024-09-20 15:37:02

2025-01-17 09:29:42

2020-02-10 14:26:10

GitHub代碼倉庫

2024-04-28 10:56:34

Next.jsWeb應(yīng)用搜索引擎優(yōu)化

2024-09-04 10:27:53

2022-09-14 15:11:06

Linux防火墻

2020-12-10 08:44:35

WebSocket輪詢Comet
點贊
收藏

51CTO技術(shù)棧公眾號

大西瓜av在线| 久久人人97超碰com| 国产亚洲日本欧美韩国| 国产精品成人久久电影| 能在线看的av| 国产亚洲毛片| 色阁综合伊人av| 美女又黄又免费的视频| 色偷偷色偷偷色偷偷在线视频| 波波电影院一区二区三区| 欧美一级视频在线观看| 嘿嘿视频在线观看| 精品国产一区二区三区成人影院| 黑人巨大精品欧美一区二区一视频| 久久精品女人的天堂av| 国产精品久久久久久免费| 亚洲一级一区| www.日韩视频| 国产黑丝一区二区| 国产美女亚洲精品7777| 日本高清免费不卡视频| 日本男女交配视频| 国产www.大片在线| kk眼镜猥琐国模调教系列一区二区| 国产xxx69麻豆国语对白| 久久久久久久久久91| 精品国产精品国产偷麻豆| 日韩欧美国产一二三区| 国产亚洲精品网站| 欧美日韩在线视频免费观看| 中文字幕在线免费不卡| 欧美一区二区视频17c| 全部免费毛片在线播放一个| 国产毛片一区二区| 国产精品一区二区性色av| 国产情侣自拍av| 亚洲国产午夜| 欧美成人高清视频| 少妇高潮在线观看| 免费观看在线黄色网| 日韩国产专区| 亚洲欧美国产日韩中文字幕| 日本中文字幕有码| 香蕉久久久久久| 欧美日韩综合视频| 国产一二三四区在线观看| 91社区在线| 国产欧美精品一区aⅴ影院 | 久久久精品区| 欧美年轻男男videosbes| 成人黄色一区二区| 欧美激情喷水| 欧美日韩美女在线观看| 精品国产一区二区三区四区四| 久久综合电影一区| 精品人妻无码一区二区三区| 精品久久ai| 亚洲成年人在线| 国产吃瓜黑料一区二区| 精品一区二区三区免费看| 91精品国产综合久久久久久久久久 | 日韩成人在线视频网站| 熟女人妻一区二区三区免费看| 亚洲超碰在线观看| 亚洲成人精品视频在线观看| 波多野结衣有码| 牛牛精品成人免费视频| 国产婷婷97碰碰久久人人蜜臀 | 欧美激情在线看| 亚洲图片都市激情| 91小视频xxxx网站在线| 亚洲一区影音先锋| www.玖玖玖| 78精品国产综合久久香蕉| 色婷婷激情综合| 亚洲另类第一页| 国产精品1区在线| 欧美丰满少妇xxxxx高潮对白| 成人在线短视频| xvideos.蜜桃一区二区| 亚洲乱码av中文一区二区| www.久久国产| 91亚洲一区| 欧美精品在线免费观看| 精品小视频在线观看| 国产精品视频| 91中文字幕一区| 男人天堂综合网| 国产亚洲一区二区在线观看| av不卡在线免费观看| av手机在线观看| 欧美丝袜自拍制服另类| 亚洲熟妇一区二区| 欧美一区二区三| 久久国产精品久久国产精品| 久久狠狠高潮亚洲精品| 蜜臀久久99精品久久久久久9| 99国产在线| 国产裸舞福利在线视频合集| 亚洲激情五月婷婷| 欧美又粗又长又爽做受| 日韩精品一区二区三区av| 欧美tk—视频vk| 少妇视频在线播放| 亚洲另类自拍| 成人网在线免费观看| 水莓100在线视频| 日韩美女视频一区二区| 91好吊色国产欧美日韩在线| 免费毛片在线看片免费丝瓜视频| 午夜激情综合网| 深爱五月综合网| 欧美激情网址| 久久99久久亚洲国产| 国产精品午夜一区二区| 91原创在线视频| 热这里只有精品| 超级碰碰久久| 5858s免费视频成人| 88久久精品无码一区二区毛片| 日韩综合在线| 国产成人精品视频在线观看| 凹凸精品一区二区三区| 91视视频在线直接观看在线看网页在线看| 欧美日韩一级在线| xx欧美视频| 日韩成人在线视频| 一级免费在线观看| 国产精品99久久久久久久vr| 亚洲伊人婷婷| 国产精品无码久久久久| 亚洲激情在线观看| 久艹在线观看视频| 亚洲裸体俱乐部裸体舞表演av| 亚洲在线免费视频| 日本高清中文字幕在线| 欧美无人高清视频在线观看| 亚洲av成人无码久久精品 | 亚洲欧洲日本在线| 欧美污视频网站| 日韩欧美影院| 欧美一区二区.| 五月婷中文字幕| 精品久久久久久久久久久| 日本一区二区免费视频| 欧美日韩一视频区二区| 国产成人av一区二区三区| 日本一区高清| 欧美日韩在线免费| 亚洲av无码国产精品久久| 国产欧美另类| 明星裸体视频一区二区| 国产伦精品一区二区三区视频金莲| 日韩电影中文字幕一区| 国产一级18片视频| 国产亚洲成aⅴ人片在线观看| 88av.com| 成人亚洲一区二区| 国产美女久久久| 成人免费网址| 欧美男人的天堂一二区| 人人妻人人藻人人爽欧美一区| 首页亚洲欧美制服丝腿| 色就是色欧美| 欧美日韩电影免费看| 日韩精品在线免费观看视频| 免费av中文字幕| 中文一区一区三区高中清不卡| 99sesese| 狠狠久久婷婷| 欧美理论一区二区| 噼里啪啦国语在线观看免费版高清版| 亚洲国产果冻传媒av在线观看| 伊人情人综合网| 亚洲一区二区中文| 最新av在线播放| 欧美精品一区二区三区在线播放| 91看片在线播放| 日本一区二区在线不卡| 女同激情久久av久久| 欧美午夜一区二区福利视频| 激情小说综合网| 日韩电影av| 怡红院精品视频| www.久久精品.com| 亚洲 欧美综合在线网络| 亚洲黄色小说视频| 激情欧美一区二区三区在线观看| 91国在线高清视频| 精品福利网址导航| 国产精品视频99| 日韩免费影院| 宅男66日本亚洲欧美视频| www.国产三级| 在线精品视频免费播放| 麻豆亚洲av熟女国产一区二| 久久久精品天堂| 午夜诱惑痒痒网| 日韩亚洲国产欧美| 亚洲综合网中心| av在线成人| 日本中文字幕不卡免费| jzzjzzjzz亚洲成熟少妇| 欧美精品一区二区三区久久久 | 久久综合网色—综合色88| 亚洲涩涩在线观看| 欧美午夜不卡| 亚洲一卡二卡三卡| 2020最新国产精品| 国产精品爽黄69| 国产精品一区二区日韩| 久久人体大胆视频| 国产专区在线播放| 亚洲国产第一页| 国产三级第一页| 日本韩国一区二区| 日韩无码精品一区二区三区| 亚洲欧美日本韩国| 9.1片黄在线观看| 91丨porny丨国产入口| 国产精品果冻传媒| 国产一区二区在线免费观看| 校园春色 亚洲色图| 久久精品一区| 日韩少妇内射免费播放18禁裸乳| 欧美私人啪啪vps| 国产欧美综合一区| 亚洲人成伊人成综合图片| 成人av色在线观看| 91伊人久久| 国产精品igao视频| 免费电影日韩网站| 美女国内精品自产拍在线播放| 在线看免费av| 亚洲精品一区二区三区在线观看| 7777久久亚洲中文字幕| 欧美三级中文字| 91美女免费看| 欧美日韩国产限制| 日本中文字幕免费| 午夜视黄欧洲亚洲| 日韩三级小视频| 精品国产91乱高清在线观看 | 在线精品观看国产| 国产精品露脸视频| 欧美性色黄大片手机版| 亚洲性猛交富婆| 欧美日韩一区在线观看| 欧美视频xxxx| 欧美色老头old∨ideo| 亚洲av无码不卡| 日本韩国精品在线| 97人妻精品视频一区| 欧美午夜精品免费| 亚洲一区二区激情| 91麻豆精品久久久久蜜臀| av官网在线观看| 日韩欧美一区在线观看| 懂色av蜜臀av粉嫩av分享吧| 337p日本欧洲亚洲大胆精品| 午夜福利理论片在线观看| 亚洲精品美女免费| 黄色a在线观看| 亚洲精品视频播放| www.视频在线.com| 久久国产精品影片| 美女的胸无遮挡在线观看| 国产999精品视频| 色成人综合网| av资源一区二区| 婷婷成人在线| 亚洲欧美日韩不卡一区二区三区| 我不卡伦不卡影院| 污污污污污污www网站免费| 国产一区二区三区四区三区四| 激情伊人五月天| 日本最新不卡在线| 久久无码人妻一区二区三区| 99在线精品视频| 精品一区二区6| 亚洲一区二区三区小说| 神马久久久久久久| 3d动漫精品啪啪1区2区免费| 国产99视频在线| 精品国产乱码久久久久久夜甘婷婷 | 九九热视频在线免费观看| 亚洲国产精品久久久久婷婷884| 圆产精品久久久久久久久久久| 在线免费观看视频一区| 99在线观看免费| 亚洲色在线视频| 欧美人与性动交α欧美精品济南到 | 精品无码人妻一区二区三| 激情五月少妇a| 一区二区三区日韩| 69视频免费在线观看| 欧美色综合影院| 午夜免费福利视频| 亚洲人午夜色婷婷| 成人影院在线观看| 日韩av电影在线免费播放| 成人精品国产亚洲| 丁香婷婷久久久综合精品国产| 国产精品日韩精品中文字幕| 黑人巨茎大战欧美白妇| 亚洲欧美久久| 久久av一区二区三| 国产精品毛片大码女人| 日本熟妇一区二区| 精品久久久久久久久久ntr影视| 国产情侣一区二区| 亚洲国产精品va在线| a毛片在线播放| 欧洲日本亚洲国产区| 香港久久久电影| 亚洲在线视频一区二区| 久久一区二区三区四区五区| 精品无码人妻少妇久久久久久| 欧美国产日韩一二三区| 免费又黄又爽又色的视频| 欧美日韩视频在线观看一区二区三区 | 青青一区二区三区| 北条麻妃69av| aaa亚洲精品| 久久久久亚洲av片无码下载蜜桃 | 亚洲高清视频网站| 最近更新的2019中文字幕| 热色播在线视频| 韩国一区二区三区美女美女秀 | 欧美激情网友自拍| 国产乱子精品一区二区在线观看| 日本福利一区二区三区| aa亚洲婷婷| 国产美女视频免费观看下载软件| 国产精品久久久99| 中国一级特黄视频| 在线观看欧美www| 成人看片在线观看| 欧洲精品亚洲精品| 视频一区二区国产| 久久久久久久毛片| 日韩欧美999| 精品资源在线看| 国产精品成人va在线观看| 亚洲精品进入| 欧美 国产 小说 另类| 狠狠狠色丁香婷婷综合激情| 日韩精品一区二区亚洲av性色 | 阿v天堂2014| 日本久久一区二区三区| 黄色av免费在线观看| 国产成人精品综合| 亚洲宅男一区| 欧美极品欧美精品欧美图片| 久久中文字幕电影| 国产性生活视频| 国产一区二区欧美日韩| 国产91在线精品| 亚洲国产精品一区二区第一页| 麻豆极品一区二区三区| 911国产在线| 精品久久一二三区| 55av亚洲| 欧美久久久久久久| 美女任你摸久久| 亚洲最大的黄色网址| 7777女厕盗摄久久久| caopen在线视频| 精品一卡二卡三卡四卡日本乱码| 欧美日本三区| 野外性满足hd| 色婷婷精品大在线视频 | 中日韩免费视频中文字幕| 国产精品爽爽久久久久久| 色综合久久88色综合天天看泰| 国产免费av国片精品草莓男男| 亚洲理论电影在线观看| 久久青草欧美一区二区三区| 一级α片免费看刺激高潮视频| 永久555www成人免费| 日韩综合av| 欧美一级视频免费看| 26uuu成人网一区二区三区| 中文人妻熟女乱又乱精品| 九九热这里只有在线精品视| 77成人影视| 日本熟妇人妻中出| 亚洲欧洲国产日韩| 亚欧洲精品视频| 91精品久久久久久| 亚洲蜜桃视频| 精品无码一区二区三区| 91精选在线观看| 日韩欧美看国产| 成人在线免费高清视频| 91丨九色丨蝌蚪富婆spa| 国产精品污视频| 欧美亚洲另类制服自拍| 久久国产成人午夜av影院宅| 久久福利小视频|