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

前端項目重構的深度思考和復盤

開發 前端
系統重構是一個持續的過程, 我們不僅要有持續學習的態度, 還需要不斷的實踐和積累優秀的最佳實踐, 這樣才能在不斷重構中讓我們的系統不斷適應復雜多變的“社會環境”.

hi, 大家好, 我是徐小夕, 今天和大家分享一下前端項目重構的一些思考和復盤, 同時也是對自己多年項目研發經驗的一個總結.

一. 背景介紹

1. 我們為什么要做項目重構

項目重構是每一家穩定發展的互聯企業的必經之路, 就像一個產品的誕生, 會經歷產品試錯和產品迭代 一樣, 隨著業務或新技術的不斷發展, 已有架構已無法滿足更多業務擴展的需求, 所以只有通過重構來讓產品“進化”, 才能跟上飛速發展的時代浪潮.

圖片圖片

這里我結合自己的實際經驗總結一下項目重構的幾個原因:

1. 技術因素

技術因素主要有如下幾個方面:

  • 早期技術團隊在技術選型上的誤判(常發生于MVP類型的產品快速上線導致的技術調研不夠充分)
  • 新老技術框架的更替(比如從 jquery 遷移到 vue/react)
  • 技術團隊交接出現的斷層(老技術團隊的架構設計更不上新技術團隊的發展, 出現架構上的“平替”)
  • 技術架構升級(比如隨著業務發展, 由傳統的MPA應用轉為基于微前端模式的SPA應用)
  • 安全,性能,代碼質量等原因導致的技術重構

2. 產品因素

  • 產品形態調整(比如由純PC應用轉為響應式應用, 或者從H5到支持跨端)
  • 產品業務調整(非常常見的重構理由之一)
  • 產品指標調整(如兼容性, 性能指標等導致的代碼重構)

上面是我列出來的比較典型的重構場景, 也是我們未來在設計產品技術架構之前需要考慮的方面. 為了提高自己設計的架構穩定性, 我們需要提前和產品溝通明確, 以降低后期重構和維護成本.

最后總結幾條架構設計的經驗:

  • 能做規范的一定要嚴格做好規范
  • 在設計架構之前, 一定要充分理解業務場景, 明確產品的技術交付指標
  • 架構設計以可溯源 為基本要求
  • 不要盲目追求最好的方案, 以局部最優解為工程設計理念

3.做項目重構之前, 需要有哪些準備

當然做項目重構也是有技術門檻的,不是所有程序員都能做好重構工作, 建議大家具備如下幾種技術能力:

  • 對項目所使用的框架語言有相對深入的理解和掌握
  • 有一定的前端工程化經驗(如webpack, vite, gulp, nodejs, babel, AST等有一定的研究)
  • 熟悉常用的web性能優化方案
  • 熟悉常見的設計模式和前端編碼規范
  • 熟悉前端主流的技術框架的設計原理和工程設計思想

接下來我們一起看看常見的幾種項目重構場景及其重構方向.

二. 不同類型項目重構的方法論

1. 業務系統自身的重構

業務系統自身的重構一般可以包含如下幾個方面:

  • 業務代碼優化

業務代碼優化主要是針對一些核心業務代碼, 進行流程上, 邏輯上的重構, 讓它更具可讀性和維護性, 同時保證業務操作的兼容性, 具體方案如下:

  • 復雜業務邏輯需要編寫注釋
  • 代碼中訪問性屬性提供兼容邏輯(常見的比如訪問對象屬性, a.b.c, 如果a,b為非對象則整段代碼將報錯)
  • 代碼結構優化(比如冗長的if else 或者“回調地獄” 可以采用適配器模式或者es6+語法來優化)
  • 方法參數調優(一個函數有多個參數, 可以使用參數對象來提高可讀性,降低使用偏差)
  • 業務代碼性能優化(復雜后臺系統比如低代碼類產品, 前端需要處理很多數據和邏輯, 此時可以用合適的數據結構和算法優化js計算)
  • 函數式編程思想優化業務函數(可選)
  • 業務代碼進行單元測試, 提高代碼質量(可選)
  • 代碼規范

早期可能由某名研發單獨負責的項目, 對代碼規范和格式要求不是很高, 但是需要考慮后期團隊擴容帶來的協作開發問題, 這個時候如果沒有統一的規范, 不同研發小伙伴可能寫出的代碼千奇百怪, 導致后期維護成本巨大, 尤其是涉及到需要維護他人代碼時. 所以我們重構的另一個目標就是降低代碼理解成本, 保證項目代碼在閱讀時就像同一個寫出來的, 這樣對后期邏輯復用, 組件解耦, 問題定位以及業務代碼維護將非常有幫助.

常用的措施有:

  • 代碼格式規范(如eslint)
  • 邏輯語法類型約束(如typescript)
  • 代碼規范(如css命名規范OOCSS, BEM等, 文件命名規范, js變量命名復規范等)
  • git 提交規范(常見的是在git hooks的提交階段對提交格式等進行校驗)

當然, 這些都是需要結合自身團隊和項目來定的, 這里只做參考.

  • 工程化優化

工程化優化主要有以下幾個場景:

  • 由于業務不斷增加, 系統的復雜性加大導致的本地運行和打包速度越來越慢
  • 由于項目代碼量的增加導致頁面臃腫, 需要進行合理的拆分
  • 基于已有的工程經驗沉淀, 需要對工程化配置做進一步升級, 優化
  • 老舊腳手架無法適應當前的項目生產效率

接下來我會針對以上場景, 進行一些解決方案的分享.

  1. 由于業務不斷增加, 系統的復雜性加大導致的本地運行和打包速度越來越慢

針對這種情況, 我們可以借助 speed-measure-webpack-plugin 插件,它可以分析 webpack 的總打包耗時以及每個 plugin 和 loader 的打包耗時,從而讓我們對打包時間較長的部分進行針對性優化。

同時默認情況react, react-dom, react-router 等公共模塊在每次構建都會參與打包, 這些實際上是沒有必要的, 我們可以將其傳到 cdn上, 從而減少webpack 的打包”工作量“.

我們可以安裝 html-webpack-externals-plugin 來實現將指定模塊從打包列表中排除, 具體用法如下:

const HtmlWebpackExternalsPlugin = require('html-webpack-externals-plugin');

module.exports = {
  // ...其他配置代碼
  plugins: [
    new HtmlWebpackExternalsPlugin({
      externals: [
        {
          module: 'react',
          entry: 'https://cdn.dooring.cn/umd/react.production.min.js',
          global: 'React',
        },
        {
          module: 'react-dom',
          entry:
            'https://cdn.dooring.cn/umd/react-dom.production.min.js',
          global: 'ReactDOM',
        },
      ],
    }),
  ],
};

為了追求更驚一步的打包效率, 我們可以使用并行的方式構建, 同樣 webpack 生態也提供了對應的模塊 parallel-webpack.  具體用法大家可以看文檔, 非常簡單方便.

其他還有很多優化的方案, 這里我列一下, 大家可以根據實際情況使用:

  • 配置并行壓縮(terser-webpack-plugin, css-minimizer-webpack-plugin, html-minimizer-webpack-plugin 等都支持parallel參數)
  • 預編譯資源模塊(可以利用webpack.DllPlugin來提前將公共模塊打包以便后續直接復用)
  • 使用構建緩存(webpack5 內置的 cache 模塊, 或者cache-loader)
  • 對打包體積進行分析, 以便有針對性的優化(如webpack-bundle-analyzer)

當然除了對已有構建工具的優化, 我們可以評估一下重構成本, 將構建內核替換vite等更高效的構建工具.

  1. 由于項目代碼量的增加導致頁面臃腫, 需要進行合理的拆分

針對項目代碼量的增加導致頁面臃腫, 我們可以從項目本身的角度, 對項目進行拆解, 將公共模塊抽離為公用業務類庫或者組件庫:

圖片圖片

除了對項目進行可復用性拆分之外, 我們還需要根據系統復雜量級, 近一步拆分項目, 比如將一個巨石工程拆分為多個子工程, 單獨運行維護, 或者采用之前熱點討論的微前端的模式, 比如使用 qainkun, single-spa, Micro App, EMP, Garfish, Bit 這些優秀的微前端框架.

綜上, 我們可以根據項目復雜度, 做如下優化:

  • 模塊 & 組件化
  • 拆分子系統(已有架構不變的MPA模式)
  • 拆分子系統(微前端)

當然我們始終需要保持一個理念: 局部最優, 誤增繁復.

  1. 基于已有的工程經驗沉淀, 需要對工程化配置做進一步升級, 優化

這種情況主要是在項目發展穩定之后, 需要思考的重構方向, 比如早期由于業務場景單一, 很多公共配置都寫在業務代碼里的, 隨著業務復雜之后, 很多模塊都需要使用改配置或者變量, 比如:

// a.js
const publicDomain = 'https://dooring.vip';
const serverUrl = 'https://xxx.cn';

// b.js
const publicDomain = 'https://dooring.vip';

// c.js
const appid = 'xxxxxxxx';
const website_Logo = 'http://h5.dooring.cn/logo.png';

對于這種零散且固定的變量, 未來可能會被多個頁面或者模塊復用, 所以為了降低成本, 我們可以把這些通用配置提取到外層, 作為公共配置文件, 這樣后期新項目也能享受開箱即用的配置體驗.

拿我的親身經驗, 比如幾年前我開發的低代碼項目H5-Dooring, 有一些零散的配置信息分散在項目的各個角落, 后面經過幾次重構優化之后, 整個項目只需要在配置文件中輕松配置內容, 即可一鍵控制頁面的走向, 這里分享一下優化過后的配置文件:

// h5-dooring全局配置文件
define: {
    START_ENV,
    lang,
    // 配置h5端訪問的域名
    h5Domain: 'h5.dooring.cn',
    // 設置當前版本號
    curVersion: dooringVersion,
    // 備案信息
    copyright: 'xxxxx-3',
    // 是否顯示更新彈窗
    showUpdateModal: true,
    // 更新日志
    updateList:  [
      "1. 新增表格組件",
      "2. 國際化優化",
      "3. 表單詳情頁支持內部滾動",
      "4. 個人圖片庫性能優化",
      "5. 下載代碼功能優化"
    ],
    // 網站logo地址
    logo: 'http://cdn.dooring.cn/dr/logo.ff7fc6bb.png',
    // 入口頁面是否展示贊助品牌和版權提示
    showAdsAndTip: true,
    // 登錄時獲取登錄碼的二維碼
    qrcode: 'http://cdn.dooring.cn/dr%2Fcode1.png',
    // 友情鏈接展示
    friendLinks: [
      {
        name: 'V6',
        link: 'http://v6.dooring.cn/beta',
        title: '可視化大屏編輯器'
      },
      {
        name: 'Power',
        link: '/powernice',
        title: '文檔編輯器'
      }
    ],
    // 默認語言
    defaultLocale: 'zh-CN',
    langMap: langMap
  },

這樣, 我們的工程化結果就可以讓不同的技術小伙伴輕松的享受, 讓項目創建的成本和自由度得到極大的提升.

  1. 老舊腳手架無法適應當前的項目生產效率

圖片圖片

對于這種場景, 我們就需要對腳手架自身有更多的研究和了解, 比如熟悉webpack設計思想, 熟悉babel的工作流程, 熟悉 nodejs 開發工具鏈的一些模式等, 這里分享幾個比較成熟的先進腳手架, 大家如果覺得老項目工程比較老舊, 可以往這幾個方向重構:

  • 基于webpack5.0的項目腳手架
  • vite
  • umi4.0

如果大家對以上三種之一比較熟悉, 也可以基于他們二次封裝成符合自身業務場景的DIY項目工具.

  • 渲染層優化

渲染層優化主要表現在產品的體驗上, 比如:

  • 提高首屏加載速度
  • 白屏體驗優化
  • 大數據列表渲染優化
  • api請求優化
  • 動畫性能優化
  • dom過載導致的頁面卡頓優化

以上是我之前遇到的一些渲染優化的維度, 接下來和大家一一介紹解決思路.

1. 提高首屏加載速度

有很多方法可以幫助我們提高首屏加載速度, 比如:

  • 靜態資源放cdn, 提高不同地域用戶訪問資源的速度
  • 頁面或路由懶加載, 降低首次加載單一頁面的代碼體積
  • 靜態資源(如圖片, 視頻等)懶加載
  • 資源壓縮(比如開啟gzip模式)

當然還存在很多客觀因素, 比如用戶所在區域為弱網環境, 我們可以根據網速提供一個最小化弱網可替代頁面, 來保證我們網站的可用性和可訪問性.

2. 白屏體驗優化

對于白屏優化, 也有很多成熟的例子, 比如采用骨架屏:

圖片圖片

如果我們的項目是基于 vue-cli 構建的,那么可以使用比較成熟的的 page-skeleton-webpack-plugin 方案,否則我們仍然可以選擇 vue-router 提供的 vue-server-renderer.

當然你的項目是使用react的, 也可以輕松使用如 react-content-loader 這樣的svg方案來定制自己的骨架屏.

除了骨架屏之外, 我們還可以提供一個模版頁面或者加載動畫, 以便在頁面加載完成之前給用戶一個優雅的過渡提示. 比如:

圖片圖片

3. 大數據列表渲染優化

對于一些中后臺復雜的系統模塊, 可能會涉及到一次渲染大量列表項或者多級組織樹的情況:

圖片圖片

尤其是在大公司或者大集團中出現的頻率非常高, 這種情況我們就需要用到虛擬列表或者節點懶加載的方式了. 虛擬列表應用非常廣泛, 目前也有幾個成熟的方案大家可以直接使用:

  • vue virtual scroll list
  • react-virtualized
  • rc-virtual-list

如果你的項目目前還好沒有使用這種方案, 不妨評估一下, 是否可以用這些方案為自己項目保駕護航.

4. api請求優化

api 請求優化主要正對這種場景: 頁面的渲染依賴于某個或者某些請求的完成, 或者由于某個頁面請求量過大導致每次重新進入頁面都需要造成一定的性能開銷.

對于這兩種情況, 其實不僅僅是對瀏覽器渲染有影響, 還會極大的增加服務器的壓力, 所以我們需要對請求或者頁面進行一定范圍的緩存.

比如說我們可以把不長變動的請求數據存在 indexedDB 中, 當第二次訪問直接可以從 indexedDB 中拿到請求數據, 這樣既降低了服務器壓力, 也提高了二次渲染的效率.

其次我們可以對部分頁面做路由緩存, 避免每次切換都重新渲染, 當然這只針對于不需要實時更新數據的頁面而言. 我之前也分享了一篇瀏覽器緩存接口實戰的文章, 大家感興趣的可以學習參考, 對于 indexedDB, 我封裝了一個開箱即用的庫, 大家可以直接使用:

github地址: https://github.com/MrXujiang/xdb

5. 動畫性能優化

這也是個老生常談的問題, 這里直接分享幾個方案:

  • 優化精簡 DOM 結構,合理布局
  • 使用 transform 代替 left,top 減少使用引起頁面重排的屬性
  • 開啟硬件加速(比如設置transform: translateZ(0) 或者transform: translate3d(0, 0, 0))
  • 盡量避免瀏覽器創建不必要的圖形層
  • 盡量減少 js 動畫,如需要,使用性能更友好的requestAnimationFrame
  • 使用 chrome performance 工具調試動畫性能

由于dom動畫有上限很低, 所以對于一些更復雜的動畫渲染, 我們可以采用 svg 或者 canvas 來代替, 以降低 dom 對瀏覽器內存的占用.

6. dom過載導致的頁面卡頓優化

一個頁面如果dom數量過多, 會產生很多問題, 一方面會使得瀏覽器內存占用過高, 導致其他不相關的js邏輯操作進行阻塞或者失效, 表現就是頁面卡頓或者無響應.

為了解決這個問題我們仍然可以使用虛擬滾動的方案或者懶加載的方案, 保證用戶當前屏幕下的dom在一個合理的范圍內, 如果是無法避免必須要展示大段dom元素, 我們可以用一個單獨的頁面來承載或者嵌入, 避免頁面其他部分宕機. 也可以對復雜dom 進行局部“冷凍”(在非激活狀態將其轉化為圖片, 激活時在逐漸渲染)

  • 產品需求層優化

產品需求層面導致的重構主要場景比如:

  • 項目國際化支持
  • 項目埋點
  • 整體項目UI升級

當然還有很到場景這里不一一介紹了. 以上列的場景都是比較常見的, 而且也有很多解決方案, 后期我會一一復盤. 我們在項目重構之前或者立項之前, 這幾種情況也是需要重點考慮的, 畢竟都是大工作量的任務.

2. 技術升級帶來的重構

技術升級帶來的重構主要有前端框架的升級, 前端設計模式的升級, 腳手架的升級. 后面兩個主要是圍繞前端技術的不斷演進, 我們采取的程序性升級, 比如從傳統的 gulp 升級到 webpack, 或者從 webpack 升級到vite 等. 前者比較常見的場景是企業中有很多老的系統, 采用的是比較傳統的技術方案如 CMD 模式 + jquery, 但是新項目采用的是 webpack + vue 或者 react, 此時我們需要更新項目情況來有選擇的做重構:

老項目只需要少量維護的情況

這種情況我們就不需要大刀闊斧的重新用新框架再寫一套了, 我們只需要在重構時, 對老項目代碼做好足夠的注釋, 類庫的封裝即可:

圖片圖片

其次我們需要做好js變量隔離, 因為傳統模式我們會在 window 頂層定義大量 var 全局變量, 作為優化的一部分, 我們可以采用閉包自執行和變量約定來規范我的js變量定義,  以防止全局的變量污染.

老項目仍然需要不斷迭代, 并且后期會有新的模塊

這種情況我們需要做評估和拆分, 如果是小模塊, 我們可以用 jquery插件 的方式快速爹迭代, 如果是頁面級別的迭代, 并且交互比較復雜, 我們可以將老系統的新頁面拆離一個子工程, 采用最新的框架(如vue)來開發迭代, 再通過 MPA 的方式和老系統做集成:

圖片圖片

老項目和新項目需要相互通信, 嵌套

這種場景下最好的方式就是用iframe + postmessage, 或者我們可以參考類似微前端的方式來管理組織不同子系統.

3. 組件庫重構

圖片圖片

對于一個包含很多子系統的復雜的項目系統來說,要想設計一個好的架構,第一步就是合理劃分組件,組件的粒度拆成的足夠細,這樣才能最大限度的復用組件。

對于任何一個復雜系統來說,最重要的就是實現錯綜復雜的業務功能,但是不同模塊或者子系統之間很多業務往往是相通的或者相似的,如果這個時候我們每個頁面對于實現類似的業務場景都去重復去寫一遍業務代碼,那完全是沒必要的,對于可維護性來說也是一種打擊,所以基于這種場景我們的 業務組件 就很有必要出場了。我們可以把功能或者需求類似的有機體封裝成一個業務組件,并對外暴露接口來實現靈活的可定制性,這樣的話我們就可以再不同頁面不同子系統中復用同樣的邏輯和功能了。

同理,不同頁面中往往有可能出現視覺或者交互完全相同或者類似的區塊,為了提高可復用性和提高開發效率,我們往往會基于基礎組件和業務組件再進行一次封裝,讓其成為一個獨立的區塊以便直接復用。

通過這樣一層層封裝,我們就逐漸搭建了一套完整的組件化系統,基于這種模式的開發往往也是一個好的前端架構的開始。但要注意一點就是高層次的組件一定會依賴低層次的組件,但是低層次的組件不可以包含高層次的組件。(聽起來有點像rudex的單向數據流法則),他們的關系就好像下圖:

圖片圖片

所以對組件庫的重構需要對我們的項目有一個本質的認知, 并對頁面進行有效的拆分, 從而達到局部的最優, 降低后續的維護成本, 并能提高整個系統甚至跨系統的復用.

圖片圖片

有關如何從0到1教你搭建前端團隊的組件系統 我之前也寫過詳細的文章, 大家可以參考學習一下.

總結

系統重構是一個持續的過程, 我們不僅要有持續學習的態度, 還需要不斷的實踐和積累優秀的最佳實踐, 這樣才能在不斷重構中讓我們的系統不斷適應復雜多變的“社會環境”.

責任編輯:武曉燕 來源: 趣談前端
相關推薦

2023-02-27 07:40:00

系統重構前端

2021-08-11 08:23:07

前端技術 iframe

2020-02-26 09:00:30

程序員技能開發者

2020-11-09 09:10:31

javascript設

2022-04-05 13:56:48

設計模式javascript

2010-12-29 09:51:29

前端基礎框架

2025-08-29 16:24:37

2022-08-08 13:24:28

整潔架構架構前端

2023-12-01 08:09:08

2011-12-01 14:06:32

2017-06-27 14:49:20

深度學習機器學習

2020-09-28 06:45:42

故障復盤修復

2021-04-21 07:37:19

JVM復盤 日志

2021-05-26 10:40:28

Vue3TypeScript前端

2020-12-08 06:20:49

前端重構Vue

2019-11-15 17:51:41

索貝超高清

2018-05-23 14:58:38

云計算

2022-03-16 07:59:54

項目語言包JSON 文件

2011-04-13 14:04:14

Java數組

2019-04-22 09:00:38

點贊
收藏

51CTO技術棧公眾號

999精品一区| 日本黄色一区| 99在线精品视频| 国产98色在线| 日日噜噜夜夜狠狠久久波多野| 亚洲我射av| 亚洲一区二区五区| 欧美日韩一区二区三区在线视频| 中文文字幕一区二区三三| 国产精品不卡| 亚洲精品美女在线观看| 欧美女同在线观看| 9999在线视频| 中文字幕免费观看一区| av一区二区三区四区电影| 香蕉免费毛片视频| 日韩欧美视频专区| 日韩成人激情视频| 国产探花在线观看视频| 亚洲天堂资源| 一区二区三区欧美亚洲| 日本一区美女| 色综合视频在线| 蜜臀久久99精品久久久久久9 | 国产精品成久久久久三级 | 亚洲一区在线电影| 亚洲人成人77777线观看| 亚洲经典一区二区三区| 奇米888四色在线精品| 午夜精品在线观看| 成年人午夜剧场| 欧美色女视频| 亚洲精品www久久久久久广东| 亚洲午夜激情影院| 亚洲mmav| 欧美日韩性视频| 91.com在线| 成人国产免费电影| 国产精品毛片久久久久久| 精品久久一区二区三区蜜桃| 99热这里只有精品99| 蜜桃av一区二区| 日韩免费在线看| 国产成人无码精品| 国色天香一区二区| 精品中文字幕视频| 国产激情无码一区二区三区| 久久一区二区三区电影| 在线观看欧美日韩国产| 在线观看福利片| 免费成人av| 亚洲第一区第二区| 少妇被狂c下部羞羞漫画| 年轻的保姆91精品| 欧美一个色资源| 日本在线观看视频一区| 天堂久久一区| 欧美另类z0zxhd电影| 五月婷婷丁香色| 欧美高清免费| 在线播放亚洲一区| 中文字幕第一页在线视频| 四虎永久精品在线| 日韩一区二区三区三四区视频在线观看| 在线观看日本一区二区| 欧美男女视频| 91精品国产综合久久久久久久久久 | 欧美大片aaaa| 久久久国产一区二区三区| 精品在线观看一区| 午夜激情久久| 九九热精品视频| 久草网在线观看| 欧美三级乱码| 欧美与黑人午夜性猛交久久久| av大片免费在线观看| 一区二区三区福利| 国产成人精品999| 中国女人真人一级毛片| 久久精品99国产精品| 亚洲综合在线小说| 俄罗斯嫩小性bbwbbw| 久久色.com| 性欧美videosex高清少妇| 免费在线看a| 亚洲一二三四在线观看| 女性女同性aⅴ免费观女性恋 | 国产欧美在线看| 99精品在线看| 91婷婷韩国欧美一区二区| 日韩精品电影网站| 国产精品久久麻豆| 午夜精品一区在线观看| 青青在线免费观看视频| 麻豆久久一区| 日韩精品在线观看网站| 娇小11一12╳yⅹ╳毛片| 午夜久久99| 日本一区二区三区四区视频| 国产精品51麻豆cm传媒| 国产激情视频一区二区在线观看 | 欧美一级成年大片在线观看 | 久久精品国产99国产| 超碰97人人在线| 黄色在线网站| 一区二区三区中文字幕| 老司机午夜av| 亚洲午夜免费| 在线看日韩欧美| 国产精品18p| 久久精品99久久久| 麻豆亚洲一区| 暧暧视频在线免费观看| 欧美乱熟臀69xxxxxx| 亚洲啪av永久无码精品放毛片 | 亚洲午夜久久久久久久| 欧美成人综合色| 免费不卡在线观看| 免费不卡亚洲欧美| 国精一区二区三区| 欧美日韩视频在线一区二区| 美女搡bbb又爽又猛又黄www| 欧美freesextv| 日本久久久久久久久久久| 99精品国产99久久久久久97| 中文字幕欧美日韩一区| 人妻精品无码一区二区三区| 午夜日韩影院| 久久这里有精品视频| 国产熟妇一区二区三区四区| 99视频热这里只有精品免费| 粉嫩av一区二区三区天美传媒| 精品欧美日韩精品| 国产丝袜一区视频在线观看| 亚洲国产精一区二区三区性色| 国产综合色精品一区二区三区| 欧美日韩在线观看一区二区三区| 久久国产精品黑丝| 欧美一区二区在线不卡| 刘亦菲国产毛片bd| 日本在线不卡视频| 日本免费一区二区三区| 无遮挡爽大片在线观看视频| 亚洲经典中文字幕| 国产成人精品亚洲男人的天堂| 国产一区二区0| 亚洲国产一区二区精品视频| 欧美成人免费电影| 亚洲欧美综合v| 久久精品视频7| 97精品电影院| 欧美性大战久久久久xxx| 久久aimee| 97人人爽人人喊人人模波多| 免费看黄网站在线观看| 亚洲成av人片观看| 这里只有精品在线观看视频| 日韩天天综合| 久久综合婷婷综合| 国偷自产一区二区免费视频 | 里番在线观看网站| 欧美精品自拍偷拍| 免费在线观看一级片| 国产精品资源网站| www.xxx麻豆| 三级小说欧洲区亚洲区| 国产成人激情视频| 老司机免费在线视频| 日韩亚洲国产中文字幕欧美| 免费看一级一片| av成人免费在线观看| 日本在线观看a| 精品国产精品| 91久久久久久久一区二区| 午夜影院免费在线| 日韩二区三区在线| 久久精品视频2| 国产精品久久久久影院色老大| 亚洲天堂av一区二区| 国内成人在线| 蜜桃av色综合| 巨大黑人极品videos精品| 大量国产精品视频| 香港一级纯黄大片| 欧美日韩中文字幕一区二区| 中文字幕av播放| 9色porny自拍视频一区二区| 手机在线免费观看毛片| 91成人免费| 久久99精品国产99久久| 日韩欧美激情| 97国产在线观看| 色三级在线观看| 欧美xxxx在线观看| 国产又粗又猛又爽又| 亚洲欧洲综合另类| 波多野结衣办公室33分钟| 久久97超碰国产精品超碰| 久艹在线免费观看| 日韩啪啪电影网| 国产美女精品久久久| 成人在线爆射| 久久久久亚洲精品| 午夜免费福利在线观看| 亚洲激情自拍图| 国产普通话bbwbbwbbw| 懂色av影视一区二区三区| 在线观看美女av| 国产亚洲综合色| 国产乱国产乱老熟300部视频| 日韩专区在线视频| 国产中文字幕乱人伦在线观看| 成人亚洲一区| 国产一区二区三区四区hd| 日韩午夜电影免费看| 91精品国产网站| 午夜影院免费在线| 深夜福利亚洲导航| 久久99久久| 亚洲成成品网站| 国内精品国产成人国产三级| 欧美在线看片a免费观看| 日韩乱码在线观看| 一区二区三区欧美在线观看| 后入内射无码人妻一区| 91丨九色porny丨蝌蚪| 亚洲色图欧美另类| 狠狠色丁香婷婷综合久久片| 免费一级特黄录像| 久热精品视频| www精品久久| 国产精品av久久久久久麻豆网| 亚洲一区二区三区色| 精品视频国产| 欧美日韩国产经典色站一区二区三区| 91精品国产一区二区| 亚洲精品电影久久久| 99免费视频观看| 超碰精品在线观看| 4438x亚洲最大成人网| www.五月婷婷.com| 一本大道久久a久久精品综合| 久久久久亚洲天堂| 一区二区三区影院| 国产1区2区3区4区| 国产一区二区三区四区| 97视频网站入口| xxx在线免费观看| 欧美寡妇偷汉性猛交| 1区2区在线观看| 久久国产视频网站| 成人午夜在线影视| 欧美老少做受xxxx高潮| 成人短视频在线| 久久艳片www.17c.com| 久久精品视频观看| 欧美成人一区二区三区电影| 成人国产免费电影| 久久久久久久久久久av| 97人人在线视频| 91福利视频网| 欧美xxx视频| 国产精品户外野外| 日本午夜精品久久久久| 91精品视频观看| 秋霞一区二区| 国内视频一区二区| 国产精品午夜一区二区三区| 视频一区二区三区在线观看| 日韩电影二区| 香蕉视频免费版| 国产精品99一区二区| 欧美牲交a欧美牲交aⅴ免费下载| 国产毛片一区| 日韩av片网站| 国产精品自在在线| www.超碰97| 中国色在线观看另类| 中文国语毛片高清视频| 伊人性伊人情综合网| 国产精品第9页| 欧美性色欧美a在线播放| 国产视频www| 亚洲国产第一页| 福利片在线看| 欧美激情精品在线| 最新欧美色图| 91精品国产综合久久久久久久久| 91精品国产乱码久久久竹菊| 快播日韩欧美| 99久久久久| 无码播放一区二区三区| 久久精品国产亚洲一区二区三区| 女同性αv亚洲女同志| 26uuu国产电影一区二区| 波多野结衣欲乱| 婷婷综合五月天| 亚洲一区精品在线观看| 亚洲国产中文字幕久久网| 成人在线高清视频| 久久久久久97| 欧美天堂一区| 久久精品久久精品国产大片| 久久中文亚洲字幕| 久久国产成人精品国产成人亚洲 | jizzjizz国产精品喷水| 精一区二区三区| 无码人妻精品一区二区三应用大全| 国产精品国产自产拍在线| 日本最新中文字幕| 欧美高清精品3d| 蜜桃免费在线| 高清欧美性猛交xxxx黑人猛交| 欧美日韩五区| 精品国产第一页| 综合天堂久久久久久久| 久久综合伊人77777麻豆最新章节| 国产a级毛片一区| 成人18视频免费69| 色婷婷精品久久二区二区蜜臂av | 国产成人a级片| 日韩高清欧美高清| 亚洲精品永久视频| 成人看片黄a免费看在线| 日韩av片在线免费观看| 成人妖精视频yjsp地址| 国产一二三在线视频| 精品一区二区免费| 亚洲黄色免费视频| 精品美女久久久久久免费| 国产视频在线观看免费| 中文字幕av一区二区| 成人软件在线观看| 亚洲国产精品久久91精品| 99精品国产99久久久久久97| 一区国产精品视频| a日韩av网址| 久草精品电影| 亚洲第一网站| 精品无码av一区二区三区| 亚洲日本韩国一区| 国产又大又长又粗| 久久综合五月天| 四虎视频在线精品免费网址| 亚洲一区二区三区乱码| 久久激情五月激情| av成人免费网站| 日韩亚洲欧美成人一区| 亚洲综合图区| 99在线视频免费观看| 国一区二区在线观看| 性活交片大全免费看| 午夜精品久久久久久久久久| 日韩一级在线播放| 5566成人精品视频免费| 一区二区三区日本久久久| 妺妺窝人体色www在线小说| aaa国产一区| caoporn国产| 国产一区二区三区日韩欧美| 日韩一区精品| 亚洲综合网中心| 国产一区二区三区观看| 性色av无码久久一区二区三区| 日韩亚洲欧美一区二区三区| 青青在线视频| 久久国产精品免费一区| 久久一区国产| 91禁男男在线观看| 日韩欧美你懂的| 暧暧视频在线免费观看| 欧美日韩国产一二| 欧美a一区二区| 粉嫩av性色av蜜臀av网站| 精品国产第一区二区三区观看体验| av在线私库| 日韩wuma| 国产在线视频一区二区| 四虎成人精品永久免费av| 亚洲色无码播放| 亚洲三级在线| 欧美 丝袜 自拍 制服 另类| 国产日韩成人精品| 亚洲国产精品国自产拍久久| 国产91成人在在线播放| 欧美r级电影| 美女久久久久久久久| 色中色一区二区| 黄色网页在线免费看| 久久精品国产美女| 91高清视频在线观看| 91久久久久久久| 亚洲高清av| 69xxx免费| 精品国产自在久精品国产| 亚洲成人va| 久久亚洲a v| 国产女人18毛片水真多成人如厕| 精品久久国产视频| 国产精品久久久久久久7电影|