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

一行代碼提升 30%+ TS 類型檢查性能

開發(fā) 前端
先說結論,強烈建議在所有復雜泛型場景中,顯式提供泛型參數(shù),這能夠非常顯著降低泛型類型推斷的復雜度,進而提升 TS 性能,幅度甚至可能達到50%!

前言

先說結論,強烈建議在所有復雜泛型場景中,顯式提供泛型參數(shù),這能夠非常顯著降低泛型類型推斷的復雜度,進而提升 TS 性能,幅度甚至可能達到50%!例如,在使用 @douyin-fe/semi 庫的 Form 組件時:

  • 未提供泛型參數(shù):

圖片圖片

圖片圖片

  • 提供泛型參數(shù):

圖片圖片

圖片圖片

在未顯式提供泛型參數(shù)時,構建耗時大約為2.3s,其中有 850ms 消耗在 checkSourceFile 節(jié)點上;而主動提供泛型參數(shù)后,構建總耗時下降至 1.5s,降幅達到 34%,而這僅僅只需要修改一行代碼即可實現(xiàn)!

那么,為什么會有如此巨大的提升呢?接下來,我會詳細總結整個分析排查問題的過程與工具,以及后續(xù)在工程層面,可以做那些事情防止再次出現(xiàn)同類問題。

TS Check 性能排查方法

工欲善其事必先利其器,首先,我們需要學習如何獲取 TSC 執(zhí)行的性能數(shù)據(jù),而這需要用到兩個 TSC 命令行參數(shù):

  • --generateTrace:用于 trace-xxx.json 文件,包含 TSC 編譯過程中關鍵節(jié)點的性能數(shù)據(jù),可使用 SpeedScope 工具可視化分析:

圖片圖片

  • --generateCpuProfile:用于生成詳細的 CPU 執(zhí)行堆棧信息,同樣可以使用 SpeedScope 工具做可視化分析:

圖片圖片

關于這兩個參數(shù)更詳細的解釋,可參考 TS 官方文檔 Performance Tracing。回到項目中,使用這兩個參數(shù)執(zhí)行類型檢查,并將結果寫出到 ts-trace 目錄:

tsc -b tsconfig.build.json --generateTrace ./ts-trace --generateCpuProfile ./ts-trace/ts.cpuprofile --force

之后打開 SpeedScope 工具,選擇相應文件即可。順便提一下, SpeedScope 是我用過最好的 CPU Profile 分析工具,比 TS 文檔推薦 chrome://tracing 效率高很多,建議優(yōu)先使用。

我個人的使用經驗:先看 trace-xxx.json 文件,再看 cpuprofile 文件。因為 trace-xxx.json 信息更聚焦一些,相對能直觀發(fā)現(xiàn)問題,例如上圖中 checkSourceFile 節(jié)點明顯比其他節(jié)點長很多,肉眼可見是一個異常點;而 cpuprofile 包含了 TSC 執(zhí)行過程中大部分調用堆棧,信息更全,更適合深入分析執(zhí)行細節(jié),定位問題的具體原因,例如識別出上述 trace-xxx.json 中的 checkSourceFile 異常點后,可在 cpuprofile 中找到對應函數(shù)執(zhí)行堆棧,向下分析具體性能卡點。

問題分析

基于上述生成的數(shù)據(jù),我們可以初步定位到 checkExpression 節(jié)點有明顯的性能問題,在示例中消耗 607ms,占比 25% 之久:

圖片圖片

根據(jù)堆棧信息中 path/pos 等字段,可定位到問題出現(xiàn)在下圖第 13 行:

圖片圖片

據(jù)此可初步推斷,tsc 在檢查表達式 <Form onSubmit={handleSubmit}> 語句時存在較大的性能損耗,而這段代碼與其他代碼最大的差異在于:1. 它用了 Form 元素;2. 它沒有顯式聲明 Form 泛型參數(shù)。

至此,答案就大概可以“猜”出來了,試著補上泛型參數(shù),這段 checkExpression 的時間直接從 607ms 降低到 79ms:

圖片圖片

原理淺析

到這里,已經初步找到這個問題的表征答案,但更重要的是:為什么一個泛型參數(shù)的缺失會導致如此嚴重的性能問題?只有透徹地理解性能卡點的底層原理,才能推導出正確且完善的解決方案,而要分析問題的根因,有兩種方法,一是從頭開始仔細閱讀并理解源碼,但 TS 項目太大,成本太高;二是分析上述 --generateCpuProfile 參數(shù)所生成的 Cpu 調用棧文件,理解這部分耗時操作里都做了那些事情,這明顯性價比要高出許多。

所以,接下來使用 SpeedScope 打開 CpuProfile 文件后,根據(jù)時間定位到 checkExpression 對應的 CPU 堆棧節(jié)點:

圖片圖片

可以看到,這下面有一個非常長的函數(shù)堆棧列表,特別是遞歸出現(xiàn)了許多次 checkExpression、 instantiateXXX 等函數(shù),性能問題應該就出現(xiàn)在這里。作為對比,補充泛型類型后,相應調用堆棧簡化為:

圖片圖片

仔細對比發(fā)現(xiàn),兩者邏輯分叉點主要出現(xiàn)在 chooseOverload 函數(shù)上:

  • 優(yōu)化前:

圖片圖片

  • 優(yōu)化后:

圖片圖片

接著嘗試斷點調試 chooseOverload 函數(shù),排查過程比較繁瑣,就不展示了,直接拋結論,該函數(shù)大致做了下面這些事情:

  1. TS 執(zhí)行過程中,遇到泛型定義時調用 chooseOverload,函數(shù)內判斷是否傳入泛型參數(shù)(下圖 75424 行);若參數(shù)為空,則調用 inferJsxTypeArguments 推斷類型(下圖 75436 行);

圖片圖片

  1. 而 inferJsxTypeArguments 內部遍歷 jsx 定義的 attributes ,逐步校驗各個組件 Props 的類型定義;

圖片圖片

  1. 當遇到 onValueChange、onSubmit 等函數(shù)類型的 props 時,TS 內部需要進一步推斷這類函數(shù)簽名,最終走到 checkFunctionExpressionOrObjectLiteralMethod 函數(shù);
  2. 而 checkFunctionExpressionOrObjectLiteralMethod 內部會遞歸調用多次 checkExpression 函數(shù),經過一段非常復雜的計算后,最終推斷出函數(shù)簽名,之后再與 Form 元素的 Value 泛型對比檢查類型匹配度。

由此可推斷,此處性能卡點主要出現(xiàn)在 Form 元素的 Value 泛型推斷,以及對傳遞給 Form 元素的各類 onValueChange 等函數(shù)類型的 Props 的泛型推斷與檢測上,只需要簡單提供 Value 泛型,即可繞過許多推斷步驟,進而提升效率。

需要注意的是,這一問題目前只在 Form 組件出現(xiàn),其它多數(shù)帶泛型參數(shù)的簡單組件即使觸發(fā)了推斷邏輯,由于類型邏輯相對簡單許多,校驗鏈路較短,并不會導致性能問題。

圖片圖片

另外還需要注意,chooseOverload 函數(shù)中還包含了另一層用于處理函數(shù)重載的循環(huán)邏輯:

圖片圖片

實測發(fā)現(xiàn),函數(shù)重載數(shù)量越多,參數(shù)形態(tài)越復雜,此處性能越差,例如下面例子中:

圖片圖片

圖片圖片

這里的卡點在于 I18nKeysNoOptionsType 是一個非常長達 12000+ 的靜態(tài)字符串數(shù)組,在上述實例中,TS 需要循環(huán)校驗 t 函數(shù)的重載簽名,并在每次校驗時遍歷驗證這 12000+ 靜態(tài)字符串,兩相疊加導致性能成本居高不下:

圖片圖片

防劣化

到此,我們已經完全可以確定問題根因出在源碼中泛型參數(shù)缺失,導致 Typescript 需要做 復雜泛型類型的推導與檢查,引發(fā)性能問題,只需借助 Typescript 的 Performance Trace 找出這類性能卡點,補充相應泛型參數(shù)即可。但更重要的是,修復存量問題后,后續(xù)如何防止這類問題再次出現(xiàn)呢?有幾種方案:

  • 文檔化,約束代碼規(guī)范;
  • ESLint 檢測并攔截特定模式代碼;
  • CI 階段分析 TS 性能數(shù)據(jù),攔截導致長任務的代碼;

首先,最簡單也是成本最低的方法,可以將相關規(guī)則提升為團隊開發(fā)規(guī)范,明確要求開發(fā)者在那些情況下必須補充完備的泛型參數(shù),但這種方式本質上屬于“軟性約束”,執(zhí)行與否完全取決于開發(fā)者的狀態(tài),考慮到人類智能的隨機性,最終效果往往并不理想,更好的方式是使用自動化工具在 CI 階段自動檢測問題實現(xiàn)更“強”的約束。

具體來說,可以選擇編寫 ESLint 規(guī)則,限定某些 Case 必須提供泛型參數(shù),例如:

import { Rule } from 'eslint';

export const enforceTsGenericRule: Rule.RuleModule = {
  meta: {
    type: 'problem',
    // ...
  },
  create(context) {
    return {
      JSXOpeningElement(node) {
        if (
          node.name.type === 'JSXIdentifier' &&
          node.name.name.toLowerCase() === 'form'
        ) {
          const hasGeneric =
            node.typeParameters && node.typeParameters.params.length > 0;
          if (!hasGeneric) {
            context.report({
              node,
              message: 'Form elements must have generic parameters.',
            });
          }
        }
      },
    };
  },
};

但問題在于,這種方式必須先提前找出所有可能引發(fā)性能劣化問題的代碼模式,整體僵化不靈活,容易導致遺漏或誤傷,相對還不夠極致。

更好的方式是在 CI 環(huán)境增量分析 TS 執(zhí)行性能數(shù)據(jù),分析并攔截導致長任務的代碼,實現(xiàn)邏輯:

  1. CI 環(huán)境中執(zhí)行 tsc -b tsconfig.build.json --generateTrace ./ts-trace,生成性能數(shù)據(jù),注意不要加 --force 參數(shù);

圖片圖片

  1. 遍歷 trace-xx.json 文件,找到所有 name === "checkExpress" && dur > threshold 的節(jié)點,取出對應 path 與 pos 數(shù)值;
  2. 根據(jù) path 與 pos 數(shù)值定位對應代碼行, 調用 git diff source-branch...target-branch 取得增量內容,之后判斷長任務對應代碼行是否為本次更新代碼,若命中則調用 CI 接口進行攔截。

總結

對于大規(guī)模項目而言,Typescript 很好,我認為幾乎是必選技術棧之一,并且有必要在開發(fā)環(huán)境、CI/CD 各個環(huán)節(jié)設置卡口,驗證代碼的正確性,其本身性能也做的非常極致,但架不住大型項目代碼量上來之后,任務復雜度過高導致類型檢測成本也居高不下,此時就必須從代碼本身著手,做好各類性能優(yōu)化,保證時間復雜度在合理范圍內。

但這個方向資料并不多,很少能找到現(xiàn)成且有效的解決方案,多數(shù)時候需要自己摸索。過去這段時間,我們團隊也做了許多這方面的嘗試,除了本文提到的這種顯式定義泛型參數(shù)的方法外,其他值得分享的性能優(yōu)化手段包括:

  • 使用 tsc 緩存,復用舊的結果;
  • 使用 ts project references,實現(xiàn)分片檢測;
  • 正確配置 watchOption 屬性,減少文件監(jiān)聽復雜度;
責任編輯:武曉燕 來源: Tecvan
相關推薦

2016-12-02 08:53:18

Python一行代碼

2025-02-12 09:55:01

Java代碼性能

2021-09-22 09:43:47

Python 開發(fā)編程語言

2017-04-05 11:10:23

Javascript代碼前端

2014-02-12 13:43:50

代碼并行任務

2022-04-09 09:11:33

Python

2020-03-26 12:38:15

代碼節(jié)點數(shù)據(jù)

2022-12-30 08:08:30

2020-07-22 08:30:02

代碼開發(fā)工具

2020-02-06 11:15:58

Python命令代碼

2021-11-02 16:25:41

Python代碼技巧

2020-08-19 10:30:25

代碼Python多線程

2020-09-09 16:00:22

Linux進程

2017-04-13 19:20:18

Python代碼并行任務

2021-08-31 09:49:37

CPU執(zhí)行語言

2023-09-12 10:10:57

開發(fā)者工具開源

2023-10-23 09:56:00

2025-04-16 09:21:00

2020-09-28 12:34:38

Python代碼開發(fā)

2019-12-25 14:08:50

Pandas數(shù)據(jù)計算
點贊
收藏

51CTO技術棧公眾號

91精品久久久久久粉嫩| 手机看片福利视频| free性欧美| 91丨porny丨国产入口| 国产精品69av| 啪啪一区二区三区| 国产精品45p| 91成人网在线| 超碰97在线看| 欧美偷拍视频| 国产精选一区二区三区| 欧洲s码亚洲m码精品一区| 天天色影综合网| 国产福利资源一区| 色综合久久久久综合99| 女女同性女同一区二区三区按摩| 神马久久久久| 国产麻豆欧美日韩一区| 日本成人精品在线| 久草中文在线视频| 欧美日韩国产一区二区三区不卡| 精品国产凹凸成av人导航| 992kp快乐看片永久免费网址| 18在线观看的| 国产精品久久久久久久久图文区| 国产一区在线免费| 国产手机精品视频| 久久欧美肥婆一二区| 国产+人+亚洲| 天天干天天操天天拍| 欧美综合精品| 亚洲国产天堂久久综合| 午夜性福利视频| 四虎成人精品一区二区免费网站| 欧美性猛交xxxx免费看漫画| 欧妇女乱妇女乱视频| 黄色动漫在线| 国产精品视频看| 日产中文字幕在线精品一区| 深夜福利免费在线观看| 成人aa视频在线观看| 91pron在线| 91中文字幕在线视频| 日本美女一区二区三区视频| 国产91免费观看| 日韩手机在线观看| 亚洲黄色毛片| 欧美激情久久久久| 欧美黑人猛猛猛| 99精品全国免费观看视频软件| 在线精品播放av| xxxxxx黄色| 国产精品xxxav免费视频| 日韩午夜激情电影| 宇都宫紫苑在线播放| 自拍偷拍亚洲| 日韩一区二区三区电影| 在线观看av免费观看| 国产激情一区| 91精品久久久久久久91蜜桃| 91日韩精品视频| 福利一区视频| 欧美猛男超大videosgay| 五月激情五月婷婷| 久久伊人精品| 亚洲成人av资源网| 男人的天堂影院| 黄色大片中文字幕| av电影在线观看| 国产精品色噜噜| 一区二区冒白浆视频| 高潮毛片在线观看| 亚洲综合色婷婷| 男人添女荫道口图片| 日本在线影院| 欧美色欧美亚洲另类二区| 三级av免费观看| 国产一区二区三区免费在线 | www.神马久久| 亚洲国产精品久久久| 中文字幕 亚洲一区| 神马影视一区二区| 中文字幕亚洲欧美一区二区三区| 在线看的片片片免费| 狠色狠色综合久久| 国产91精品久久久久久| 中文字幕乱码一区二区| 国产一区二区三区久久悠悠色av| 国产精品毛片va一区二区三区| 你懂的在线视频| 亚洲天堂成人网| 日本手机在线视频| 国产一区二区精品调教| 欧美一级日韩一级| aaaaa一级片| 亚洲午夜精品一区二区国产| 97avcom| 中文字幕人妻丝袜乱一区三区| 国产福利精品一区二区| 欧美日韩免费高清| 在线网址91| 色综合 综合色| 亚洲欧美日韩中文字幕在线观看| 台湾色综合娱乐中文网| 久久精品最新地址| 亚洲天堂视频网站| 国产一区激情在线| 欧美国产一区二区在线| 日韩激情av| 欧美三日本三级三级在线播放| 69亚洲乱人伦| 欧美a级片视频| 欧美一级片久久久久久久| 国产成人一级片| 日韩成人a**站| 久久久亚洲精选| 中文字幕乱码一区二区 | 亚洲aaa精品| 国产精品丝袜久久久久久消防器材 | 99视频精品全国免费| 欧美成年人视频| 波多野结衣午夜| 日韩成人高清| 欧美区在线观看| 女尊高h男高潮呻吟| 影视亚洲一区二区三区| 国产精品扒开腿做| 五月婷婷丁香网| 日韩毛片精品高清免费| 精品免费国产一区二区| 久久电影在线| 久久99久久99精品免观看粉嫩| 最新黄色网址在线观看| 国产亚洲综合av| 777777av| 欧美天堂社区| 97高清免费视频| www天堂在线| 亚洲精品网站在线观看| 日本中文字幕影院| 色中色综合网| 国产精品偷伦视频免费观看国产| 国产在线电影| 在线影视一区二区三区| 受虐m奴xxx在线观看| 国产精品视区| 欧美不卡1区2区3区| 麻豆mv在线观看| 亚洲精品v天堂中文字幕 | 欧美成人精品一区二区三区在线看| 日韩免费av在线| 男操女在线观看| 日韩欧美在线字幕| 中文字幕第4页| 日韩不卡一二三区| 天天久久人人| 久久久加勒比| 日韩三级视频| 色偷偷av一区二区三区乱| 欧美在线视频精品| 亚洲国产精品热久久| 手机在线免费观看毛片| 亚洲资源网站| 国产精品xxxxx| av网站在线播放| 欧美fxxxxxx另类| 色偷偷成人一区二区三区91| 中国黄色片视频| 一区二区三区福利| 蜜桃狠狠色伊人亚洲综合网站| 国产精品久久久久无码av色戒| 99久久久久国产精品| 国产区精品在线观看| а√天堂8资源在线官网| 日韩精品一区二区三区中文不卡| 精品无码av在线| 2023国产精品| 日本激情综合网| 91精品婷婷色在线观看| 都市激情久久久久久久久久久| sis001亚洲原创区| 亚洲精品日韩在线| 中文精品久久久久人妻不卡| 亚洲免费av在线| 最近中文字幕无免费| 免费久久99精品国产| 特级黄色录像片| 午夜精品影视国产一区在线麻豆| 国产精品久久久久久一区二区| 国内精品不卡| 另类视频在线观看+1080p| 视频午夜在线| 在线视频综合导航| 顶臀精品视频www| av亚洲产国偷v产偷v自拍| 国产aaaaa毛片| 亚洲最新av| 久久综合狠狠综合久久综青草 | 97免费视频在线播放| 黄色av网址在线免费观看| 欧美一区二区三区在线| 久久国产主播精品| 国产一二三在线| 色七七影院综合| 色鬼7777久久| 日韩美一区二区三区| 精品久久久久久久久久久国产字幕| 最近日韩中文字幕| 色呦色呦色精品| 国产成人无吗| 日韩成人av在线| 91成人一区二区三区| 亚洲三级在线| 久久久999成人| 婷婷婷国产在线视频| 欧美一区二区久久| 日本精品入口免费视频| 亚洲电影一区二区| 日本五级黄色片| 黄网站在线免费看| 日韩美女主播在线视频一区二区三区| 六月丁香婷婷综合| 亚洲激情一二三区| 国产精品亚洲网站| 免费v片在线观看| 不卡av电影在线观看| 国产乱理伦片a级在线观看| 欧美成人a在线| 一级黄色短视频| 日本不卡免费一区| av噜噜色噜噜久久| 国产福利一区二区三区在线播放| 欧美亚洲一区在线| 欧美人与牲禽动交com| www.久久久久| 成年人视频免费在线观看| 亚洲精品一区在线观看香蕉| 国产91久久久| 欧美人伦禁忌dvd放荡欲情| 波多野结衣在线电影| 色伊人久久综合中文字幕| 亚洲高清毛片一区二区| 精品日韩美女的视频高清| 日韩精品一区三区| 亚洲一区视频在线观看视频| 草视频在线观看| 亚洲男人的天堂在线观看| 波兰性xxxxx极品hd| 国产精品麻豆一区二区| 鲁丝一区二区三区| 国产日韩亚洲欧美综合| 四虎国产精品成人免费入口| 久久久国产精华| japanese中文字幕| 久久久高清一区二区三区| xxxx日本黄色| 国产精品电影院| 久久免费看少妇高潮v片特黄| 亚洲欧美一区二区久久| 免费一级全黄少妇性色生活片| 一区二区三区国产| 国产真实乱偷精品视频| 精品国产乱码久久久久久天美| 综合国产精品| 992tv成人免费观看| 51精产品一区一区三区| 蜜桃视频成人在线观看| 亚洲网址在线| 国产精品免费入口| 首页综合国产亚洲丝袜| 污版视频在线观看| 国产一区欧美一区| 毛茸茸free性熟hd| 久久久久久久久蜜桃| 蜜桃av免费观看| 亚洲欧美成人一区二区三区| 国产午夜福利片| 色综合婷婷久久| 亚洲综合网av| 亚洲福利视频网站| gogogo高清在线观看免费完整版| 久久精品99久久久香蕉| 人人超在线公开视频| 欧美孕妇与黑人孕交| 成人全视频免费观看在线看| 亚洲最大av在线| 日韩美脚连裤袜丝袜在线| 亚洲免费久久| 伊人成年综合电影网| av无码精品一区二区三区| 国产一区二区三区久久悠悠色av| 黄色污在线观看| 国产精品久久久久影院老司| 国产亚洲精品成人| 一本色道久久综合精品竹菊| 国产一区二区三区三州| 亚洲精品福利在线| 秋霞成人影院| 欧美在线免费视频| 精品国产乱码一区二区三区| 欧美日韩另类综合| 韩国精品一区二区三区| 男人搞女人网站| fc2成人免费人成在线观看播放| 美国一级片在线观看| 精品免费在线观看| 国产日韩欧美视频在线观看| 亚洲人成电影网站色www| 视频在线观看入口黄最新永久免费国产| 日本高清不卡在线| 98视频精品全部国产| 最近看过的日韩成人| 麻豆精品网站| 亚洲av人人澡人人爽人人夜夜| 综合精品久久久| 亚洲av无码精品一区二区| 精品国产电影一区二区| 免费大片黄在线观看视频网站| 日韩av理论片| 日韩精品免费一区二区夜夜嗨| www.国产在线视频| 国产一区二区三区日韩| 久久久精品成人| 色综合久久精品| 图片区 小说区 区 亚洲五月| 欧美久久精品一级黑人c片| 欧美天堂一区| 视频一区二区三区免费观看| 国产精品综合色区在线观看| 国产艳妇疯狂做爰视频| 樱桃国产成人精品视频| 一级特黄aa大片| 中文字幕无线精品亚洲乱码一区 | 欧美放荡办公室videos4k| 日韩电影精品| 亚洲国产欧美不卡在线观看| 自拍另类欧美| 欧美日韩激情在线一区二区三区| 国产中文字幕视频在线观看| 丁香激情综合五月| 青青操视频在线播放| 91精品福利在线一区二区三区 | 国产日韩一区二区在线观看| av不卡免费电影| 日韩精品在线免费看| 亚洲白拍色综合图区| 狂野欧美性猛交xxxxx视频| 亚洲一区二区在线播放| 欧美成人综合| 中文字幕99页| 亚洲777理论| 肉丝一区二区| 国产99视频精品免视看7| 欧美精品一区二区久久| 在线看的黄色网址| 中文字幕制服丝袜成人av| 国产精品欧美亚洲| 欧美成人全部免费| 国产日韩三级| 成年人视频网站免费观看| 久久久无码精品亚洲日韩按摩| 日本一区二区不卡视频| 区一区二在线观看| 亚洲社区在线观看| 在线一区视频观看| 亚洲欧美国产一区二区| 韩日av一区二区| 亚洲熟女www一区二区三区| 欧美变态tickle挠乳网站| 91精品国产色综合| 欧美一区一区| 欧美黄网在线观看| 99久久久久免费精品国产| 亚洲乱码国产乱码精品| 色多多国产成人永久免费网站 | 在线看片中文字幕| 欧美精品一卡二卡| 欧美人与动牲性行为| 玖玖玖精品中文字幕| 美国毛片一区二区| 免费视频网站www| 亚洲精选一区二区| 亚洲人体在线| 乱妇乱女熟妇熟女网站| 中文字幕乱码一区二区免费| 精品人妻一区二区三区蜜桃 | 亚洲精品aa| 僵尸世界大战2 在线播放| 欧美国产精品中文字幕| 超碰在线观看99| 日本久久久a级免费| 亚洲一级淫片| 欧美亚一区二区三区| 欧美日韩国产综合草草| 波多野结衣在线高清| 手机在线观看国产精品| 成人综合婷婷国产精品久久| 久久国产乱子伦精品| 久久久久久av| 99久久精品费精品国产风间由美|