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

Web性能優化:理解及使用JavaScript緩存

開發 前端
隨著我們的應用程序的不斷增長并開始進行復雜的計算時,對速度的需求越來越高,所以流程的優化變得必不可少。 當我們忽略這個問題時,我們最終的程序需要花費大量時間并在執行期間消耗大量的系統資源。

 [[260205]]

隨著我們的應用程序的不斷增長并開始進行復雜的計算時,對速度的需求越來越高(🏎️),所以流程的優化變得必不可少。 當我們忽略這個問題時,我們最終的程序需要花費大量時間并在執行期間消耗大量的系統資源。

緩存是一種優化技術,通過存儲開銷大的函數執行的結果,并在相同的輸入再次出現時返回已緩存的結果,從而加快應用程序的速度。

如果這對你沒有多大意義,那沒關系。 本文深入解釋了為什么需要進行緩存,緩存是什么,如何實現以及何時應該使用緩存。

什么是緩存

緩存是一種優化技術,通過存儲開銷大的函數執行的結果,并在相同的輸入再次出現時返回已緩存的結果,從而加快應用程序的速度。

在這一點上,我們很清楚,緩存的目的是減少執行“昂貴的函數調用”所花費的時間和資源。

什么是昂貴的函數調用?別搞混了,我們不是在這里花錢。在計算機程序的上下文中,我們擁有的兩種主要資源是時間和內存。因此,一個昂貴的函數調用是指一個函數調用中,由于計算量大,在執行過程中大量占用了計算機的資源和時間。

然而,就像對待金錢一樣,我們需要節約。為此,使用緩存來存儲函數調用的結果,以便在將來的時間內快速方便地訪問。

緩存只是一個臨時的數據存儲,它保存數據,以便將來對該數據的請求能夠更快地得到處理。

因此,當一個昂貴的函數被調用一次時,結果被存儲在緩存中,這樣,每當在應用程序中再次調用該函數時,結果就會從緩存中非常快速地取出,而不需要重新進行任何計算。

為什么緩存很重要?

下面是一個實例,說明了緩存的重要性:

想象一下,你正在公園里讀一本封面很吸引人的新小說。每次一個人經過,他們都會被封面吸引,所以他們會問書名和作者。***次被問到這個問題的時候,你翻開書,讀出書名和作者的名字。現在越來越多的人來這里問同樣的問題。你是一個很好的人🙂,所以你回答所有問題。

你會翻開封面,把書名和作者的名字一一告訴他,還是開始憑記憶回答?哪個能節省你更多的時間?

發現其中的相似之處了嗎?使用記憶法,當函數提供輸入時,它執行所需的計算并在返回值之前將結果存儲到緩存中。如果將來接收到相同的輸入,它就不必一遍又一遍地重復,它只需要從緩存(內存)中提供答案。

緩存是怎么工作的

JavaScript 中的緩存的概念主要建立在兩個概念之上,它們分別是:

  •  閉包
  •  高階函數(返回函數的函數)

閉包

閉包是函數和聲明該函數的詞法環境的組合。

不是很清楚? 我也這么認為。

為了更好的理解,讓我們快速研究一下 JavaScript 中詞法作用域的概念,詞法作用域只是指程序員在編寫代碼時指定的變量和塊的物理位置。如下代碼: 

  1. function foo(a) {  
  2.   var b = a + 2;  
  3.   function bar(c) {  
  4.     console.log(a, b, c);  
  5.   }  
  6.   bar(b * 2);  
  7.  
  8. foo(3); // 3, 5, 10 

從這段代碼中,我們可以確定三個作用域:

  •  全局作用域(包含 foo 作為唯一標識符)
  •  foo 作用域,它有標識符 a、b 和 bar
  •  bar 作用域,包含 c 標識符

仔細查看上面的代碼,我們注意到函數 foo 可以訪問變量 a 和 b,因為它嵌套在 foo 中。注意,我們成功地存儲了函數 bar 及其運行環境。因此,我們說 bar 在 foo 的作用域上有一個閉包。

你可以在遺傳的背景下理解這一點,即個體有機會獲得并表現出遺傳特征,即使是在他們當前的環境之外,這個邏輯突出了閉包的另一個因素,引出了我們的第二個主要概念。

從函數返回函數

通過接受其他函數作為參數或返回其他函數的函數稱為高階函數。

閉包允許我們在封閉函數的外部調用內部函數,同時保持對封閉函數的詞法作用域的訪問

讓我們對前面的示例中的代碼進行一些調整,以解釋這一點。 

  1. function foo(){  
  2.   var a = 2 
  3.   function bar() {  
  4.     console.log(a);  
  5.   }  
  6.   return bar;  
  7.  
  8. var baz = foo();  
  9. baz();//2 

注意函數 foo 如何返回另一個函數 bar。這里我們執行函數 foo 并將返回值賦給baz。但是在本例中,我們有一個返回函數,因此,baz 現在持有對 foo 中定義的bar 函數的引用。

最有趣的是,當我們在 foo 的詞法作用域之外執行函數 baz 時,仍然會得到 a 的值,這怎么可能呢?😕

請記住,由于閉包的存在,bar 總是可以訪問 foo 中的變量(繼承的特性),即使它是在 foo 的作用域之外執行的。

案例研究:斐波那契數列

斐波那契數列是什么?

斐波那契數列是一組數字,以1 或 0 開頭,后面跟著1,然后根據每個數字等于前兩個數字之和規則進行。如 

  1. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 

或者 

  1. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 

挑戰:編寫一個函數返回斐波那契數列中的 n 元素,其中的序列是: 

  1. [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …] 

知道每個值都是前兩個值的和,這個問題的遞歸解是: 

  1. function fibonacci(n) {  
  2.   if (n <= 1) {  
  3.     return 1  
  4.   }  
  5.   return fibonacci(n - 1) + fibonacci(n - 2)  

確實簡潔準確!但是,有一個問題。請注意,當 n 的值到終止遞歸之前,需要做大量的工作和時間,因為序列中存在對某些值的重復求值。

看看下面的圖表,當我們試圖計算 fib(5)時,我們注意到我們反復地嘗試在不同分支的下標 0,1,2,3 處找到 Fibonacci 數,這就是所謂的冗余計算,而這正是緩存所要消除的。

 

  1. function fibonacci(n, memo) {  
  2.   memomemo = memo || {}  
  3.   if (memo[n]) {  
  4.     return memo[n]  
  5.   }  
  6.   if (n <= 1) {  
  7.     return 1  
  8.   }  
  9.   return memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)  

在上面的代碼片段中,我們調整函數以接受一個可選參數 memo。我們使用 memo 對象作為緩存來存儲斐波那契數列,并將其各自的索引作為鍵,以便在執行過程中稍后需要時檢索它們。 

  1. memomemo = memo || {} 

在這里,檢查是否在調用函數時將 memo 作為參數接收。如果有,則初始化它以供使用;如果沒有,則將其設置為空對象。 

  1. if (memo[n]) {  
  2.   return memo[n]  

接下來,檢查當前鍵 n 是否有緩存值,如果有,則返回其值。

和之前的解一樣,我們指定了 n 小于等于 1 時的終止遞歸。

***,我們遞歸地調用n值較小的函數,同時將緩存值(memo)傳遞給每個函數,以便在計算期間使用。這確保了在以前計算并緩存值時,我們不會第二次執行如此昂貴的計算。我們只是從 memo 中取回值。

注意,我們在返回緩存之前將最終結果添加到緩存中。

使用 JSPerf 測試性能

可以使用些鏈接來性能測試。在那里,我們運行一個測試來評估使用這兩種方法執行fibonacci(20) 所需的時間。結果如下:

哇! ! !這讓人很驚訝,使用緩存的 fibonacci 函數是最快的。然而,這一數字相當驚人。它執行 126,762 ops/sec,這遠遠大于執行 1,751 ops/sec 的純遞歸解決方案,并且比較沒有緩存的遞歸速度大約快 99%。

注:“ops/sec”表示每秒的操作次數,就是一秒鐘內預計要執行的測試次數。

現在我們已經看到了緩存在函數級別上對應用程序的性能有多大的影響。這是否意味著對于應用程序中的每個昂貴函數,我們都必須創建一個修改后的變量來維護內部緩存?

不,回想一下,我們通過從函數返回函數來了解到,即使在外部執行它們,它們也會導致它們繼承父函數的范圍,這使得可以將某些特征和屬性從封閉函數傳遞到返回的函數。

使用函數的方式

在下面的代碼片段中,我們創建了一個高階的函數 memoizer。有了這個函數,將能夠輕松地將緩存應用到任何函數。 

  1. function memoizer(fun) {  
  2.   let cache = {}  
  3.   return function (n) {  
  4.     if (cache[n] != undefined) {  
  5.       return cache[n]  
  6.     } else {  
  7.       let result = fun(n)  
  8.       cache[n] = result 
  9.        return result  
  10.     }  
  11.   }  

上面,我們簡單地創建一個名為 memoizer 的新函數,它接受將函數 fun 作為參數進行緩存。在函數中,我們創建一個緩存對象來存儲函數執行的結果,以便將來使用。

從 memoizer 函數中,我們返回一個新函數,根據上面討論的閉包原則,這個函數無論在哪里執行都可以訪問 cache。

在返回的函數中,我們使用 if..else 語句檢查是否已經有指定鍵(參數) n 的緩存值。如果有,則取出并返回它。如果沒有,我們使用函數來計算結果,以便緩存。然后,我們使用適當的鍵 n 將結果添加到緩存中,以便以后可以從那里訪問它。***,我們返回了計算結果。

很順利!

要將 memoizer 函數應用于最初遞歸的 fibonacci 函數,我們調用 memoizer 函數,將 fibonacci 函數作為參數傳遞進去。 

  1. const fibonacciMemoFunction = memoizer(fibonacciRecursive) 

測試 memoizer 函數

當我們將 memoizer 函數與上面的例子進行比較時,結果如下:

memoizer 函數以 42,982,762 ops/sec 的速度提供了最快的解決方案,比之前考慮的解決方案速度要快 100%。

關于緩存,我們已經說明什么是緩存 、為什么要有緩存和如何實現緩存。現在我們來看看什么時候使用緩存。

何時使用緩存

當然,使用緩存效率是級高的,你現在可能想要緩存所有的函數,這可能會變得非常無益。以下幾種情況下,適合使用緩存:

  •  對于昂貴的函數調用,執行復雜計算的函數。
  •  對于具有有限且高度重復輸入范圍的函數。
  •  用于具有重復輸入值的遞歸函數。
  •  對于純函數,即每次使用特定輸入調用時返回相同輸出的函數。

緩存庫

  •  Lodash
  •  Memoizer
  •  Fastmemoize
  •  Moize
  •  Reselect for Redux

總結

使用緩存方法 ,我們可以防止函數調用函數來反復計算相同的結果,現在是你把這些知識付諸實踐的時候了。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2010-05-28 10:23:59

JavaScriptWeb

2019-03-14 15:38:19

ReactJavascript前端

2014-12-10 10:12:02

Web

2022-03-02 11:13:50

Web前端開發

2017-01-06 08:51:31

2015-12-16 12:40:32

H5緩存機制移動

2019-03-05 10:20:49

WebWebpack分離數據

2015-06-23 16:36:11

Web性能優化

2012-01-10 16:22:25

Web

2015-08-17 10:35:56

Web性能優化

2013-01-22 15:27:23

WebWeb前端

2025-03-28 08:35:00

2025-02-04 10:58:16

2009-06-10 22:00:57

JavaScript腳

2009-06-11 17:15:23

JavaScript性

2012-12-24 09:55:15

JavaJava WebJava優化

2015-09-15 10:54:54

HTTP2 WEB 性能優化

2022-08-01 14:59:57

Web前端后端

2014-03-19 14:34:06

JQuery高性能

2015-09-15 10:46:29

點贊
收藏

51CTO技術棧公眾號

国产亲伦免费视频播放| 欧美日韩黄色网| 日本精品裸体写真集在线观看| 中文字幕久久午夜不卡| 91久久大香伊蕉在人线| 日本天堂在线视频| 精品一级毛片| 日韩女优电影在线观看| 干日本少妇首页| 麻豆av在线导航| 北条麻妃国产九九精品视频| 国产精品久久久久久久av大片| 麻豆精品一区二区三区视频| 免费一区二区| 欧美大肚乱孕交hd孕妇| 亚洲熟妇av一区二区三区| 日本亚洲精品| 久久久久久久久久久久久女国产乱| 国产精品综合不卡av| 国产污片在线观看| 成人av动漫在线观看| 亚洲福利精品在线| 成年网站免费在线观看| 黑人精品一区| 亚洲综合色在线| 天堂精品一区二区三区| 五月天福利视频| 国产91综合一区在线观看| 国产精品爱啪在线线免费观看| 久久久久久av无码免费网站| 97人人精品| 亚洲男人第一av网站| 欧美性猛交乱大交| 欧美成人三级| 欧美亚洲一区二区三区四区| 亚欧无线一线二线三线区别| 怡红院红怡院欧美aⅴ怡春院| 国产三级精品视频| 欧美美乳视频网站在线观看| 色婷婷在线视频| 国产成人自拍在线| 川上优av一区二区线观看 | 黑人巨大精品欧美一区二区三区| 免费看av软件| 免费在线视频欧美| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91久久久久久久一区二区| 国产成人无码av| 一区二区三区国产盗摄| 91精品国产91久久久久久最新| 久久97人妻无码一区二区三区| 中文精品久久| 另类色图亚洲色图| 99热精品免费| 欧美韩日精品| 欧美激情啊啊啊| 久操视频免费在线观看| 欧美日本亚洲韩国国产| 欧美噜噜久久久xxx| 久久人人爽人人爽人人| 激情久久久久| 91chinesevideo永久地址| 国产又黄又爽又色| 久久久久99| 国产精品亚洲自拍| av网站免费大全| 国产 欧美在线| 精品国产一区二区三区久久久久久| 欧美熟妇交换久久久久久分类| aa级大片欧美| 欧洲一区二区在线观看| 91看片在线观看| 中文字幕一区在线观看视频| 自拍另类欧美| wwwww亚洲| 色综合久久88色综合天天6| av污在线观看| 香蕉成人app| 日韩成人网免费视频| 熟女高潮一区二区三区| 成人免费在线播放| 伦理中文字幕亚洲| 99热在线观看免费精品| 日本不卡视频在线观看| 91久久精品美女| 国产在线播放观看| 综合久久中文字幕| 狠狠网亚洲精品| 成人久久18免费网站漫画| 日本黄色大片视频| 国产日产欧美精品一区二区三区| 一本一本a久久| 免费影视亚洲| 在线观看免费亚洲| 色婷婷综合在线观看| 青青草原在线亚洲| 色妞欧美日韩在线| 久久精品免费在线| 秋霞午夜鲁丝一区二区老狼| 91丨九色丨国产| 国产一区精品| 亚洲一区免费视频| 超碰在线97免费| 成人福利一区| 色七七影院综合| 91香蕉在线视频| 精品中文字幕一区二区小辣椒| 国产一区免费观看| 嫩草在线视频| 色婷婷精品大在线视频| 色婷婷狠狠18禁久久| 成人久久一区| 热草久综合在线| 肥臀熟女一区二区三区| 国产精品日韩成人| 黄在线观看网站| 国产三级精品三级在线观看国产| 久久精品国产亚洲| 无码任你躁久久久久久久| 国产成人一级电影| 日本三级福利片| 欧美与亚洲与日本直播| 国产午夜精品久久久| 久久久久久国产精品免费播放| 蜜桃一区二区三区在线| 久久99久久99精品蜜柚传媒| 四虎影视成人| 欧美一二三四在线| 亚洲女人毛茸茸高潮| 久久亚洲二区| 久久精品国产第一区二区三区最新章节 | 国产亚洲欧美精品久久久久久 | 免费在线看黄| 在线观看精品一区| 国精产品一区一区三区免费视频| 国产精品观看| 91嫩草在线| 2024最新电影在线免费观看| 制服丝袜中文字幕亚洲| 欧美福利在线视频| 男男视频亚洲欧美| 亚洲成人蜜桃| 日韩国产大片| 少妇精69xxtheporn| 国产九色91回来了| 国产欧美一区二区精品性色| 爆乳熟妇一区二区三区霸乳| 精品久久美女| 国产日韩精品电影| 免费av在线| 欧美一区二区在线视频| 欧美成人777| 国产成人一级电影| 久艹视频在线免费观看| 日本国产精品| 国产成人黄色av| av在线第一页| 91精品国产综合久久香蕉麻豆| 午夜精品一区二区三区视频| 国产制服丝袜一区| 国产尤物av一区二区三区| 一区二区三区四区精品视频| 欧美激情视频网址| 手机看片1024日韩| 色美美综合视频| 精品丰满少妇一区二区三区| 久久99蜜桃精品| 日韩中文字幕亚洲精品欧美| 日韩中文字幕一区二区高清99| 欧美黑人狂野猛交老妇| 丁香花免费高清完整在线播放| 精品国产1区2区| 免费看黄色的视频| 精品无人区卡一卡二卡三乱码免费卡 | 五月婷婷综合在线| 最近中文字幕免费| 久久精品久久精品| 欧美日韩中文字幕在线播放| 一区二区日韩| 国产精品99久久久久久久久| 黄色免费在线观看网站| 亚洲第一中文字幕在线观看| 无码人妻av免费一区二区三区 | 永久久久久久| 国产欧美三级电影| 国产精品视频久| 日本不卡影院| 一区二区三区回区在观看免费视频| 免费观看日批视频| 国产精品色婷婷久久58| 欧美性生交xxxxx| 日日夜夜一区二区| 国产91在线亚洲| 精品国产乱码久久久久久蜜坠欲下 | 日韩av大片在线观看| 亚洲视频免费在线| 91精品人妻一区二区| 国产精品99久久久久久似苏梦涵| 99精品人妻少妇一区二区| 国产欧美日韩免费观看| 国产美女久久精品| 久草在线资源站手机版| 久久久国产91| 国产免费视频在线| 精品久久久久久无| 亚洲视频一区二区三区四区| 天涯成人国产亚洲精品一区av| 岛国片在线免费观看| 成人国产免费视频| 中文字幕线观看| 日韩高清欧美激情| 三上悠亚久久精品| 艳女tv在线观看国产一区| 欧美一区二区三区成人久久片| 欧美成人精品一级| 国产精品成人久久久久| 僵尸再翻生在线观看| 蜜臀久久99精品久久久无需会员| 国内精品一区视频| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 国产高清自拍99| 伊人久久大香伊蕉在人线观看热v| 热久久免费国产视频| 理论片午夜视频在线观看| 欧美大片大片在线播放| 黄色网址在线免费观看| 自拍偷拍亚洲精品| 黄色在线小视频| 精品五月天久久| 少妇无码一区二区三区| 欧美v日韩v国产v| 99久久婷婷国产一区二区三区| 欧美少妇xxx| 99re热视频| 色久优优欧美色久优优| av黄色在线看| 欧美日韩综合视频| 国产精品视频免费播放| 亚洲va欧美va国产va天堂影院| 劲爆欧美第一页| 亚洲一区二区三区视频在线播放 | 午夜不卡在线视频| 五月天婷婷丁香| 亚洲午夜一区二区三区| 动漫精品一区一码二码三码四码| 亚洲黄色av一区| 2018天天弄| 亚洲一级电影视频| 国产午夜福利一区二区| 亚洲成av人片一区二区| 天天插天天操天天干| 精品久久中文字幕| 国产精品21p| 欧美性色黄大片| 91theporn国产在线观看| 欧美日韩视频在线观看一区二区三区| 久久国产香蕉视频| 欧美日本韩国一区| 国产视频第二页| 精品美女一区二区| 亚洲色欧美另类| 一区二区三区四区视频| 黄av在线播放| 久久久久久亚洲精品中文字幕| 97超碰免费在线| 国产99在线|中文| 欧美日韩破处视频| 成人av免费看| 美女毛片一区二区三区四区| 亚洲午夜精品久久| 欧美三级免费| 国产a级一级片| 麻豆精品一区二区| 日本一区二区免费视频| 99精品视频在线播放观看| 婷婷色一区二区三区| 成人免费视频在线观看| 国产成人啪精品午夜在线观看| 欧美日韩午夜剧场| 一道本无吗一区| 亚洲成人精品久久| 成人在线免费看| 欧美另类xxx| 在线一区av| 91视频国产一区| 少妇一区二区三区| 大地资源第二页在线观看高清版| 精品91视频| 亚洲a级黄色片| 91女厕偷拍女厕偷拍高清| 国产又粗又长又硬| 午夜成人在线视频| 国产精品视频a| 亚洲欧美制服综合另类| 操你啦在线视频| 国产精品久久精品| 国产在线播放精品| 先锋影音网一区| 亚洲毛片播放| 亚洲妇熟xx妇色黄蜜桃| xfplay精品久久| 免费在线看黄网址| 欧美伦理视频网站| 青青草在线免费视频| 欧美老妇交乱视频| 99久久综合国产精品二区| 韩国成人一区| 综合一区av| 777视频在线| 91亚洲精品久久久蜜桃| 波多野结衣家庭教师| 欧洲在线/亚洲| 天堂中文资源在线| 欧美激情一级欧美精品| 在线欧美激情| 日韩欧美视频一区二区| 亚洲自拍另类| 日本少妇xxxx| 亚洲国产精品尤物yw在线观看| 97超视频在线观看| 永久免费精品影视网站| 英国三级经典在线观看| 国产伦精品一区二区三区视频免费 | 亚洲不卡在线| 国产91av视频在线观看| 日本伊人色综合网| 日韩人妻一区二区三区 | 无码人妻av免费一区二区三区| 亚洲国产精品yw在线观看| 在线中文字幕视频观看| 91久久久久久久久久久久久| 婷婷激情图片久久| 亚洲一区日韩精品| 国产精品丝袜在线| 亚洲图片欧美日韩| 亚洲一级黄色片| 超薄肉色丝袜脚交一区二区| 欧美日韩一区二区三区在线观看免 | 国产wwwxxx| 久久精品国产久精国产思思| 四虎影视国产精品| 欧美aaa在线观看| 国产九色精品成人porny | 久久99久久| 国产精品1区2区在线观看| 国产伦一区二区三区| 99草草国产熟女视频在线| 久久婷婷国产综合精品青草| 天天干天天干天天干天天| 亚洲视频axxx| 8av国产精品爽爽ⅴa在线观看| 日本一区二区久久精品| 蜜臀a∨国产成人精品| 女人裸体性做爰全过| 7777精品伊人久久久大香线蕉经典版下载| 9i精品一二三区| 91欧美日韩一区| 好看的亚洲午夜视频在线| 911亚洲精选| 欧美日韩亚洲视频| 国产最新视频在线观看| 国产欧美在线视频| 亚洲乱码在线| 国产精品久久久久久亚洲色| 懂色av中文一区二区三区天美| 国产黄色片在线观看| 91久久精品一区| 伊人成人在线| av男人的天堂av| 欧美喷潮久久久xxxxx| 亚洲无线看天堂av| 美日韩精品免费| 久久国产精品免费| 国产一级片视频| 亚洲视频欧洲视频| 国产乱码精品一区二区三区亚洲人| 成人在线免费观看视频网站| 91色porny蝌蚪| 亚洲自拍偷拍另类| 欧美极度另类性三渗透| 少妇精品久久久| 精品国产午夜福利在线观看| 欧美性猛交xxxxx水多| 无遮挡动作视频在线观看免费入口| 99高清视频有精品视频| 日韩中文字幕91| 欧美日韩激情在线观看| 亚洲欧美中文另类| 亚洲3区在线| 国产天堂在线播放| 亚洲中国最大av网站| 成年人视频网站在线| 国产精品一区二区免费看| 免费观看在线色综合| 国产精品成人网站| 日韩亚洲一区二区| 亚瑟一区二区三区四区| 国产在线视频三区| 色婷婷狠狠综合| 91九色国产在线播放|