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

前端日志回?fù)葡到y(tǒng)的性能優(yōu)化實踐

開發(fā) 前端
在現(xiàn)代前端應(yīng)用中,日志回?fù)葡到y(tǒng)是排查線上問題的重要工具。然而,傳統(tǒng)的日志系統(tǒng)往往面臨著包體積過大、存儲無限膨脹、性能影響用戶體驗等問題。本文將深入分析我們在@dw/log和@dw/log-upload兩個庫中實施的關(guān)鍵性能優(yōu)化,以及改造過程中遇到的技術(shù)難點和解決方案。

一、前言

二、核心性能優(yōu)化

1. 優(yōu)化一:智能化數(shù)據(jù)庫清理機(jī)制

2. 優(yōu)化二:上傳模塊的異步加載架構(gòu)

3. 優(yōu)化三:JSZip 庫的動態(tài)引入

4. 優(yōu)化四:日志隊列與性能優(yōu)化

三、打包構(gòu)建中的技術(shù)難點與解決方案

1. 難點一:異步加載 import() 打包失敗問題

2. 難點二:process 對象未定義問題

3. 難點三:第三方依賴的 ESM/CJS 兼容性問題

四、性能測試與效果對比

五、總結(jié)

一、前言

在現(xiàn)代前端應(yīng)用中,日志回?fù)葡到y(tǒng)是排查線上問題的重要工具。然而,傳統(tǒng)的日志系統(tǒng)往往面臨著包體積過大、存儲無限膨脹、性能影響用戶體驗等問題。本文將深入分析我們在@dw/log和@dw/log-upload兩個庫中實施的關(guān)鍵性能優(yōu)化,以及改造過程中遇到的技術(shù)難點和解決方案。

核心優(yōu)化策略概覽:

我們的優(yōu)化策略主要圍繞三個核心問題:

  • 存儲膨脹問題 - 通過智能清理策略控制本地存儲大小
  • 包體積問題 - 通過異步模塊加載實現(xiàn)按需引入
  • 性能影響問題 - 通過隊列機(jī)制和節(jié)流策略提升用戶體驗

二、核心性能優(yōu)化

優(yōu)化一:智能化數(shù)據(jù)庫清理機(jī)制

問題背景

傳統(tǒng)日志系統(tǒng)的一個重大痛點是本地存儲無限膨脹。用戶長期使用后,IndexedDB 可能積累數(shù)萬條日志記錄,不僅占用大量存儲空間,更拖慢了所有數(shù)據(jù)庫查詢和寫入操作。

解決方案:雙重清理策略

我們實現(xiàn)了一個智能清理機(jī)制,它結(jié)合了兩種策略,并只在瀏覽器空閑時執(zhí)行,避免影響正常業(yè)務(wù)。

  • 雙重清理:

按時間清理: 刪除N天前的所有日志。

按數(shù)量清理: 當(dāng)日志總數(shù)超過閾值時,刪除最舊的日志,直到數(shù)量達(dá)標(biāo)。

/**
 * 綜合清理日志(同時處理過期和數(shù)量限制)
 * @param retentionDays 保留天數(shù)
 * @param maxLogCount 最大日志條數(shù)
 */
async cleanupLogs(retentionDays?: number, maxLogCount?: number): Promise<void> {
  if (!this.db) {
    throw new Error('Database not initialized')
  }
  
  try {
    // 先清理過期日志
    if (retentionDays && retentionDays > 0) {
      await this.clearExpiredLogs(retentionDays)
    }
    
    // 再清理超出數(shù)量限制的日志
    if (maxLogCount && maxLogCount > 0) {
      await this.clearExcessLogs(maxLogCount)
    }
  } catch (error) {
    // 日志清理失敗不應(yīng)該影響主流程
    console.warn('日志清理失敗:', error)
  }
}
  • 智能調(diào)度:

節(jié)流: 保證清理操作在短時間內(nèi)(如5分鐘)最多執(zhí)行一次。

空閑執(zhí)行: 將清理任務(wù)調(diào)度到瀏覽器主線程空閑時執(zhí)行,確保不與用戶交互或頁面渲染爭搶資源。

/**
 * 檢查并執(zhí)行清理(節(jié)流版本,避免頻繁清理)
 */
private checkAndCleanup = (() => {
  let lastCleanup = 0
  const CLEANUP_INTERVAL = 5 * 60 * 1000 // 5分鐘最多清理一次
  
  return () => {
    const now = Date.now()
    if (now - lastCleanup > CLEANUP_INTERVAL) {
      lastCleanup = now
      executeWhenIdle(() => {
        this.performCleanup()
      }, 1000)
    }
  }
})()

優(yōu)化二:上傳模塊的異步加載架構(gòu)

圖片

問題背景

日志上傳功能涉及 OSS 上傳、文件壓縮等重型依賴,如果全部打包到主庫中,會顯著增加包體積。更重要的是,大部分用戶可能永遠(yuǎn)不會觸發(fā)日志上傳功能。

解決方案:動態(tài)模塊加載

189KB 的包體積是不可接受的。分析發(fā)現(xiàn),包含文件壓縮(JSZip)和OSS上傳的 @dw/log-upload模塊是體積元兇,但99%的用戶在正常瀏覽時根本用不到它。

我們采取了“核心功能+插件化”的設(shè)計思路,將非核心的上傳功能徹底分離。

  • 上傳模塊分離: 將上傳邏輯拆分為獨立的@dw/log-upload庫,并通過CDN托管。
  • 動態(tài)加載實現(xiàn): 僅在用戶手動觸發(fā)“上傳日志”時,才通過動態(tài)創(chuàng)建script標(biāo)簽的方式,從CDN異步加載上傳模塊。我們設(shè)計了一個單例加載器確保模塊只被請求一次。
/**
 * OSS 上傳模塊的遠(yuǎn)程 URL
 */
const OSS_UPLOADER_URL = 'https://cdn-jumper.dewu.com/sdk-linker/dw-log-upload.js'


/**
 * 動態(tài)加載遠(yuǎn)程模塊
 * 使用單例模式確保模塊只加載一次
 */
const loadRemoteModule = async (): Promise<LogUploadModule> => {
  if (!moduleLoadPromise) {
    moduleLoadPromise = (async () => {
      try {
        await loadScript(OSS_UPLOADER_URL)
        return window.DWLogUpload
      } catch (error) {
        moduleLoadPromise = null
        throw error
      }
    })()
  }
  return moduleLoadPromise
}


/**
 * 上傳文件到 OSS
 */
export const uploadToOss = async (file: File, curEnv?: string, appId?: string): Promise<string> => {
  try {
    // 懶加載上傳函數(shù)
    if (!ossUploader) {
      const module = await loadRemoteModule()
      ossUploader = module.uploadToOss
    }
    
    const result = await ossUploader(file, curEnv, appId)
    return result
  } catch (error) {
    console.info('Failed to upload file to OSS:', error)
    return ''
  }
}

優(yōu)化三:JSZip庫的動態(tài)引入

我們避免將 JSZip 打包到主庫中,從主包中移除,改為在上傳模塊內(nèi)部動態(tài)引入,優(yōu)先使用業(yè)務(wù)側(cè)可能已加載的全局window.JSZip。

/**
 * 獲取 JSZip 實例
 */
export const getJSZip = async (): Promise<JSZip | null> => {
  try {
    if (!JSZipCreator) {
      const module = await loadRemoteModule()
      JSZipCreator = module.JSZipCreator
    }
    
    zipInstance = new window.JSZip()
    return zipInstance
  } catch (error) {
    console.info('Failed to create JSZip instance:', error)
    return null
  }
}


// 在上傳模塊中實現(xiàn)靈活的 JSZip 加載
export const JSZipCreator = async () => {
  // 優(yōu)先使用全局 JSZip(如果頁面已經(jīng)加載了)
  if (window.JSZip) {
    return window.JSZip
  }
  return JSZip
}

優(yōu)化四:日志隊列與性能優(yōu)化

圖片圖片

在某些異常場景下,日志會短時間內(nèi)高頻觸發(fā)(如循環(huán)錯誤),密集的IndexedDB.put()操作會阻塞主線程,導(dǎo)致頁面卡頓。

我們引入了一個日志隊列,將所有日志寫入請求“緩沖”起來,再由隊列控制器進(jìn)行優(yōu)化處理。

  • 限流: 設(shè)置每秒最多處理的日志條數(shù)(如50條),超出部分直接丟棄。錯誤(Error)級別的日志擁有最高優(yōu)先級,不受此限制,確保關(guān)鍵信息不丟失。
  • 批處理與空閑執(zhí)行: 將隊列中的日志打包成批次,利用requestIdleCallback在瀏覽器空閑時一次性寫入數(shù)據(jù)庫,極大減少了 I/O 次數(shù)和對主線程的占用。
export class LogQueue {
  private readonly MAX_LOGS_PER_SECOND = 50
  
  /**
   * 檢查限流邏輯
   */
  private checkRateLimit(entry: LogEntry): boolean {
    // 錯誤日志總是被接受
    if (entry.level === 'error') {
      return true
    }
    
    const now = Date.now()
    if (now - this.lastResetTime > 1000) {
      this.logCount = 0
      this.lastResetTime = now
    }
    
    if (this.logCount >= this.MAX_LOGS_PER_SECOND) {
      return false
    }
    
    this.logCount++
    return true
  }
}

空閑時間處理機(jī)制:

export function executeWhenIdle(callback: () => void, timeout: number = 2000): void {
  if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {
    window.requestIdleCallback(() => {
      callback()
    }, { timeout })
  } else {
    setTimeout(callback, 50)
  }
}

三、打包構(gòu)建中的技術(shù)難點與解決方案

在改造過程中,我們遇到了許多與打包構(gòu)建相關(guān)的技術(shù)難題。這些問題往往隱藏較深,但一旦出現(xiàn)就會阻塞整個開發(fā)流程。以下是我們遇到的主要問題和解決方案:

難點一:異步加載 import() 打包失敗問題

問題描述

await import('./module')語法在 Rollup 打包為 UMD 格式時會直接報錯,因為 UMD 規(guī)范本身不支持代碼分割。

// 這樣的代碼會導(dǎo)致 UMD 打包失敗
const loadModule = async () => {
  const module = await import('./upload-module')
  return module
}

錯誤信息:

Error: Dynamic imports are not supported in UMD builds
[!] (plugin commonjs) RollupError: "import" is not exported by "empty.js"

解決方案:inlineDynamicImports 配置

通過在 Rollup 配置中設(shè)置inlineDynamicImports: true來解決這個問題:

// rollup.config.js
export default {
  input: 'src/index.ts',
  output: [
    {
      file: 'dist/umd/dw-log.js',
      format: 'umd',
      name: 'DwLog',
      // 關(guān)鍵配置:內(nèi)聯(lián)動態(tài)導(dǎo)入
      inlineDynamicImports: true,
    },
    {
      file: 'dist/cjs/index.js',
      format: 'cjs',
      // CJS 格式也需要這個配置
      inlineDynamicImports: true,
    }
  ],
  plugins: [
    typescript(),
    resolve({ browser: true }),
    commonjs(),
  ]
}

配置說明

  • inlineDynamicImports: true會將所有動態(tài)導(dǎo)入的模塊內(nèi)聯(lián)到主包中
  • 這解決了 UMD 格式不支持動態(tài)導(dǎo)入的問題

難點二:process對象未定義問題

問題描述

打包后的代碼在瀏覽器環(huán)境中運行時出現(xiàn)process is not defined錯誤:

ReferenceError: process is not defined
    at Object.<anonymous> (dw-log.umd.js:1234:56)

這通常是因為某些 Node.js 模塊或工具庫在代碼中引用了process對象,而瀏覽器環(huán)境中并不存在。

解決方案:插件注入 process 對象

我們使用@rollup/plugin-inject插件,在打包時向代碼中注入一個模擬的process 對象,以滿足這些庫的運行時需求。

  • 創(chuàng)建process-shim.js文件提供瀏覽器端的process實現(xiàn)。
  • 在rollup.config.js中配置插件:
// rollup.config.js
import inject from '@rollup/plugin-inject'
import path from 'path'


export default {
  // ... 其他配置
  plugins: [
    // 注入 process 對象
    inject({
      // 使用文件導(dǎo)入方式注入 process 對象
      process: path.join(__dirname, 'process-shim.js'),
    }),
    typescript(),
    resolve({ browser: true }),
    commonjs(),
  ]
}

創(chuàng)建 process-shim.js 文件:

// process-shim.js
// 為瀏覽器環(huán)境提供 process 對象的基本實現(xiàn)
export default {
  env: {
    NODE_ENV: 'production'
  },
  browser: true,
  version: '',
  versions: {},
  platform: 'browser',
  argv: [],
  cwd: function() { return '/' },
  nextTick: function(fn) {
    setTimeout(fn, 0)
  }
}

高級解決方案:條件注入

為了更精確地控制注入,我們還可以使用條件注入:

inject({
  // 只在需要的地方注入 process
  process: {
    id: path.join(__dirname, 'process-shim.js'),
    // 可以添加條件,只在特定模塊中注入
    include: ['**/node_modules/**', '**/src/utils/**']
  },
  // 同時處理 global 對象
  global: 'globalThis',
  // 處理 Buffer 對象
  Buffer: ['buffer', 'Buffer'],
})

難點三:第三方依賴的ESM/CJS兼容性問題

問題描述

某些第三方庫(如 JSZip、@poizon/upload)在不同模塊系統(tǒng)下的導(dǎo)入方式不同,導(dǎo)致打包后出現(xiàn)導(dǎo)入錯誤:

TypeError: Cannot read property 'default' of undefined

解決方案:混合導(dǎo)入處理

// 處理 JSZip 的兼容性導(dǎo)入
let JSZipModule: any
try {
  // 嘗試 ESM 導(dǎo)入
  JSZipModule = await import('jszip')
  // 檢查是否有 default 導(dǎo)出
  JSZipModule = JSZipModule.default || JSZipModule
} catch {
  // 降級到全局變量
  JSZipModule = (window as any).JSZip || require('jszip')
}


// 處理 @poizon/upload 的導(dǎo)入
import PoizonUploadClass from '@poizon/upload'


// 兼容不同的導(dǎo)出格式
const PoizonUpload = PoizonUploadClass.default || PoizonUploadClass

在 Rollup 配置中加強(qiáng)兼容性處理:

export default {
  plugins: [
    resolve({
      browser: true,
      preferBuiltins: false,
      // 解決模塊導(dǎo)入問題
      exportConditions: ['browser', 'import', 'module', 'default']
    }),
    commonjs({
      // 處理混合模塊
      dynamicRequireTargets: [
        'node_modules/jszip/**/*.js',
        'node_modules/@poizon/upload/**/*.js'
      ],
      // 轉(zhuǎn)換默認(rèn)導(dǎo)出
      defaultIsModuleExports: 'auto'
    }),
  ]
}

四、性能測試與效果對比

打包優(yōu)化效果對比:

圖片

五、總結(jié)

通過解決這些打包構(gòu)建中的技術(shù)難點,我們不僅成功完成了日志系統(tǒng)的性能優(yōu)化,還積累了工程化經(jīng)驗。這些實踐不僅帶來了日志系統(tǒng)本身的輕量化與高效化,其經(jīng)驗對于任何追求高性能和穩(wěn)定性的前端項目都有部分參考價值。

責(zé)任編輯:武曉燕 來源: 得物技術(shù)
相關(guān)推薦

2021-09-17 18:40:55

京東mPaaS移動端

2014-02-26 11:01:28

日志優(yōu)化系統(tǒng)日志

2022-06-27 09:48:15

H5移動互聯(lián)網(wǎng)頁面性能

2020-03-23 15:15:57

MySQL性能優(yōu)化數(shù)據(jù)庫

2020-10-16 10:40:39

前端性能可視化

2022-05-17 09:02:30

前端性能優(yōu)化

2022-11-16 12:03:13

性能優(yōu)化前端

2020-10-16 09:00:12

前端開發(fā)技術(shù)

2019-11-01 14:00:58

前端性能優(yōu)化代碼

2010-07-06 09:07:09

2020-07-17 19:55:50

Vue前端性能優(yōu)化

2025-06-12 02:22:00

Netflix前端系統(tǒng)

2022-03-02 11:13:50

Web前端開發(fā)

2021-07-05 14:55:28

前端優(yōu)化圖片

2019-07-29 10:39:39

前端性能優(yōu)化緩存

2022-09-13 12:56:28

前端優(yōu)化

2022-10-28 13:41:51

字節(jié)SDK監(jiān)控

2021-09-02 10:10:59

技術(shù)VS Code實踐

2011-08-11 09:45:25

2021-09-24 14:02:53

性能優(yōu)化實踐
點贊
收藏

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

亚洲不卡在线播放| 国产一区二区不卡视频在线观看 | 精品1卡二卡三卡四卡老狼| 久色视频在线| 精品一区亚洲| 国产精品久久久久久妇女6080| 98视频在线噜噜噜国产| 日av中文字幕| 无码人妻精品一区二| 欧美jizz19性欧美| 亚洲综合免费观看高清在线观看| 97在线免费视频| 香蕉视频色在线观看| 亚洲va综合va国产va中文| 无码精品在线观看| 不卡中文一二三区| 国产成人精品1024| 中文字幕亚洲自拍| 免费看黄色一级大片| 免费在线视频观看| 日本成人不卡| 亚洲国产午夜| 在线观看91视频| 女女同性女同一区二区三区91| 日本少妇裸体做爰| 精品国产导航| 精品久久久久久亚洲国产300| 亚洲91精品在线观看| 女同性αv亚洲女同志| av免费网站在线| 国产美女精品人人做人人爽| 一区二区三区四区中文字幕| 中文字幕日韩在线观看| 亚洲精品天堂成人片av在线播放 | 色偷偷久久一区二区三区| 国产美女91呻吟求| 免费黄视频在线观看| 欧美日韩经典丝袜| 免费不卡在线观看| 亚洲美女av在线| 国产美女三级视频| 黄色一级大片在线免费看国产| 国产一区视频在线观看免费| 国产99精品国产| 99re视频精品| 美女999久久久精品视频| 色婷婷综合在线观看| 欧美xxxx免费虐| 99久久久无码国产精品| 热久久免费视频精品| 免费黄色a级片| 超碰免费在线播放| 波多野结衣中文字幕一区二区三区 | 亚洲人成网站色在线观看| 91福利视频导航| 日韩黄色三级视频| 久久不卡国产精品一区二区| 欧美日韩一区二区三区高清| 成人在线免费观看网址| 少妇av一区二区| 伊人久久大香线蕉av超碰演员| 亚洲一区影音先锋| 国产精品日韩高清| 午夜影院免费在线观看| 成人精品动漫一区二区三区| 一区二区在线观看av| 91中文在线视频| 久久av无码精品人妻系列试探| 蜜桃成人精品| 99久久精品国产导航| 欧美成人sm免费视频| 中文文字幕文字幕高清| 欧美精品videossex少妇| 韩国av一区二区三区在线观看| 一道本无吗dⅴd在线播放一区| 久国产精品视频| 香港三日本三级少妇66| 日韩av一级片| 欧美超级免费视 在线| 强迫凌虐淫辱の牝奴在线观看| 国内老司机av在线| 高清免费成人av| 国产成人精品电影| 亚洲 激情 在线| 中文字幕第69页| 影音先锋国产资源| 欧美日韩亚洲一区三区| 精品国产一区二区三区忘忧草| 国产精品日韩三级| 欧美亚洲精品在线观看| 99热这里只有精品8| 日韩av网站电影| 日韩av片免费观看| 黄网在线免费看| 成人av电影在线观看| 91av国产在线| 久久久精品99| 91精品精品| 国产午夜精品一区理论片飘花| 在线视频日韩一区| 97视频在线观看网站| 成人丝袜高跟foot| 91免费视频网站| 欧美人一级淫片a免费播放| 欧美午夜a级限制福利片| 日韩中文理论片| 亚洲高潮女人毛茸茸| 福利一区三区| 欧美日本在线看| 国产精品对白刺激久久久| 久久精品视频国产| 先锋影音国产精品| 亚洲精品99久久久久中文字幕| 青娱乐国产精品视频| 免费一二一二在线视频| 亚洲一区二区三区精品在线| 久久久久久久久影视| √天堂资源地址在线官网| 久久综合色综合88| 精品中文字幕人| 日本韩国在线观看| 日本强好片久久久久久aaa| 欧美高跟鞋交xxxxhd| 久久久视频6r| 嫩呦国产一区二区三区av| 欧美日本高清视频在线观看| 最新国产黄色网址| 国产精品一区二区三区www| 色婷婷综合久久久久中文一区二区 | 精品久久综合| 精品国产乱码久久久久久夜甘婷婷| 善良的小姨在线| 97久久香蕉国产线看观看| 欧美性猛交xxxx乱大交极品| 黄色一级片播放| 91九色在线看| 亚洲欧美视频在线观看| 日本婷婷久久久久久久久一区二区| 国产手机精品视频| 日本欧美一区二区三区乱码| 国产精品久久久久久久av大片 | www.涩涩爱| 日韩av系列| 日韩欧美高清dvd碟片| 午夜久久久精品| 欧美xxx性| 欧美午夜电影在线播放| 欧美 日本 亚洲| gogo高清午夜人体在线| 亚洲毛片av在线| 国产人妻777人伦精品hd| 涩涩涩视频在线观看| 亚洲国产精品久久人人爱蜜臀 | 欧美24videosex性欧美| 中文字幕一区二区三区av| 日本人妻伦在线中文字幕| 国产黄网站在线观看| 欧美激情中文不卡| www.国产亚洲| 五月婷婷视频在线观看| 天天操天天色综合| 国产一二三四在线视频| 另类中文字幕国产精品| 欧美精品电影在线播放| 特级丰满少妇一级| 波多野结衣先锋影音| 成人看片网页| 色婷婷精品久久二区二区蜜臂av| gogogo高清免费观看在线视频| 日韩一二三区在线观看| 亚洲午夜久久久久久久久电影院| 欧美 丝袜 自拍 制服 另类| 激情久久99| 欧美精品在线一区二区| 国产黄色网址在线观看| 亚洲女同中文字幕| 不卡av在线播放| 欧美三级视频网站| 一区二区不卡| 欧美国产日韩一区二区| 一区二区视频免费| 2023国产精品视频| 视频在线观看成人| xxxcom在线观看| 精品久久中文字幕| 亚洲人成色77777| 精品免费av一区二区三区| 日本乱人伦aⅴ精品| 奇米影音第四色| 女同另类激情重口| 亚洲精品一区二区在线| 欧美黄片一区二区三区| 日日夜夜精品视频免费| 国产精品一区二区久久国产| 久久久黄色大片| 久久综合网络一区二区| 亚洲免费电影在线观看| 国产毛片欧美毛片久久久| 亚洲日产国产精品| 国产精品99久久99久久久二8| 国产成a人亚洲精v品无码| k8久久久一区二区三区| 亚洲mv在线看| 原纱央莉成人av片| 亚洲国产精品中文| 国产在线综合视频| 日韩不卡一二三区| 欧美综合激情| 一本大道色婷婷在线| 亚洲第一中文字幕| 国产在线观看免费视频今夜| 国产成人8x视频一区二区 | 日本a一级在线免费播放| 亚洲精品一二三四区| www黄色日本| 电影一区二区三区久久免费观看| 久久国产一区二区三区| 97精品人妻一区二区三区香蕉| 成人免费视频app| av女优在线播放| 高潮按摩久久久久久av免费| 欧美顶级少妇做爰| 激情五月深爱五月| 免费看黄色91| 亚洲一区二区三区精品动漫| 欧美成人家庭影院| 久久精品视频在线| 国产精品特级毛片一区二区三区| av电影天堂一区二区在线| 中文字幕久久综合| 四虎精品永久免费| 久久成人一区二区| 亚洲产国偷v产偷v自拍涩爱| 亚洲一区二区三区四区五区黄| 性高潮免费视频| 91精品啪在线观看国产18| 亚洲专区国产精品| 欧美日韩经典丝袜| 亚洲男人的天堂在线| 做爰视频毛片视频| 亚洲视频一二三| 一本岛在线视频| 亚洲精品播放| 国产精品视频xxx| 久久久久久青草| 动漫精品一区二区| www.51色.com| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产欧美一区二区三区在线看| 熟妇人妻一区二区三区四区| 色综合天天综合狠狠| 男女男精品视频网站| 日韩中文字幕亚洲一区二区va在线 | 成年人在线观看视频免费| 在线视频亚洲专区| 成人欧美在线视频| 国产婷婷视频在线| 亚洲国产精品推荐| 亚洲天堂avav| av在线app| 欧美日韩精品一二三区| 先锋影音av在线| 成人性生交大片免费看中文网站| 欧美亚洲另类色图| 午夜激情久久| 久久精品99久久| 一区二区电影免费观看| 久久精品国产精品亚洲| 桃花色综合影院| 欧美一级免费大片| 国产三级精品三级在线观看| 久久久久久一级片| 国产香蕉精品视频| 麻豆一区二区三| 欧美二区在线视频| 亚洲二区三区不卡| yellow视频在线观看一区二区| 亚洲精品一区二区口爆| 色婷婷av久久久久久久| 久草视频中文在线| bt7086福利一区国产| 无码人妻h动漫| 国产精品激情电影| 正在播放一区| 午夜视频一区二区在线观看| 国产精品丝袜白浆摸在线| 理论不卡电影大全神| 欧美成人第一页| 日本午夜在线| 欧美视频中文字幕| 永久久久久久久| 不卡免费追剧大全电视剧网站| 午夜诱惑痒痒网| 欧洲亚洲一区二区三区| 青草成人免费视频| 久草在线视频福利| 欧美成人免费全部| 四虎国产精品永远| 精品对白一区国产伦| 国产av精国产传媒| 3d动漫精品啪啪| 制服.丝袜.亚洲.中文.综合懂色| 亚洲一区二区成人在线观看| 国产色无码精品视频国产| 国产精品人妖ts系列视频| aaaaa级少妇高潮大片免费看| av一本久道久久综合久久鬼色| 337p日本欧洲亚洲大胆张筱雨| 国产美女娇喘av呻吟久久| 色呦色呦色精品| 欧美专区在线| 日本中文字幕一级片| 正在播放日韩欧美一页| 久久偷窥视频| 日韩成人视屏| 国产精品久久久久久久久久东京| 精品无人乱码一区二区三区 | 可以在线观看av的网站| 亚洲国产毛片aaaaa无费看 | 国产精品无码网站| 91亚洲资源网| 法国空姐电影在线观看| 国产精品1区2区| 国产在线观看免费播放| 秋霞成人午夜伦在线观看| 激情 小说 亚洲 图片: 伦| 老妇喷水一区二区三区| 97在线国产视频| 亚洲涩涩av| 欧美日韩综合精品| 另类春色校园亚洲| 久久久久久久免费| 精品中文视频| 国产精品一区二区久久久久| 日韩伦理在线一区| 欧美精品www| 三级在线观看视频| 国产精品三级网站| 二吊插入一穴一区二区| 国产一区二区丝袜| aaa国产精品视频| 久久精品人人做人人爽电影| 精品日产免费二区日产免费二区| 亚洲一区二区精品在线| 欧美日韩一二三四| 欧美人与性禽动交精品| 91麻豆精品国产91久久久平台| 欧美在线视频一区二区三区| 久久91麻豆精品一区| 久久久久无码国产精品一区| 日韩欧美一区二区三区免费看| 日韩欧美在线观看强乱免费| 亚洲深深色噜噜狠狠爱网站| 在线码字幕一区| 99九九热只有国产精品| 欧美成人三级在线视频| 青草av.久久免费一区| 午夜欧美福利视频| 国产a区久久久| 久久天天躁日日躁| 香蕉视频黄在线观看| 国产婷婷成人久久av免费高清| 日韩美女网站| 久久久精品视频在线观看| 8x8ⅹ拨牐拨牐拨牐在线观看| 国产精品久久久久久久久久久新郎 | 久久成人av少妇免费| 中文字幕av不卡在线| 九九国产精品视频| 精品国产av色一区二区深夜久久| 国产精品久久99| 私库av在线播放| 欧美视频日韩视频在线观看| 91久久精品无码一区二区| 日韩国产激情在线| 懂色一区二区三区| 午夜精品视频网站| 都市激情亚洲综合| 成人av男人的天堂| 日韩成人一级| 婷婷精品国产一区二区三区日韩| 四虎成人精品永久免费av九九| 性做爰过程免费播放| 日韩精品1区2区3区| 中文字幕第17页| 久久日韩粉嫩一区二区三区| 国产一级一级片| 91精品国产91久久久久久一区二区 | 国产一级大片免费看| 蜜桃精品视频在线| 免费高清视频在线观看| 国产精品美女久久久久久久久久久| 亚洲欧美在线视频免费| 国产午夜久久久久| 永久免费看mv网站入口78| 一区二区三区在线免费| 97久久久久久久| 亚洲精品456在线播放狼人| 羞羞的网站在线观看| 92福利视频午夜1000合集在线观看|