精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

风间由美久久久| 色噜噜国产精品视频一区二区 | 久久久综合色| 日韩一区二区三区视频在线观看| 国产亚洲黄色片| 国产黄在线观看| 国产精品香蕉一区二区三区| 国产91精品久久久久| 亚洲女人毛茸茸高潮| 91在线一区| 欧美性淫爽ww久久久久无| 国产制服91一区二区三区制服| 五月婷中文字幕| 国产在线不卡一区| 国产激情久久久久| 日本熟妇毛茸茸丰满| 国产日韩欧美一区二区三区| 欧美成人性福生活免费看| 天天摸天天碰天天添| 日本高清在线观看| 中文乱码免费一区二区| 国产美女99p| 一级黄色大片免费| 久久av最新网址| 久久6免费高清热精品| 俄罗斯毛片基地| 亚洲欧美校园春色| 亚洲第一网站免费视频| 久久久久久国产精品日本| 国产第一亚洲| 欧洲中文字幕精品| 天天摸天天碰天天添| wwwww亚洲| 中文字幕一区二区三| 鲁鲁狠狠狠7777一区二区| 国产人妻精品一区二区三| 奇米色一区二区| 国产69久久精品成人看| 久久久一二三区| 羞羞色午夜精品一区二区三区| 亚洲欧美自拍一区| 日韩av一二区| 日韩动漫一区| 亚洲国产成人在线播放| 久久久久久久久久影视| 美女精品久久| 欧美一级欧美一级在线播放| 三级av免费观看| 成人午夜亚洲| 欧美三级中文字幕| 三级视频中文字幕| 国产精品4hu.www| 欧美日韩一区二区在线观看视频| 国产精品少妇在线视频| 欧美大片1688| 欧美在线观看18| 中文av一区二区三区| 国产成人精品一区二区三区视频 | 久久视频精品| 中文字幕欧美日韩| 亚洲女人久久久| 天天av综合| 美女久久久久久久| 久久精品99久久久久久| 亚洲午夜一级| 7777精品视频| 亚洲高清在线看| 老司机免费视频一区二区三区| 国产精品亚洲美女av网站| 伊人精品在线视频| 国产一区91精品张津瑜| 91成人免费在线观看| 性一交一乱一色一视频麻豆| 成人小视频免费在线观看| 久久99热只有频精品91密拍| 欧美777四色影视在线| 欧美激情一二三区| 男女激烈动态图| av免费不卡| 色综合咪咪久久| 美女在线视频一区二区| 欧美成人精品午夜一区二区| 亚洲成人亚洲激情| 亚洲久久久久久久| 亚洲成av人片乱码色午夜| 欧美激情精品久久久久久黑人 | 99国产精品| 国产91精品在线播放| 一级二级三级视频| 成人av在线网站| 四虎影院一区二区三区 | 成人妇女免费播放久久久| 国产激情无套内精对白视频| 99re成人精品视频| 亚洲精品久久区二区三区蜜桃臀| 少妇视频在线| 欧美午夜精品电影| 欧美一级大片免费看| 国产伦精品一区二区三区视频| 日韩视频永久免费观看| 天海翼一区二区| 久久99精品久久久久久国产越南| 精品伦理一区二区三区| 久操视频在线| 色悠悠久久综合| 国产人妖在线观看| 色中色综合网| 欧洲s码亚洲m码精品一区| 亚洲天堂自拍偷拍| 91麻豆精品秘密| 神马午夜伦理影院| 欧美xnxx| 亚洲国产精品一区二区三区| 亚洲怡红院在线观看| 午夜在线精品偷拍| 不卡的av一区| 黄色成人影院| 欧美日韩在线精品一区二区三区激情| av在线播放网址| 一区二区三区午夜视频| 欧洲亚洲在线视频| 日韩一区二区三区在线观看视频| **性色生活片久久毛片| 日韩网址在线观看| 91成人在线精品视频| 日韩最新中文字幕电影免费看| av黄色在线播放| 99久久精品免费| 老子影院午夜伦不卡大全| www.成人在线.com| 在线成人中文字幕| 国产99免费视频| 久久综合999| 久在线观看视频| 国产精品传媒| 久久91精品国产| 国产草草影院ccyycom| 国产精品高潮久久久久无| 国产三区在线视频| 一区二区美女| 欧美中文字幕在线播放| 日本xxxxxwwwww| 亚洲国产日韩一级| 理论片大全免费理伦片| 好看的日韩av电影| 亚洲资源在线看| 综合图区亚洲| 日韩欧美国产午夜精品| 男人操女人的视频网站| 久久精品国产99| 一区二区欧美日韩| 国产成人免费av一区二区午夜| 在线精品播放av| 一级淫片免费看| ...xxx性欧美| 国产性猛交96| 99亚洲一区二区| 欧美在线播放一区| abab456成人免费网址| 中文字幕九色91在线| 一区二区视频免费| 亚洲欧美欧美一区二区三区| 97超碰人人看| 亚洲国产二区| 欧美一区1区三区3区公司 | 精品亚洲乱码一区二区| 国内精品自线一区二区三区视频| 麻豆md0077饥渴少妇| 99亚洲乱人伦aⅴ精品| 国内精品久久影院| 天堂中文资源在线| 91久久香蕉国产日韩欧美9色| 天天舔天天操天天干| 国产精品综合一区二区三区| 男女日批视频在线观看| 亚州精品视频| 91精品国产自产在线| 免费看电影在线| 亚洲精品综合精品自拍| 亚洲图片中文字幕| 亚洲一区二区三区视频在线播放 | 能看毛片的网站| 99在线精品视频在线观看| 欧美一级日本a级v片| 4438五月综合| 5566日本婷婷色中文字幕97| 在线免费观看黄色| 亚洲白拍色综合图区| 国产免费a视频| 一区二区三区在线观看视频| 成人乱码一区二区三区av| 精品一区二区综合| 精品人妻少妇一区二区| 日韩精品一区二区久久| 国产高清一区二区三区| 在线成人视屏| 欧美国产日韩一区| 成人动漫在线免费观看| 日韩精品一区二区三区三区免费| 波多野结衣啪啪| 亚洲愉拍自拍另类高清精品| 舐め犯し波多野结衣在线观看| 国产在线视频精品一区| 久久婷婷五月综合色国产香蕉| 天天射—综合中文网| 久久久久成人精品免费播放动漫| 韩国一区二区三区视频| 国产不卡在线观看| 波多野结衣中文字幕久久| 最近2019中文字幕一页二页| 性xxxx视频| 日韩一级免费一区| 夜夜骚av一区二区三区| 色婷婷av一区| 国产成人免费观看视频 | 免费又黄又爽又猛大片午夜| 亚洲综合激情小说| 国产麻豆视频在线观看| 久久久亚洲精品一区二区三区| 亚洲国产精品第一页| 精品制服美女久久| 成年人在线看片| 午夜在线a亚洲v天堂网2018| 国产精品专区在线| 夜间精品视频| 影音先锋欧美在线| 青青草97国产精品麻豆| 久久偷窥视频| 久久99精品久久久久久欧洲站| 成人在线小视频| 欧美亚洲二区| 国产精品丝袜白浆摸在线| 亚洲一二三四| 日本成人精品在线| 伊人色综合一区二区三区影院视频| 欧美精品第一页在线播放| av网站网址在线观看| 久久久99免费视频| 天堂中文8资源在线8| 中文字幕欧美日韩在线| 国家队第一季免费高清在线观看| 亚洲精品在线视频| 亚洲色图另类小说| 日韩黄色av网站| 手机亚洲第一页| 亚洲精品在线观看www| 日韩二区三区| 一区二区三区视频观看| 国产高清视频在线播放| 一区二区三区久久精品| 五月香视频在线观看| 日韩一级黄色av| 嫩草在线视频| 九九精品视频在线| 91老司机福利在线| 91高清视频免费观看| 色是在线视频| 国产成人拍精品视频午夜网站 | 超碰97人人人人人蜜桃| 一区二区三区高清在线观看| 好吊色欧美一区二区三区视频| 日韩大片在线免费观看| 日韩欧美一区二区视频在线播放| 日韩在线第七页| 国产成人免费高清视频| 在线欧美视频| 国产一区视频免费观看| 久久精品国产久精国产| 中文字幕剧情在线观看| 成人sese在线| 手机看片福利视频| 1024国产精品| 欧美三级韩国三级日本三斤在线观看 | 无遮挡在线观看| 国产精品视频自拍| 伊人久久噜噜噜躁狠狠躁| 久久精品日产第一区二区三区精品版| 久久av免费| 麻豆md0077饥渴少妇| 夜久久久久久| 天天操狠狠操夜夜操| 成人小视频免费观看| 丰腴饱满的极品熟妇| 成人欧美一区二区三区1314| 国产精品黄色网| 51午夜精品国产| 色婷婷av一区二区三区之e本道| 日韩高清免费观看| 欧美激情午夜| 欧美在线视频一区二区| 国产一区二区高清在线| 蜜桃av久久久亚洲精品| 国产精品成人一区二区不卡| 国产日韩欧美精品在线观看| 美女看a上一区| 99久久人妻精品免费二区| 国产精品国产三级国产普通话三级 | 国产精品熟妇一区二区三区四区| 国产日韩欧美综合在线| 国产在线视频第一页| 欧美三日本三级三级在线播放| 人妻91麻豆一区二区三区| 中文字幕日韩在线播放| 999精品网| 亚洲a区在线视频| av永久不卡| 99999精品视频| 粉嫩久久99精品久久久久久夜| 日韩精品电影一区二区三区| 无码av免费一区二区三区试看 | 成人免费不卡视频| 国产乱子轮xxx农村| 色综合视频在线观看| 日本美女一级片| 不卡av在线播放| 国产一区高清| 色一情一乱一伦一区二区三区| 亚洲精品日本| 久久久久久久久久久久国产精品| 国产精品久久久久精k8| 无码人妻精品一区二区三区9厂 | 欧美精品一二三| 久久久pmvav| 26uuu久久噜噜噜噜| 亚洲精品一区二区三区在线| 影音先锋欧美资源| 久久精品国产999大香线蕉| 性猛交娇小69hd| 日韩欧美国产中文字幕| 天天插天天干天天操| 欧美激情乱人伦| 午夜视频在线观看精品中文| 日本不卡一区二区三区四区| 久热成人在线视频| 亚洲最大成人综合网| 在线视频亚洲一区| 国产在线视频网站| 国产精品久久久久久中文字| 精品中文一区| 日本黄色三级大片| 久久久久久亚洲综合| 国产精品一区二区三区四| 日韩精品极品在线观看播放免费视频| 黄频免费在线观看| 久久国产精品99久久久久久丝袜| 亚洲激情偷拍| 日本黄色片在线播放| 日韩人体视频一二区| 久久精品a一级国产免视看成人 | 女人喷潮完整视频| 97精品视频在线观看自产线路二| 日产亚洲一区二区三区| 日韩电影免费观看在线观看| 欧亚av在线| 奇米精品在线| 另类小说视频一区二区| 国产精品免费在线视频| 日韩一区二区视频| brazzers在线观看| 蜜桃导航-精品导航| 日韩精品一区第一页| 永久免费未视频| 精品美女一区二区| av综合电影网站| 污视频在线免费观看一区二区三区 | 亚洲欧美自拍另类日韩| 亚洲视频图片小说| 人妻精品无码一区二区| 欧美综合国产精品久久丁香| 色呦哟—国产精品| 国产a√精品区二区三区四区| 亚洲电影一级黄| 岛国最新视频免费在线观看| 成人免费午夜电影| 亚洲黄色影片| 久久久精品成人| 欧美mv日韩mv| 中文字幕av一区二区三区佐山爱| 一区二区三区av| www.色综合.com| 中文字幕在线观看1| 精品视频9999| 国产欧美日韩| 国产精品无码自拍| 色婷婷av一区二区| 色呦呦在线观看视频| 欧美三日本三级少妇三99| 精品一二三四区| 日本熟女一区二区| 精品国产欧美一区二区三区成人| 99久久香蕉| 亚洲精品成人在线播放| 午夜精品久久久久久久久久久| 成人免费高清在线播放| 国内精品一区二区| 激情久久五月天| 波多野结衣一二区| 久久久久久亚洲精品| 色97色成人| 女同毛片一区二区三区|