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

超越異步/等待:高級工程師常用的十種 JS/TS 高級技巧

開發 前端
下面這 10 個高級 TypeScript / JavaScript 技巧,正好填上那塊空白:從?Promise 編排、內存安全緩存、二進制處理?到?異步調優,全部來自真實生產事故的復盤,而不是紙上談兵。

基礎教程來回炒冷飯、永遠停在 async/await 和“手寫一個 Promise”的階段?

下面這 10 個高級 TypeScript / JavaScript 技巧,正好填上那塊空白:從 Promise 編排、內存安全緩存、二進制處理 到 異步調優,全部來自真實生產事故的復盤,而不是紙上談兵。

這些模式曾經實打實地:

  • 把某線上服務的內存泄漏下降了 38%
  • 讓數據庫成本直接砍掉 60%
  • 把某批處理鏈路提速到原來的 3.2 倍

無論是滿天飛的“懸空 Promise”,還是一踩就炸的連接池,這些“冷門但好用”的實戰套路,足夠改變工程師構建健壯系統的方式。

1. 用 void 守住 Async IIFE:給“即刻執行”的異步一個出口

場景問題:立即執行的 async 函數(Async IIFE),如果返回的 Promise 沒有被顯式處理,經常會在啟動流程里埋下“懸空 Promise”的隱患——內存泄漏、未捕獲異常統統算在這一類頭上。

// ? 風險寫法 —— 返回了一個沒人管的 Promise
(async () => {
  await initializeApp();
})();

// ? 安全寫法 —— 明確丟棄返回值
void (async () => {
  await initializeApp();
})();

void 的作用,就是顯式丟棄 async IIFE 返回的 Promise:

  • 避免 TypeScript / Lint 一直提醒“未處理的 Promise”
  • 讓“我就是要 fire-and-forget”這件事寫在代碼語義里
  • 特別適合做:應用啟動階段的“一次性異步操作”,比如日志預熱、配置加載、緩存預熱等

凡是“需要跑,但不需要再被業務邏輯 await 回來”的異步啟動邏輯,都值得加上一層 void 作為“態度聲明”。

2. 高精度異步計時:把 console.time 的活交給 Performance API

console.time() 對粗略統計夠用,但到了需要微秒級精準的時候,就有點捉襟見肘了。 這時可以用瀏覽器/Node 都支持的 Performance API 來做異步計時。

const measureAsync = async <T>(name: string, fn: () => Promise<T>): Promise<T> => {
  performance.mark(`${name}-start`);
  try {
    return await fn();
  } finally {
    performance.mark(`${name}-end`);
    performance.measure(name, `${name}-start`, `${name}-end`);
    const [entry] = performance.getEntriesByName(name);
    console.log(`?? ${name}: ${entry.duration.toFixed(3)}ms`);
    performance.clearMarks();
  }
};

// 使用方式:
await measureAsync("DatabaseTransaction", () =>
  db.transaction(complexQuery)
);

好處不只有一條 console.log:

  • 會在 Performance 時間線里留下標記, Chrome DevTools 的 Performance 面板可以直接看到每一段異步的耗時和分布
  • 統一包裝業務操作,方便后續批量審計“哪段邏輯始終慢”
  • 不需要額外引依賴,就能拿到比較專業的性能數據

適合掛在:數據庫事務、外部接口、復雜計算、批量導入這類關鍵路徑上。

3. 把 AbortController 當“異步調度器”,而不是只給 fetch 用

AbortController 不只是給 fetch 設計的。 一旦把它當成一個通用信號器,任何 Promise 都可以掛在這根“取消總線”上。

const createCancellablePool = (promises: Promise<any>[], signal: AbortSignal) => {
  return Promise.all(
    promises.map(
      p =>
        new Promise((resolve, reject) => {
          // 監聽中斷信號
          signal.addEventListener("abort", () =>
            reject(new DOMException("Cancelled", "AbortError"))
          );

          // 正常完成
          p.then(resolve).catch(reject);
        })
    )
  );
};

// 使用方式:
const controller = new AbortController();

// 2 秒后取消全部任務
setTimeout(() => controller.abort(), 2000);

await createCancellablePool(
  [analyticsSync(), cacheHydration()],
  controller.signal
);

關鍵用例:路由切換 / 頁面跳轉。

  • 用戶離開當前頁面時, 后臺跑著的埋點上報、緩存預熱、預取數據統統可以優雅地中斷
  • 既節省流量和算力,又避免“舊頁面的異步結果,誤寫進新頁面 state”這種詭異 bug

實踐里,前端“路由級取消”基本都可以用 AbortController 搭個公共基座。

4. 用異步生成器做“懶加載 Promise 流”:一邊拉一邊算

一次性把所有 Promise 全部 await 完,再統一處理結果,是最常見也最容易吃內存的大坑。

更穩的做法:用 async function* 生成一個“懶處理的異步流”,只在需要的時候才繼續往前拉

async function* streamResults<T>(urls: string[]) {
  for (const url of urls) {
    const response = await fetch(url);
    yield (response.json() as unknown) as T;
  }
}

// 按需消費
const videoStream = streamResults<Video>(videoUrls);

for await (const video of videoStream) {
  if (shouldStopProcessing(video)) break;
  renderPreview(video);
}

這種模式的兩個隱性紅利:

  • 處理超大規模數據(比如 TB 級日志、批量視頻元信息)時,內存占用保持接近常數,不再隨著數據量飆升
  • 一旦業務條件滿足(比如“找到目標”、“錯誤達到上限”), 可以提前 break,不浪費后續網絡和計算資源

凡是之前寫成 Promise.all(urls.map(...)) 又擔心爆內存的地方,都值得升級成這樣的“異步流式消費”。

5. 玩轉 TypedArray:用二進制把 JS 的“腳本感”打掉

要和 WebAssembly、WebGL、WebSocket 二進制協議打交道時,ArrayBuffer 和各類 TypedArray 是繞不過去的。

下面這個模式,是高效拼接多個二進制塊的常見寫法:

const mergeBuffers = (buffers: ArrayBuffer[]) => {
  const total = buffers.reduce((sum, b) => sum + b.byteLength, 0);
  const result = new Uint8Array(total);

  let offset = 0;
  buffers.forEach(buffer => {
    result.set(new Uint8Array(buffer), offset);
    offset += buffer.byteLength;
  });

  return result.buffer;
};

// Bonus:零拷貝切片
const sliceWithoutCopy = (buffer: ArrayBuffer, start: number, end: number) => {
  return buffer.slice(start, end);
};

適用場景包括:

  • WebAssembly 模塊之間的內存互通
  • WebGL 紋理、頂點數據的合并和切割
  • WebSocket 二進制數據幀的組裝與拆分

相比常規的 Buffer.concat/Array.concat,TypedArray 在性能和內存可控性上更接近“系統語言”。

6. 用 Error cause 把“錯誤鏈路”串起來

異步調用層級一多,錯誤信息只看頂層 message,基本等于什么都沒看見。 好用的錯誤處理模式不應只是“拋出”,而是要把因果關系串起來

async function processOrder() {
  try {
    await validatePayment();
  } catch (err) {
    // 包裝一層業務語義,同時保留根因
    throw new OrderError("Payment failed", { cause: err });
  }
}

try {
  await processOrder();
} catch (e: any) {
  console.error("Root cause:", e.cause); // 原始校驗錯誤
  Sentry.captureException(e, { extra: { cause: e.cause } });
}

好處非常現實:

  • 日志里能看到“業務錯誤 + 技術根因”雙維度信息
  • 分布式鏈路追蹤時,可以用 cause 串起跨服務的錯誤軌跡
  • 前臺可以根據 cause 決定是否提示更多細節,后臺則留足排查信息

微服務 / Serverless 架構里,錯誤鏈幾乎是復盤事故的唯一生命線。

7. 安全枚舉屬性:別再讓原型鏈“順手帶口鍋”

在工具函數里做對象枚舉時,如果直接上 for...in 或沒想清楚原型鏈,很容易被“原型污染”陰一把。

更穩的方式,是基于 屬性描述符 做一次顯式過濾:

const getSafeKeys = (obj: object) => {
  return Object.entries(Object.getOwnPropertyDescriptors(obj))
    .filter(([_, desc]) => desc.enumerable)
    .map(([key]) => key);
};

// 原型為 null 的純凈字典
const safeDict = Object.create(null);
(safeDict as any).data = "test";

console.log(getSafeKeys(safeDict)); // ["data"]
// 不會受到原型鏈屬性影響

在安全敏感環境下(例如處理外部 JSON、模板變量、動態配置), 安全枚舉可以:

  • 避免被注入 __proto__constructor 等危險屬性
  • 確保工具函數對“自有屬性”負責,不吃原型鏈的虧

對長期維護的工具庫,先把枚舉方式換掉,是最便宜的一次安全加固

8. Promise 池并發控制:給并行任務設一個“保險絲”

一次 Promise.all 把幾百個請求丟給數據庫或外部服務,很容易一腳踩爆連接池,整條鏈路全掛。

可以用一個簡潔的 PromisePool 做“有上限的并行執行器”:

class PromisePool {
  private running = 0;
  private queue: (() => void)[] = [];

  constructor(private concurrency: number) {}

  async run<T>(task: () => Promise<T>): Promise<T> {
    return new Promise((resolve, reject) => {
      const execute = async () => {
        this.running++;
        try {
          resolve(await task());
        } catch (err) {
          reject(err);
        } finally {
          this.running--;
          this.next();
        }
      };

      this.queue.push(execute);
      this.next();
    });
  }

  private next() {
    while (this.queue.length && this.running < this.concurrency) {
      this.queue.shift()!();
    }
  }
}

// 使用方式:
const pool = new PromisePool(3); // 比如:DB 最大連接數 3
await pool.run(() => generateReport());

好處非常直白:

  • 把“每次最多并發多少個任務”固化到代碼里
  • 防止 serverless / 短生命周期函數在高峰期把下游服務打掛
  • 對第三方 API 有 QPS 限制時,也可以當“節流器”用

在多租戶、多區域、多實例場景下,PromisePool 往往是撐住系統的一條底線

9. 用 Proxy 做“可觀察 Promise”:狀態查詢不再另開一份 state

很多 UI 代碼里,為了展示“pending / done / error”狀態,會額外維護一堆布爾量,其實 Promise 自己就可以被“觀察”。

function trackPromise<T>(promise: Promise<T>) {
  const state = {
    status: "pending" as "pending" | "fulfilled" | "rejected",
    value: null as T | null
  };

  const proxy = new Proxy(promise, {
    get(target, prop) {
      if (prop === "status") return state.status;
      if (prop === "value") return state.value;
      return Reflect.get(target, prop);
    }
  });

  promise
    .then(result => {
      state.status = "fulfilled";
      state.value = result;
    })
    .catch(() => {
      state.status = "rejected";
    });

  return proxy as Promise<T> & { status: typeof state.status; value: T | null };
}

// 使用方式:
const dataPromise = trackPromise(fetch("/api/data"));

// React 組件示例:
useEffect(() => {
  dataPromise.then(data => {
    console.log(`State: ${dataPromise.status}`); // "fulfilled"
  });
}, []);

UI 側獲益:

  • 不需要再聲明一堆 isLoading / hasError 狀態變量
  • 直接從 Promise 上讀 .status 和 .value 即可渲染對應界面
  • 非 React 場景(例如終端 TUI、Node 服務日志)同樣適用

本質上就是:在不破壞 Promise 接口的前提下,給它掛上可觀測的狀態層

10. 用 WeakRef 做“自動清理”的緩存:不手動刪也不亂占內存

緩存是性能優化必備,但配不好就會變成“慢性內存泄漏”。 WeakRef + FinalizationRegistry 提供了一種“對象一被 GC,緩存就自動失效”的模式:

class TemporaryCache {
  private cache = new Map<string, WeakRef<object>>();
  private cleanup = new FinalizationRegistry((key: string) => {
    this.cache.delete(key);
  });

  set(key: string, value: object) {
    this.cache.set(key, new WeakRef(value));
    this.cleanup.register(value, key, value);
  }

  get(key: string): object | undefined {
    const ref = this.cache.get(key);
    return ref?.deref();
  }
}

// 使用方式:
const cache = new TemporaryCache();
cache.set("user:123", heavyUserObject);

// 當 heavyUserObject 被 GC 回收時
// 對應的 cache entry 會自動被移除

適合用在:

  • 大對象(圖像、DOM 快照、解析后的 AST、復雜計算結果)的短期緩存
  • 希望“內存吃緊時自動丟棄舊值”的場景
  • 需要減少“手動清理緩存”邏輯的復雜系統

這種緩存更像一種“盡力而為”的加速器:有就用,沒有也不會影響正確性。

核心收獲小結

這一系列技巧,其實勾勒出了 JS/TS 從“腳本語言”到“系統語言”的那條路:

  • 計時精度:異步測量優先用 Performance API,而不是只靠 console.time()
  • 取消模型:把 AbortController 用到 fetch 之外,統一管理異步任務的“生死”
  • 內存管理:使用 WeakRef 和 FinalizationRegistry 做不會越堆越大的緩存
  • 錯誤上下文:通過 cause 串起錯誤鏈,方便追蹤根因
  • 并發控制:用 PromisePool 控制資源,保護數據庫和第三方服務
  • 二進制效率:用 TypedArray 原生處理二進制數據,向系統級能力靠攏
  • 安全反射:用屬性描述符安全枚舉對象,防御原型污染
  • 狀態觀測:用 Proxy 讓 Promise 自帶“狀態標記”,簡化 UI 狀態機
  • 懶執行管道:用異步生成器按需處理數據流,避免“一次性吃光內存”
  • 值丟棄語義:在 fire-and-forget 場景使用 void,明確承認“這是個不會被 await 的 Promise”

這些模式不需要一次性全部上場。 只要在合適的場景,解決真實的性能和穩定性問題,JS/TS 工程就能從“能跑起來”,穩步升級到“經得起流量和時間考驗”。

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2022-08-23 08:00:00

高級工程師軟件工程師代碼庫

2023-08-11 13:25:00

JavaScript

2020-12-18 11:55:27

編程面試

2023-05-29 16:09:22

JavaScript技能瀏覽器

2015-05-11 09:38:42

.NET高級工程師面試題

2010-12-24 10:47:48

網絡規劃設計師

2018-09-20 10:55:38

數據庫順豐高級工程師

2011-01-04 11:48:04

系統分析師

2010-12-24 10:50:43

系統架構設計師

2010-11-09 10:43:14

面試

2010-12-29 11:15:51

信息系統項目管理師

2015-08-14 09:45:10

Webnode.jsH5

2017-11-06 08:52:13

管理崗位騰訊

2012-04-23 09:21:11

NetflixAmazonQCon

2010-08-30 16:18:05

2009-04-16 09:47:29

2023-09-22 11:25:51

2018-09-21 16:30:55

2022-08-26 16:21:47

數據分析工具運營
點贊
收藏

51CTO技術棧公眾號

欧美欧美欧美欧美| 成人av电影免费在线播放| 亚洲三级av在线| 激情 小说 亚洲 图片: 伦| 免费黄色电影在线观看| 成人午夜碰碰视频| 国产精品成人观看视频国产奇米| 永久av免费网站| 中文在线免费一区三区| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美日韩另类精品一区二区三区 | 蜜桃精品一区二区三区| 欧美视频精品一区| 精品国产三级a∨在线| 午夜av免费在线观看| 免费一级片91| 97香蕉超级碰碰久久免费软件| 影音先锋制服丝袜| 亚洲网址在线观看| 日本高清不卡视频| 18禁裸男晨勃露j毛免费观看| 你懂的视频在线观看| 国产精品综合av一区二区国产馆| 日本欧美在线视频| 久久亚洲成人av| 日韩成人精品一区二区| 亚洲第一偷拍网| 日本在线观看视频一区| 久久野战av| 亚洲成年人网站在线观看| 尤物国产精品| 福利视频在线导航| 92国产精品观看| 99视频免费观看| 国产欧美久久久| 日日摸夜夜添夜夜添精品视频| 欧美激情久久久久久| 女同久久另类69精品国产| 蜜臀av免费一区二区三区| 精品99一区二区三区| www.久久com| 欧洲亚洲精品| 欧美日韩免费不卡视频一区二区三区 | 国产精品影院在线观看| 麻豆亚洲av熟女国产一区二| 欧美丰满老妇| 丝袜亚洲欧美日韩综合| 色婷婷在线影院| 国产一区二区三区亚洲| 精品少妇一区二区三区在线播放 | 久久综合亚洲社区| 91大神福利视频| 日韩成人综合| 色七七影院综合| 久久久国产一级片| 人人狠狠综合久久亚洲婷婷| 国产一区二区三区网站| 国产三级黄色片| 精品少妇av| 中文字幕精品久久| 貂蝉被到爽流白浆在线观看 | 加勒比海盗1在线观看免费国语版| 日本美女在线中文版| 国产精品乱人伦中文| 亚洲一区免费看| 黄色在线免费网站| 一区二区三区自拍| 成人免费观看在线| 美女高潮视频在线看| 日韩欧美成人精品| 香蕉成人啪国产精品视频综合网| 国产成人啪精品视频免费网| 久久国产视频精品| 久久电影一区| 国产精品爽黄69天堂a| 亚洲无码久久久久| 国产成人免费xxxxxxxx| 国产精品国色综合久久| 瑟瑟在线观看| 欧美国产一区视频在线观看| 亚洲一区二区三区精品动漫| av在线播放国产| 亚洲午夜成aⅴ人片| 日韩av综合在线观看| 二吊插入一穴一区二区| 在线播放一区二区三区| 日韩黄色一区二区| 在线观看欧美理论a影院| 少妇高潮 亚洲精品| 国产av无码专区亚洲av毛网站| 国产综合色产| 国产ts人妖一区二区三区| 亚洲综合五月天婷婷丁香| 国产精品88888| 久久久99国产精品免费| 日本在线www| 亚洲一区免费在线观看| 国产超级av在线| 伊人久久大香| 亚洲精品一区二区久| 卡通动漫亚洲综合| 亚洲视频播放| 91精品视频一区| 亚洲 小说区 图片区 都市| 国产精品国产精品国产专区不蜜 | 91精品国产自产| 国产国产精品| 欧美一区二区大胆人体摄影专业网站| 91午夜交换视频| 99精品桃花视频在线观看| 亚洲图片都市激情| 僵尸再翻生在线观看免费国语| 欧美日韩视频在线一区二区| 中文在线观看免费视频| 午夜久久免费观看| 日韩av电影手机在线观看| www.久久综合| 国产精品你懂的| 欧美一级在线看| 99久久免费精品国产72精品九九| 亚洲最大中文字幕| 黄色激情视频在线观看| 国产综合色视频| 亚欧洲精品在线视频免费观看| 99久久精品免费看国产小宝寻花| 这里只有精品99re| 2019男人天堂| 国产精品婷婷| 国产麻豆乱码精品一区二区三区 | 亚洲欧洲在线观看av| 日韩欧美精品在线观看视频| 我要色综合中文字幕| 日韩一区二区福利| 国内自拍视频在线播放| 成人午夜免费电影| 国产精品av免费观看| 四虎国产精品免费久久5151| 一区二区三区四区视频| 久久精品无码av| 99精品视频一区二区三区| 成人免费在线视频播放| 欧美大片91| 日韩网站免费观看| 91片黄在线观看喷潮| 国产精品久久久久久久蜜臀 | 日韩第一页在线观看| 成人a在线观看高清电影| 亚洲日韩欧美视频一区| 亚洲av无码精品一区二区| 99久久精品一区| 人妻av中文系列| 久久精品66| 午夜精品久久久久久久99黑人| www.色婷婷.com| 亚洲一二三四久久| 中文字幕人妻一区| 黄页网站一区| 国产乱码精品一区二区三区日韩精品 | 日韩av中文字幕一区| 性欧美视频videos6一9| 日韩一级免费视频| 五月天网站亚洲| 成年人在线观看av| 天堂久久一区二区三区| 欧美午夜片在线观看| 国产高清精品一区二区三区| 羞羞污视频在线观看| 精品不卡在线视频| 国产在线观看黄色| 国产欧美日韩精品一区| 奇米视频888| 欧美片第1页综合| 精品国产一区二区三区免费 | 亚洲成人动漫精品| jizz日本免费| 日韩av在线发布| 97精品国产97久久久久久粉红| 日韩中文字幕一区二区高清99| 久久久久久久一区二区| 日本一区视频| 欧美另类变人与禽xxxxx| 麻豆疯狂做受xxxx高潮视频| 99久久婷婷国产综合精品电影| 十八禁视频网站在线观看| 日韩欧美二区| 国产精品久久波多野结衣| 日韩av一卡| 自拍偷拍亚洲区| 风流老熟女一区二区三区| 色94色欧美sute亚洲线路二| 顶臀精品视频www| 91社区在线播放| 看看黄色一级片| 亚洲精品激情| 在线观看视频黄色| 亚欧洲精品视频在线观看| 成人激情视频小说免费下载| 国产啊啊啊视频在线观看| 亚洲午夜女主播在线直播| 国产农村老头老太视频| 欧美午夜激情小视频| 国产美女久久久久久| 26uuu亚洲| 午夜影院免费观看视频| 久久永久免费| 久久久久久久9| 日韩国产在线| 精品日韩电影| 三级欧美日韩| 国产主播欧美精品| 竹内纱里奈兽皇系列在线观看| 久久大大胆人体| 久久久久久女乱国产| 欧美v国产在线一区二区三区| 天堂网一区二区| 午夜视频在线观看一区| 三级全黄做爰视频| 国产日韩欧美高清在线| 亚洲精品在线视频免费观看| 国产乱码精品一区二区三区忘忧草| 人妻少妇被粗大爽9797pw| 国产精品分类| 国产免费一区二区三区四在线播放| 国产99精品一区| 国产视频不卡| h视频久久久| 亚洲一区二区免费在线| 欧美一区=区三区| 国产精品v片在线观看不卡| 麻豆mv在线看| 韩国福利视频一区| 毛片大全在线观看| 欧美日韩国产第一页| 久久精品视频免费看| 伊人av综合网| 国产露出视频在线观看| 亚洲男人的天堂在线| 天天摸天天碰天天爽天天弄| 欧美精品一区二区三区视频| 国产浮力第一页| 69久久夜色精品国产69蝌蚪网| 中文字幕有码无码人妻av蜜桃| 日本高清视频一区二区| 一级黄色在线视频| 色婷婷国产精品久久包臀| 日产精品久久久| 精品国产福利在线| 免费av网站在线| 日韩欧美中文字幕在线观看| 影音先锋在线国产| 色噜噜久久综合| 337p粉嫩色噜噜噜大肥臀| 色婷婷亚洲婷婷| 成人黄色片在线观看| 在线一区二区观看| 中文字幕在线网站| 欧美日韩极品在线观看一区| 96亚洲精品久久久蜜桃| 91精品国产综合久久久久久久久久 | 日本精品在线免费观看| 亚洲欧美成人一区二区三区| 91成人福利视频| 亚洲图片一区二区| 久久一区二区三区视频| 91国产丝袜在线播放| 97超碰国产在线| 日韩亚洲欧美高清| 无码国产色欲xxxx视频| 亚洲欧美在线播放| 在线激情网站| 欧美激情一级二级| 色综合亚洲图丝熟| 国产精品一二三视频| 亚洲日本视频在线| 在线观看久久久久久| 香蕉视频黄色在线观看| 久久精品夜色噜噜亚洲aⅴ| 中文字幕黄色网址| 亚洲精品日韩一| 国偷自拍第113页| 欧美三级韩国三级日本一级| 国产三级午夜理伦三级| 亚洲国产精品女人久久久| 国产毛片在线| 欧美成人激情在线| 欲香欲色天天天综合和网| 国产精品专区第二| 成人h动漫精品一区二区器材| 欧美重口乱码一区二区| 亚洲激情中文在线| 女性女同性aⅴ免费观女性恋| 蜜臀久久久久久久| fc2成人免费视频| 国产精品久久久久久福利一牛影视 | 久久久久国产视频| 成人天堂yy6080亚洲高清| 亚洲精品日产aⅴ| 久草成人在线| 欧美黄网在线观看| 日韩高清国产一区在线| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 日本久久中文字幕| 亚洲日本va午夜在线电影| 日本亚洲欧洲精品| 国内一区二区三区| 韩国中文字幕av| 99re这里都是精品| 一区二区成人免费视频| 在线免费一区三区| 欧美 日韩 国产 在线| 最新日韩中文字幕| 另类专区亚洲| 国产伦精品一区二区三毛| 无需播放器亚洲| 中文字幕第80页| 91视频免费播放| 国产午夜视频在线播放| 欧美精品1区2区| 国产九色在线| 欧美一级黑人aaaaaaa做受| 日韩一二三区| 在线视频91| 日韩精品亚洲专区| 日本aaa视频| 亚洲444eee在线观看| 国产视频一区二区三| 最新中文字幕亚洲| 婷婷午夜社区一区| 欧美福利精品| 国产日韩精品视频一区二区三区 | 久久久久久91香蕉国产| 亚洲狼人综合| 一区二区三区观看| 日韩不卡在线观看日韩不卡视频| 永久免费看mv网站入口78| 性欧美疯狂xxxxbbbb| 亚洲高清精品视频| 欧美精品亚州精品| 精品国产亚洲一区二区三区在线 | 久操视频在线观看免费| 欧美日韩一区二区免费在线观看 | 午夜精品久久久久久毛片| 亚洲国产欧美不卡在线观看 | 日韩中文在线电影| 中文字幕欧美人妻精品一区| 久久久久高清精品| 亚洲大尺度在线观看| 在线视频国产日韩| 97精品国产99久久久久久免费| 日韩高清在线播放| 日韩中文字幕1| eeuss中文字幕| 欧美一区二区视频在线观看| jizz性欧美| 国产精品久久国产精品| av成人国产| 97人妻精品一区二区免费| 日本高清免费不卡视频| 亚洲s色大片| 亚洲最大福利视频| 极品av少妇一区二区| 国产草草浮力影院| 欧美小视频在线观看| 五月婷婷免费视频| 国产精品福利网站| 婷婷综合亚洲| 日本精品一二三| 欧美日韩精品二区| 高h视频在线| 99热最新在线| 裸体素人女欧美日韩| 五月婷婷综合激情网| 日韩一区二区三区在线| 成av人片在线观看www| 日韩福利影院| 精品一区二区三区视频 | av在线免费观看网| 国产色视频一区| 国语精品一区| 国产特黄级aaaaa片免| 欧美日本一区二区三区四区| 午夜伦理在线视频| 女同一区二区| 极品少妇xxxx偷拍精品少妇| 国产亚洲成人精品| 亚洲人成网站777色婷婷| 图片一区二区| 日批视频在线免费看| 亚洲欧洲成人精品av97| 香蕉久久一区二区三区| 国产免费成人av| 一区二区黄色| 四虎地址8848| 日韩精品中文字幕有码专区| 国产精品久久久久久久久免费高清| 国产资源第一页| 夜夜爽8888| 久久伊人精品一区二区三区| 亚欧洲精品视频在线观看| 手机在线国产视频|