久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

自研小程序容器:從架構(gòu)設(shè)計到上線排障的實戰(zhàn)指南

自研小程序容器:從架構(gòu)設(shè)計到上線排障的實戰(zhàn)指南 最近一年我收到最多的私信類型不是“某個組件怎么用”而是“我們App里的小程序越來越多要不要自研一套容器”。問的人多了我開始意識到一個趨勢當(dāng)團(tuán)隊業(yè)務(wù)發(fā)展到一定規(guī)模市面上現(xiàn)成的跨端方案已經(jīng)填不滿需求的坑大家開始把目光投向了一個更深水區(qū)——小程序容器。小程序容器這個東西往簡單了說就是一個能跑小程序代碼的運行時環(huán)境它把JS邏輯、原生渲染、能力橋接幾大塊打包在一起讓一份業(yè)務(wù)代碼能在iOS、Android、甚至更多端上跑起來。往復(fù)雜了說它是一個跨端技術(shù)的底座有了它你的App就成了一個“小操作系統(tǒng)”業(yè)務(wù)團(tuán)隊不用等發(fā)版就能上線新頁面第三方業(yè)務(wù)可以隔離運行甚至整個App的功能模塊都能解耦成一個個可插拔的小程序。這篇文章我不會給你講“未來已來”這種虛詞而是按我自己實操過的路徑拆解整套容器的架構(gòu)設(shè)計、關(guān)鍵技術(shù)選型、通信協(xié)議和一批上線后才會遇到的坑。如果你正打算自研容器或者在做跨端動態(tài)化方案這篇文章應(yīng)該能幫你少走半年的彎路。1. 為什么非要折騰一個“自己的”小程序容器1.1 現(xiàn)成小程序平臺解決不了的問題很多人下意識會覺得小程序這個概念不是早就被微信做透了嗎想用小程序直接平臺上線不就好了。但這里有個關(guān)鍵的差異微信小程序是跑在微信App里的你的業(yè)務(wù)得到的只是一個入口而不是一個運行環(huán)境。你的目標(biāo)用戶如果在自己的App里你要的是一個能嵌入自家App的運行時讓你能把一段下發(fā)的代碼拖起來跑成界面。這套東西2024年之后市面上其實出現(xiàn)了不少商業(yè)化方案從早期的WebView套殼到后來各家推出的跨端容器SDK都能做到“遠(yuǎn)程下發(fā)一段JS和模板然后在App里渲染出原生頁面”。但問題也隨之而來商業(yè)SDK的黑盒屬性決定了你沒法改底層。一旦遇到內(nèi)存增長異常、通信丟消息、首屏速度跟不上的情況你能做的只有提工單等回復(fù)。我見過一個團(tuán)隊線上小程序頁面在低端機上頻繁崩潰查了兩個月最后發(fā)現(xiàn)是容器SDK在特定機型上JS引擎回收不及時。這種問題你是無法自己定位并解決的。1.2 自研容器不是一個“野心”問題而是一個成本問題自研容器聽起來是個大工程動輒幾十人年的投入很多團(tuán)隊一聽到就先打了退堂鼓。但我說句實在話如果你需要的只是一個“能跑自己業(yè)務(wù)代碼的動態(tài)化頁面”那這個投入遠(yuǎn)比想象中低。最小可行容器的核心模塊就三個JS引擎、渲染層、通信橋。其他諸如包管理、灰度、調(diào)試器都是后置需求。我個人見過最小的可用容器是三年前一個團(tuán)隊用三個月時間搭出來的當(dāng)時的架構(gòu)很簡單用JavaScriptCore承載業(yè)務(wù)邏輯用原生組件樹承載界面抹平了三端的渲染差異通信橋在JS與原生各開一面方法是同步返回值、異步走回調(diào)圖片、導(dǎo)航、埋點等能力直接映射到宿主App的SDK這套東西跑起來第一版確實粗糙首屏得等個半秒crash率也談不上漂亮。但它解決了一個最核心的問題**上線后發(fā)現(xiàn)Bug不再需要重新走App發(fā)版流程了可以直接下發(fā)新版小程序包去救火。**就這一條省下的發(fā)版人力成本就足夠覆蓋整個容器的研發(fā)投入。1.3 什么條件下才值得起這套爐灶我得勸退一部分人。如果你的業(yè)務(wù)特征是“一年不發(fā)幾次版、頁面形態(tài)穩(wěn)定、團(tuán)隊小、沒有專職基建”那自研容器大概率是得不償失的直接用現(xiàn)成的跨端框架甚至Hybrid方案就好。值得自研的判斷標(biāo)準(zhǔn)我整理下來基本是這幾條業(yè)務(wù)有高頻動態(tài)化需求且頁面更新節(jié)奏以“天”甚至“小時”為周期你的App內(nèi)有多個獨立業(yè)務(wù)方或者是平臺型App需要相互隔離、獨立發(fā)版現(xiàn)有跨端方案解決不了核心性能痛點比如復(fù)雜列表滾動、大圖渲染你的團(tuán)隊有足夠的客戶端基建人力能長期維護(hù)下去如果命中兩條以上就可以接著看這篇文章了。2. 容器整體架構(gòu)一段JS到一塊屏幕的完整旅程2.1 最小可行容器由哪幾個模塊組成講架構(gòu)之前先給一張整體的模塊清單不用把它當(dāng)成映射表去背而是想清楚一件事每一個模塊的存在都是為了解決“遠(yuǎn)程下發(fā)→本地執(zhí)行→界面展示→能力調(diào)用”這條鏈路里的某一個環(huán)節(jié)。一個最小容器至少要有這五個模塊JS運行時負(fù)責(zé)執(zhí)行小程序的邏輯代碼、管理頁面生命周期、處理事件綁定渲染層把邏輯層的“界面描述”翻譯成真實界面。可以翻譯成原生View也可以翻譯成Web頁面或者兩者混合通信橋連接JS運行時和原生層讓邏輯層可以調(diào)用相機、定位、網(wǎng)絡(luò)等原生能力包管理負(fù)責(zé)小程序包的下載、校驗、解壓、版本更新和回滾生命周期調(diào)度管理小程序從加載、啟動、前臺、后臺到銷毀的完整狀態(tài)機這里面的分層思想最接近的類比是“瀏覽器之于網(wǎng)頁”瀏覽器負(fù)責(zé)把HTML/CSS/JS渲染成界面并且通過萬維網(wǎng)提供文件獲取能力容器則把這些能力收攏到了一個App內(nèi)部只不過它要對接的不是域名而是你App內(nèi)的多個業(yè)務(wù)SDK渲染目標(biāo)不是DOM而是原生的視圖。2.2 小程序包的結(jié)構(gòu)與加載流程小程序包的載體通常就是一個zip壓縮包我見過的最小包體能做到幾十KB核心就是一個目錄your-app/ ├── app.json # 全局配置頁面路由、窗口樣式、權(quán)限聲明 ├── app.js # 應(yīng)用入口全局生命周期鉤子 └── pages/ ├── home/ │ ├── index.js # 頁面邏輯 │ ├── index.xml # 頁面結(jié)構(gòu)模板 │ ├── index.css # 頁面樣式 │ └── index.json # 頁面獨立配置 └── detail/ └── ...加載流程大概是這樣一個鏈路客戶端啟動時向服務(wù)器請求“小程序列表”拿到版本號后與本地的版本號比對不一致就去拉新包。包下載完成會校驗完整性MD5/簽名然后解壓到沙盒目錄。接下來JS引擎啟動并加載app.js按app.json里配置的路由找到當(dāng)前頁面Home讀取模板和JS開始首屏渲染。這一步有個很多人前期忽略的點**包下載是異步的用戶打開小程序后可能因網(wǎng)絡(luò)差出現(xiàn)白屏。**成熟的容器必須在包管理的調(diào)度里做“預(yù)下載”和“本地兜底版本”的規(guī)劃而不是等用戶點到那個入口才去下載。2.3 多端運行時的統(tǒng)一抽象層既然這套容器要跨iOS和Android未來可能還有鴻蒙那就要處理一個很現(xiàn)實的問題三端底層完全不一樣JS引擎不一樣原生UI體系不一樣連線程模型都不一樣。為了讓上層業(yè)務(wù)代碼只寫一遍就必須畫出“統(tǒng)一抽象層”。抽象層要做的事是規(guī)定一個“中間標(biāo)準(zhǔn)”。業(yè)務(wù)代碼不關(guān)心你底層是用JavaScriptCore還是V8也不關(guān)心你渲染的最終是UIView還是Compose還是ArkUI——它只跟你抽象的接口說話interface MiniAppRuntime { /** 在每個頁面的邏輯入口創(chuàng)建時被調(diào)用 */ createPage(config: PageConfig): PageInstance; /** 將頁面邏輯與原生視圖進(jìn)行綁定 */ attachView(pageId: string, viewToken: NativeViewToken): void; /** 調(diào)用宿主原生能力 */ invokeNative(channel: string, method: string, params: Recordstring, unknown): Promiseunknown; /** 通知原生層頁面生命周期變化 */ notifyLifecycle(pageId: string, state: PageLifecycleState): void; }底層各端自己去翻譯這些接口就好。iOS用JavaScriptCore或V8實現(xiàn)JS運行時Android默認(rèn)也是V8或QuickJS鴻蒙初期可以接方舟引擎但上層接口對齊了整體改造量就會被壓縮得很小。3. JS引擎選型容器的發(fā)動機決定性能上限3.1 主流JS引擎橫向?qū)Ρ菾S引擎是小程序容器的心臟它的執(zhí)行速度、內(nèi)存管理方式直接決定容器上限。主流的可嵌入引擎有JavaScriptCore、V8、Hermes、QuickJS這幾個我實際對比下來它們的差別非常大選錯了后面會很痛苦。引擎適用平臺啟動速度內(nèi)存占用調(diào)試支持備注JavaScriptCoreiOS原生快中等好iOS系統(tǒng)自帶集成成本最低V8Android/桌面中高極好執(zhí)行性能最強快照支持好HermesAndroid/iOS極快低一般為React Native定制字節(jié)碼預(yù)編譯QuickJS全平臺/嵌入式極快極低弱體積小適合受限環(huán)境這里我給一個具體的選型路徑基于我實際操作中的經(jīng)驗iOS端直接用系統(tǒng)自帶的JavaScriptCore別折騰V8。iOS的JavaScriptCore深度集成在系統(tǒng)里內(nèi)存管控和調(diào)試支持都是系統(tǒng)級的自己編譯V8進(jìn)iOS是個大坑Apple對動態(tài)代碼的限制和審核也容易出問題。Android端用V8但不是裸V8而是用官方提供的V8快照機制來做平臺初始化。Android端用V8的啟動性能優(yōu)勢非常明顯特別是復(fù)雜頁面邏輯較多時。后續(xù)要往鴻蒙、PC桌面上擴QuickJS可以作為“輕量引擎?zhèn)溥x”在環(huán)境受限的端上跑簡化版容器。雖然它的JIT能力弱但勝在嵌入極其簡單而且完全不需要做平臺依賴處理。3.2 引擎實例池不能讓JS引擎裸奔新手做容器特別容易踩的一個坑每個小程序頁面啟動時都重新創(chuàng)建一個JS引擎實例。這個做法在業(yè)務(wù)量小的時候看不出來問題但頁面多起來后內(nèi)存和CPU都扛不住幾乎必然導(dǎo)致啟動白屏和頻繁GC掉幀。正確的做法是維護(hù)一個引擎實例池Engine Pool。比如在App端預(yù)啟動1到2個JS引擎實例A頁面退出后B頁面直接復(fù)用已有的引擎上下文而不需要重新編譯JS、初始化內(nèi)置對象。引擎池設(shè)計的時候有兩個細(xì)節(jié)需要提前盤算隔離與復(fù)用的平衡引擎上下文要隔離因為小程序A和B的全局變量不能串。但JS引擎本身也就是運行時環(huán)境可以復(fù)用。對應(yīng)到代碼上就是共享JavaScriptCore的JSContextGroup但每個小程序用獨立的JSGlobalContextRef。冷熱切換內(nèi)存壓力大的時候需要把空閑引擎實例回收。用一個引用計數(shù)來標(biāo)記哪些引擎正在被頁面占用、哪些是空閑可回收的防止低端機上被系統(tǒng)殺掉。3.3 業(yè)務(wù)代碼與原生能力的安全隔離小程序容器和普通的JS執(zhí)行環(huán)境最大的區(qū)別在于它要執(zhí)行的是“遠(yuǎn)程下發(fā)的非可信代碼”。你不能讓小程序里的JS直接拿到原生的任意能力不然一個惡意頁面就能拿走用戶通訊錄。所以Js引擎和原生能力之間必須卡一道“能力白名單”。我的做法是在引擎?zhèn)茸⑷胍唤M有限的原生對象而不是把所有宿主能力全部暴露出去// 注入到小程序邏輯層的全局對象只有這些方法可以被調(diào)用 globalThis.MiniAppBridge { callNative: function(channel, method, args) { // 這里的channel和method會被原生側(cè)再做一次白名單校驗 // extra記錄調(diào)用方的pageId用于權(quán)限控制和鏈路追蹤 return nativeBridgeInvoke(this.__pageId, channel, method, args); }, on: function(eventName, callback) { // 訂閱原生事件注意卸載時要及時移除回調(diào)防止泄漏 } };這樣的設(shè)計可以理解為安檢**JS側(cè)能做任何事兒但能碰到的東西只有一把鑰匙且門衛(wèi)原生側(cè)還會再查一遍白名單。**不過要注意一個問題原生側(cè)做白名單校驗時建議不要用字符串比對HTTP接口路徑的做法因為鏈路的性能要求非??量獭8玫淖龇ㄊ恰巴ǖ谰幪枴泵總€能力預(yù)分配一個唯一整形IDJS側(cè)調(diào)用時帶上ID原生側(cè)直接最佳匹配。省掉了字符串哈希的時間高峰期這個優(yōu)化非常有用。4. Native Bridge設(shè)計雙線程通信的協(xié)議與陷阱4.1 通信鏈路從JS調(diào)用原生方法的一次完整握手小程序容器里的JS邏輯和原生UI線程天然是不在同一線程的。JS引擎跑在自己的線程上我們叫邏輯線程原生UI跑在主線程上。這兩個線程之間的對話就是Native Bridge要解決的事。一次最簡單的調(diào)用“獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)”完整鏈路如下JS代碼里調(diào)用MiniAppBridge.callNative(device, getNetworkState, {})Bridge層把參數(shù)對象拍平成JSON字符串為了方便跨線程傳遞通過線程消息隊列把數(shù)據(jù)包發(fā)到主線程主線程上的Bridge處理中心解包找到device通道對應(yīng)的原生處理器原生處理器調(diào)用系統(tǒng)能力拿到網(wǎng)絡(luò)狀態(tài)把結(jié)果封裝成回調(diào)包包含調(diào)用ID和數(shù)據(jù)發(fā)回邏輯線程JS側(cè)根據(jù)調(diào)用ID匹配Promiseresolve結(jié)果這段鏈路里最容易被忽視的就是回調(diào)ID的匹配。因為JS的調(diào)用是異步的你發(fā)100個網(wǎng)絡(luò)請求出去哪個先回來、哪個后回來都是不可控的。所以每個調(diào)用發(fā)出時都要帶一個自增的唯一調(diào)用IDcallId原生側(cè)返回時帶上這個IDJS側(cè)才能把結(jié)果交付給對應(yīng)那次調(diào)用的Promise。沒有這套機制異步場景全部會錯亂。4.2 大圖片、長列表數(shù)據(jù)的傳輸優(yōu)化通信橋是容器里最大的性能瓶頸位置尤其是大數(shù)據(jù)的搬運。如果你在JS側(cè)直接把一張base64圖片丟給原生去顯示那通信報文會膨脹三分之一以上首屏卡到?jīng)]法看。這里不能圖省事得做幾層處理通道分級把數(shù)據(jù)分成控制通道和媒體通道??刂仆ǖ雷哳l繁小包媒體通道走專用的大包傳遞甚至可以直接把圖片的先讀地址傳給原生讓原生直接從本地讀取根本不必經(jīng)過Bridge做一次數(shù)據(jù)拷貝。二進(jìn)制序列化有些團(tuán)隊圖方便直接用JSON字符串但遇到ArrayBuffer、二進(jìn)制數(shù)據(jù)時就抓瞎了。建議協(xié)議層支持二進(jìn)制塊用一個頭部標(biāo)記標(biāo)識數(shù)據(jù)類型而不是一刀切字符串。節(jié)流與批量長列表渲染時每次滑動都觸發(fā)幾十個通信小包的場景很常見。直接把幾十個更新合并成一個數(shù)據(jù)包批量發(fā)過去通信次數(shù)能減少70%以上。4.3 回調(diào)風(fēng)暴、超時與異常兜底通信橋上線之后最先暴露的問題就是“回調(diào)風(fēng)暴”。比如原生側(cè)啟動了一個相機拍照流程如果拍照過程中用戶取消了原生側(cè)的取消回調(diào)沒處理好JS側(cè)會是這樣一個狀態(tài)發(fā)了調(diào)用一直等沒有結(jié)果回來。因為沒有超時機制Promise永遠(yuǎn)掛起內(nèi)存堆積頁面越來越卡。所以Bridge在設(shè)計之初就必須內(nèi)置三層兜底回調(diào)超時每次JS發(fā)起調(diào)用都會登記一個超時時間我習(xí)慣設(shè)500ms網(wǎng)絡(luò)類操作單獨設(shè)長一些超時就自動reject。異常回調(diào)響應(yīng)包里帶error和code字段原生側(cè)即使崩潰了也要回傳一個格式統(tǒng)一的錯誤對象不能直接不給回音。調(diào)用鏈追蹤每一條調(diào)用都帶有全局唯一的traceId線上排查問題的時候可以一鍵串起來這條命令從哪個頁面發(fā)出、原生側(cè)哪個模塊處理的、耗時多少、失敗在哪一步。5. 渲染方案取舍原生渲染、WebView與同層渲染5.1 三條技術(shù)路線的優(yōu)劣對比容器把JS邏輯I哎呀思后怎么把界面畫出來這個小程序容器相比“純JS解釋器”的最大區(qū)別。主流方案就三條路線各有各的坑。路線渲染速度動態(tài)樣式能力實現(xiàn)復(fù)雜度內(nèi)存占用典型場景原生樹渲染極快弱需預(yù)置組件高低強交互、長列表、地圖WebView渲染中強跟網(wǎng)頁一致低高營銷頁、富文本展示同層渲染中高中極高中混合場景頁面里同時存在原生視頻和網(wǎng)頁富文本我實際項目里的經(jīng)驗是**主力頁面用原生樹渲染營銷內(nèi)容多、排版需求不確定的頁面用WebView承載同層渲染只在高度定制化的頁面里使用。**這就好比蓋房子框架結(jié)構(gòu)用鋼筋混凝土隔斷可以用輕鋼龍骨但你不能用輕鋼龍骨當(dāng)承重墻來用。5.2 原生樹渲染下的View層級同步用原生樹渲染時JS層擁有的是一棵“虛擬節(jié)點樹”它不是真實界面只是一堆描述數(shù)據(jù)。每次狀態(tài)變化JS層需要把這棵樹的變化同步給原生層原生層拿到JSON后去增刪改真實的原生View。這套機制最關(guān)鍵的兩個字diff。你不能每次狀態(tài)變化都把整棵樹發(fā)給原生那樣頁面一變就全量重建View性能直接被打穿。需要自己做一層虛擬DOM diff算出哪些節(jié)點增刪、哪些屬性變了然后只把增量操作發(fā)給原生層。具體到工程實現(xiàn)上我建議這樣組織// 虛擬節(jié)點描述 const vnode { type: view, props: { id: header, style: { flex-direction: row }, onClick: handleHeaderTap }, children: [ { type: text, props: { value: Hello MiniApp } } ] };原生側(cè)拿到這棵樹后建立一套“節(jié)點ID ? 原生View”的映射表。diff產(chǎn)生的操作是createNode、updateNode、deleteNode三種每條操作都帶上節(jié)點ID原生側(cè)定位到對應(yīng)View去處理。這張映射表是原生渲染模塊的核心數(shù)據(jù)結(jié)構(gòu)它處理得好不好決定了嵌套深級頁面會不會出現(xiàn)內(nèi)存混亂。注意虛擬DOM的diff計算是在JS引擎線程里執(zhí)行的這本身就是耗時邏輯。我見過push數(shù)據(jù)更新后三屏長列表diff計算耗時超過200ms的案例。優(yōu)化手段只有兩個方向縮小diff范圍只diff變化的靜態(tài)區(qū)塊或者把diff計算放到子線程去。前期架構(gòu)設(shè)計時就得把這根弦繃住。5.3 混合渲染的橋接邊界實際業(yè)務(wù)不會這么單純。一個餐廳詳情頁上半段是原生速度快、體驗好的菜單列表下半段是運營放上去的活動說明富文本——這就要在原生渲染的頁面里嵌入一塊WebView。混合渲染本質(zhì)就是在原生ViewTree上挖一個坑把一個WebView或WKWebView放進(jìn)去。但這里有個邊界問題這塊WebView里的事件怎么跟外層JS通信我試過幾種方案最可靠的是直接通過Bridge的“跨通道消息轉(zhuǎn)發(fā)”來實現(xiàn)。webview里的頁面向小程序邏輯JS發(fā)了個postMessageBridge把它包成一個普通的消息包按原生→邏輯的方向傳回去邏輯層統(tǒng)一處理。這樣對開發(fā)者來說嵌入的富文本內(nèi)容和原生組件沒有本質(zhì)區(qū)別都是下發(fā)數(shù)據(jù)、接收事件而已。6. 上線后的排障記錄白屏、卡頓、內(nèi)存增長的排查鏈路6.1 首次啟動白屏包解壓與引擎預(yù)熱的競速線上收到的第一波用戶反饋集中在“第一次打開需要等很久”。這個問題的根因是首啟時鏈路太長了——下載新包、解壓、校驗、啟動引擎、編譯JS、加載首屏一整套流程全在用戶點擊觸發(fā)的瞬間串行執(zhí)行。后面我們的解法是三步。第一步把“下載解壓預(yù)編譯”拿到App啟動階段去做。用戶在前一個頁面停留的平均時長遠(yuǎn)高于我們做后臺預(yù)熱的耗時必須利用這段時間把未來的小程序包準(zhǔn)備好。第二步預(yù)啟動JS引擎實例。前文提到的引擎池在這里派上用場App啟動后預(yù)熱1個引擎小程序打開時直接把編譯好的字節(jié)碼快照丟進(jìn)引擎上下文省掉了解析和編譯時間。實測這一步可以直接把首屏?xí)r間優(yōu)化約40%。第三步首屏不發(fā)整包而是先下沉發(fā)一個精簡版的啟動快照只有app.js和小首頁相關(guān)頁面后續(xù)頁面按需加載。這個思路很像網(wǎng)頁的“按需引入”讓首屏依賴的模塊數(shù)量最少。6.2 頁面退出后內(nèi)存不見回落Context泄漏排查鏈路第二個高頻線上問題是用戶逛完幾個小程序頁面后App整體內(nèi)存漲上去了退回首頁也不回落。這里先說結(jié)論絕大多數(shù)泄漏的根因在于JS引擎的Context釋放不徹底。JSContext不僅裝著JS變量還通過Bridge握著大量原生對象的引用。頁面退出了原生對象沒有被JS側(cè)的全局變量回收兩者互相引用整個內(nèi)存圖就死了GC根本收不掉。排查鏈路我也走了一遭給各位后來人留個標(biāo)把小程序邏輯層的內(nèi)存快照導(dǎo)出來在Chrome DevTools里看heap snapshot用Memory分析工具反復(fù)進(jìn)出頁面三到五次對比快照里哪些對象是“新增且未釋放”的命中最多的就是兩個點全局事件監(jiān)聽器沒有移除、原生端注冊的回調(diào)沒有被反注冊根治的方法是在頁面銷毀的生命周期鉤子onUnload里把事件監(jiān)聽和Bridge調(diào)用全部反注冊。同時在容器原生側(cè)設(shè)置一個強制回收開關(guān)頁面退出超過30秒后把JSContext和原生交互對象之間的強引用徹底斷開讓兩個側(cè)的內(nèi)存都可以獨立回收。6.3 滾動掉幀長列表的渲染同步瓶頸第三個大坑是長列表滾動掉幀。原理不復(fù)雜頁面滾動時最少有50%的滑動事件要去JS線程計算然后diff出增量、再同步給原生線程。鏈路這么長掉幀其實怪不得任何單方。我們優(yōu)化的核心是把“同步渲染”改成“異步分片渲染”。滾動過程不讓JS線程全量參與而是把一個邏輯層的“滾動事件”轉(zhuǎn)化為最精簡的“首尾可見區(qū)問”只渲染可視區(qū)前后各擴大一段preload窗口的節(jié)點離屏的節(jié)點直接虛擬化。原生層配上View復(fù)用機制滾動時沒有新建View只有位置和內(nèi)容更新掉幀問題就煙消云散了。這里我再多說一句長列表優(yōu)化沒有銀彈。不同容器的處理差異很大程度上決定了你最終的用戶體驗。所以架構(gòu)選型階段一定提前確定好“滾動性能”這條紅線別等頁面堆到一定程度再去補。7. 從容器到生態(tài)調(diào)試器、DSL轉(zhuǎn)換與跨端擴展7.1 完善調(diào)試器是遲早要補的課如果自研容器只跑內(nèi)部業(yè)務(wù)不做調(diào)試工具其實勉強能用但生態(tài)伙伴一旦接入沒有調(diào)試器就是災(zāi)難。業(yè)務(wù)方不能一上來就跟你說“請在日志里找一下”而是需要能打斷點、能看邏輯層變量、能檢查原生的視圖層級。調(diào)試器的技術(shù)本質(zhì)就是把JS引擎暴露的調(diào)試協(xié)議比如V8的Inspector協(xié)議、JSC的REPL接到開發(fā)工具上去。容器側(cè)要做的是開啟調(diào)試模式下把當(dāng)前引擎實例暴露到本地的調(diào)試端口然后在開發(fā)工具里配置代理讓工具與引擎之間走一遍遠(yuǎn)距離調(diào)試握手。這個過程實際上比聽起來簡單真正花時間的是把通信鏈路和現(xiàn)有的Bridge協(xié)議統(tǒng)一起來不能搞一套獨立通道否則后面維護(hù)成本翻倍。7.2 讓上層業(yè)務(wù)用Vue/React語法寫小程序直接讓業(yè)務(wù)團(tuán)隊用純JS加原生標(biāo)簽寫小程序接受度普遍不高。要讓容器成為生態(tài)最理想的狀態(tài)是上層開發(fā)者用自己熟悉的框架開發(fā)Vue或React打包工具最終編譯出一棵樹讓容器運行時來渲染。這條路有成熟范式可借鑒寫一個編譯器插件把Vue組件編譯成我們?nèi)萜鞯腣Node也就回到了第5.2節(jié)講的原生渲染模型里。Vue組件的data就是邏輯層的狀態(tài)render函數(shù)對應(yīng)生成虛擬節(jié)點樹事件綁定直接映射到節(jié)點props里的onClick。業(yè)務(wù)開發(fā)寫的是Vue組件等到這一層之后完全被化進(jìn)了容器體系。這一步做完了容器就不再是自己的玩具而是團(tuán)隊技術(shù)規(guī)范的統(tǒng)一出口。7.3 鴻蒙、桌面端與硬件端的容器平移容器架構(gòu)一旦設(shè)計成“核心運行時 平臺適配層”跨端平移的工作量就變得可控了。平臺適配層要處理的只有三塊JS引擎的接入方式、原生View體系的翻譯、宿主能力SDK的橋接。拿鴻蒙舉例適配層要做的事非常清晰——通過N-API接入方舟引擎View體系從UIView/ViewGroup翻譯成ArkUI的Column和Row每個原生的API調(diào)用重新映射一遍就好了。同樣的道理也適用于未來的PC桌面端甚至嵌入式設(shè)備里如果跑得動QuickJS這套架構(gòu)可以原樣搬過去跑。我在遷移過程中最深的感受是**架構(gòu)前期所有的抽象工作在后期都會變成平移時的福報。**如果你現(xiàn)在的容器沒有明確分“核心和適配”兩層這個教訓(xùn)是早晚要交的。寫到最后我想說一點個人的體會。小程序容器最迷人的不只是那套技術(shù)棧而是它帶來的思維方式轉(zhuǎn)變你不再做一個個獨立的App頁面而是造一個能讓業(yè)務(wù)自己生長、自己演進(jìn)的東西。這個轉(zhuǎn)變會倒逼你從架構(gòu)層面去思考能力邊界、性能上限、生態(tài)建設(shè)這些都是普通業(yè)務(wù)開發(fā)里難得機會。如果團(tuán)隊已經(jīng)決定邁出這一步我給的建議是**第一版不要追求大而全先把“包下載、跑JS、渲染簡單組件、調(diào)用原生能力”這四件事打通就好。**其他的等用戶反饋出來了再說。容器這套東西是逐步長出來的不是一次設(shè)計出來的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色情成人五月天| 亚洲影视第一页| 91成人国产综合久久精品蜜月| 精品一区二区三区蜜桃| 日日橹狠狠爱欧美超碰| 操操逼操操逼操操逼逼| 熟女探花啪啪| 国产超碰人人操| 超碰久久.com| 青青11操操操操操操操操| 校园春色五月天| 日本欧美成人片AAAA| 色妇综合网| 欧美色九九九| 最近2019中文字幕国语免费版| 日韩丨制服丨中文|在线| 亚洲精品无码少妇久久| 无码区蜜乳| 大香蕉92| 久久97资源 网| 六月天婷婷| 亚洲中文一区二区三区| 免费久久一级毛片大黄| 国产一级内射高清视频| 黑人干亚洲| 诱惑人妻欧美一区在线播放| 欧美高清16| 女人的久久久| 亚洲精品国产熟女久久久久久| 精品一级毛片在线观看| 欧美视频一| 女人天堂网| 伊人97色天使| 麻豆这里只有精品| 久操凹凸视频| 成人性爱AV在线免费观看| 色综合一本| 日韩成年人性爱视频| 蜜臀99久久精品久久久久| 99re28在线观看| 亚洲日韩东京热一区| 亚洲男人天堂2019| 91大学精品激情戏| 九久9精品| 日本免费亚洲欧美| 爱爱动态120秒| 亚洲综合五月天| 婷婷久草| 综合色播| 免费中文在线| 九九黄色视频在线观看| 国内精品伊人久久久久影院会| 午夜福利激情在线视频| 丰满人妻区一区二区三| 欧美双插| 51久久夜色精品国产麻豆| 后入 亚洲 美女 射| 翔田千里AⅤHD无码| 久久亚洲一区女同性恋中文字幕| 91亚洲色图| 欧美亚洲国产91在线| 国产精品免费久久久久久久久久 | 久久久影院| 69久久| 囯戸精品高潮呻吟旡码| 偷拍盗拍亚洲色图图片| 影音先锋少妇| 混色激情av| 亚洲五月丁香花狠狠干一区二区三区 | 91中出在线| 国产精品久久发布| 国产婷婷一区| 亚洲少妇免费视频\| 死我十八禁| 国产9l 大屁股| 日韩av在线精品观看| 操操逼视频| 国产超碰在线| 精品一区二区三区四区女| 亚洲交换| 一级A片女人高潮叫床| 丁香婷婷大香蕉| 蜜臀久久99精品久久久久免费观| 一区 欧美 日韩 麻豆| 中文字幕乱偷人妻久久艾草网| 情色五月天网| 伊人午夜福利视频| 九九九久久久| 日韩精品碰碰| 第四色色综合91| 清纯唯美综合| 2024人人操人人摸| 97精品久久久久中文字幕| 天天日天天干少妇日| 日本免费专区| 九99久久| 日本成人A片免费看| 久久免费精彩视频| 天美传媒精品一区二区| 日韩无码嘿咻黑热久| 96久久久精品| 一级黄色性爱A级片| 人人透人人操| 日韩精品电影| 欧美超碰97| 日本国产成人亚洲精品无码| 九九九九免费高| 四虎国产精品永久在线囯在线| 97精品一区二区视频| 91一区二区| 久久久91福利姬| 国产精品一区av在线| 久久久9品一区二区三区| 97jingpin| 最新岛国大片| 日韩精品操少妇| 射久久| 超碰久热| 亚洲精品97久久| www超碰| 热热色AV| 视频二区美腿丝袜制服人妻欧美| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 亚洲乱码国产乱码精网站| 色五月综合| 国产又长又大又粗的视频| 免费一级性爱久久| 97久久免费| 亚欧免费| 欧美一区二区三区成人性生活| 麻豆尤物视频网| 五月天婷婷色| 无遮挡又黄又刺激的视频| 欧美拳交在线播放| 美女被啪到深处抽搐视频| 98色网| 日韩91网站| 激情干在线| 玖玖爱伊人玖玖爱| 大香蕉婷婷| 天美传媒AV在线播放| 中文字幕视频一区视频二区| 欧美激情性久久久久久| 亚洲男人的天堂网| 婷婷色中文字幕| 男同专区一区二区三区在线| 9/A片| 婷婷色综合欧美日韩| 99自拍B亚洲 | 男人的天堂啪啪啪啪啪蜜桃不卡| 日韩电影在线观看网址| 日本 欧美 亚中文字幕| 久久日韩精品一区二区| 精品制服美女中文一区二区三区| 色97| 亚洲少妇色| 人人做,人人操,人人摸| 天天日骚逼熟女| 亚洲18禁| 六月丁香啪啪| 秋霞网—男女啪啪亚洲免费体验区| 99re6国产精品99re| 久久熟女人| 手机在线人成免费视频| 日韩亚洲欧美中文字幕| 玖日综合网| 狠狠干狠狠干| 乱伦图av| 五月婷网站| A男人的天堂| 婷婷五月天影院| 亚洲高清无毛一区二区| 老司机香蕉久久久久| 伊人久久大香线综合无码| 91精品久久综合熟女| 天堂69亚洲精品中文字| 日日妻色网| 综合色图亚洲欧美| 性爱1区| 国产亚洲精品农村妇女 | 天天精品| 99999re| 色综合1991| sss视频华人在线| 色婷婷综合视频| 超碰国产精品久| 精品人妻伦一区二区三区久久| 国内精品999| 国产亚洲国产超碰| av网页一区二区三区| 日本αv| v91av| 大粗鳼巴久久久久| 老熟乱一区二区三区四区| 久久一留热品黄| 婷婷五月色| 丁香五月天堂| 久久ww| 免费的黄片wwwwww| www.狠狠| 午夜精品一区二区三区三上悠亚| www.av在线观看| ?亚洲伊人伊成久久人综合网| 欧美性爱第一页久久| 狠狠操狠狠操操| 亚洲图片另类| 四虎AV在线播放| 色色青青久久| 中日韩久久久免费看| 日韩av三四区| 99999精品成人| 91 丝袜在线| 久久久久一本一区二区青青蜜月| 后入人妻一区| 精品一久久久| 好湿好紧视频| av毛片aaaaa免费看| 国产日韩手机视频在线| 在线观看高清AV| 欧美一区二区三区四区综合| 日韩精品在线观看观看| 男女激情黄色网址| 一个色导综合| 小情侣高清国产在线视频| 久久高清欧美国产| 天天日天天插| 久久仑合| 超碰碰激情97+久| 嗯阿好爽好紧| 素颜老阿姨乱情色| 九久久九九久视频| 免费少妇一区二区| 久久性爱城| 超碰79人人乐| 亚洲男人综合网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 亚洲国产日韩欧美熟妇在线| 欧美图片偷拍| 亚洲综合性网址| 看看日B真人视频| 大香蕉线| 交换娇妻呻吟声不停中文字幕| 最新中文字幕在线亚洲| 嗯嗯嗯好爽| 亚洲精品天天影视综合网 | 这里只有精品视频在线观看麻豆 | 亚洲欧美在线丝袜| 国产一级高跟丝袜| 亚洲成人综合在线| 欧美综合制服在线| 欧美97爱| 99热在线播放| 日本中文字幕熟妇| 国产精品福利资源在线尤物| 香蕉久久国产AV一区二区| 有码免费观看| 亚洲精品九九九| 女人午夜视频777| 区日韩亚洲乱码av电影| 综合97久久| 久久国产在线一区二区| 99色综合| 97色欧洲| 操逼逼无码| 久久精品视频28| 强乱老妇中文字幕| 九九探花视频在线观看| 夜夜青青无码影院| 蜜乳成人AV| 吻戏激情性巴克| 欧美偷偷网| 无码免费在线观看黄色片| 国产av尤物| 久久熟女精品不卡一区| 精品久久久久久中文| 色性荡荡荡荡视频| 诱惑网综合| 一区二区三区精品视频| 欧洲亚洲人人爽爽视频| 91午夜无码| 日韩AV中文字幕电影| 亚洲97精品| 日韩国产中文字幕| 大鸡巴久久| 熟女乱伦二区| 日韩99999| 色丁香久久| 男人天堂久久精品不卡| 强奸乱伦大香蕉网| 99日免费视频中文字幕| 无码高清专| 少妇高潮九九九九九九九| 新婚人妻扶着粗大强行坐下| 日本中文字幕一区| 国产美女mm131爽爽爽爽| 色老久久| 欧亚免费视频| 97K超碰在线| 大香蕉520| 婷婷午夜清品久久久久久久性色视频观| 另类小色呦| 人人爽夜夜玩视频| 亚洲国产欧美中日韩成人综合视频| 亚洲性图91| 久热香蕉精品在线视频| 国产美女自拍视频| 青青青操| www.yeyecao| 欧美亚州色的图| 夜夜爽夜夜高潮夜夜爽| oumeisetu综合| 久久成年片色大黄全免费网站| 青青草在线成人视频| 91人妻人人澡人人爽人人精品| 熟妇人妻一区二区| 最新三级网址| 夜夜黄| 亚码激情| 亚洲啪啪视频一区二区| 久草精品在线| 99操| 狠狠色婷婷| 国产操逼网站亚洲一级黄色| 色麻豆AV| 床上啊啊啊一区二区三区| 91美女在线观看| 搞中出视频在线观看| 成人免费福利在线观看| 国产精品成久久久久午夜午夜| 欧美老妇女内射网址| 91动漫操逼视频| 九九热国产| 成人在线视频一区| 深夜啪啪啪视频免费| 中文字幕一区二区三区字幕| www男人天堂| 欧美狠狠操| 欧美性生活综合| 日本一道在线播放高清| 亚洲激情欧美色图| 色综合20p| 激情深爱五月天| 超碰成人公开| 久久久9999| 久久精品99久久久久久| 宅男91视频在线播放| 网页导航五月天免费一二三区 | 校园春色 男人天堂| 青椒国产97在线熟女| 91日韩国产欧美亚洲另类精盘州至城都| 久久久久久久久久久久久久9999| 中国国国产一级特黄毛片| 天美精品原创av片国产| 91超碰在线观看| 人妻人人澡人人爽人人| 欧美亚洲玖玖玖| 国产三区免费在线观看| 99re热有精品视频国产| 中日韓欧美高清| 日韩99神马视频片| 亚洲熟妇图片| 极品白嫩福利在线| 啊啊啊啊啊啊在线看| 尤物一级在线免费观看| 美中日韩无码| 欧美日韩操逼动图| av天堂精品久久| 2019精品国产无码成人| 中文?日韩?免费?精品| 午夜欧美精品久久久| 青青草原成人| 久久久久久少妇| 色娱乐色呦呦夜夜夜夜av| 欧美最婬乱婬爆婬性视频| 亚洲色啪| 人人乐大香蕉| 亚洲色图久久成人| 欧美日韩色图片| 极品色社| 亚洲国产一区二区三区在线| 五月天精品| 国产女人9999| 久久久月天| 国产熟码AV| 日韩无码服务区| 日韩BBN| 熟妇女伦乱视频视频| 91熟女少妇| 久草电影网| 天堂av最新电影网| 热热色91| 翔田千里爆乳巨臀无码| 萌白酱自拍视频| 亚洲中文字幕三级在线| 熟女精品一区二区三区| 去干网最新版| 国产无套粉嫩白浆在| 日韩av乱伦| 亚洲天堂人妻一区二区| 综合久欧洲| 二三四区精品| 天天天干977| 国产久久久久久| 欧美岛国精品在线观看| 日韩免费在线视频观看| 另类专区在线观看| 日日干日日操五月天伦理视频| 亚洲综合另类欧美久久久| 大香蕉 222| 老熟女中文字幕高清| 人妻蜜桃臀| 超碰在线人人射| 国产精品一区av在线| 久久无码电影| 久久这里都是精品| 在线小视频| 亚洲欧美综合网| 家庭乱伦麻豆| 色香色欲天天综合网天天来吧| 久久久青青草| a片 xxxx受爽视频| 国产aⅴ无码片毛片一级网站| 这里都是精品在线观看| 国产二区三区粉嫩在线| 不卡视频一区蜜桃视频 | 偷拍 精品另类 凸凹了四区| 啊啊啊啊好疼视频| 三级日本一区二区三区| 伊人久久大香大香线蕉中文| 亚洲人在线成线成人| 超碰视97中文| 97超碰磁| 超碰亚洲97| 久久精品一区二区三区蜜桃臀| 精品在线蜜臀| 欧美综合区| 日日夜夜青青草母狗| 欧美色综合网| 91精品无码人妻系列| 青青草在线成人视频| 懂色影视久久| 麻花豆传媒剧国产MV出差| 精品一区二区啪啪啪| 日本免费一区二区不卡| 欧美偷拍区| 91大胆欧美| 婷婷激情一区二区三区俺也去| 欧美男人一区| 欧美手机在线综合| 香蕉黄色一级视频| 久久久久久久久久久97| 密臀在线一区尤物| 成人午夜视频免费播放| 欧美韩日精品资源| 免费观看网黄| 黄色二级片网站| 天天网综合| 久久露脸国产老熟女| 亚洲男人的天堂网| 欧美色视频在线| 国产传媒1234区| 91亚州| 亚州国产精品乱| 乱人乱色一区二区三区免费| 图片区小说区| 我爱操| 91|九色|国产熟女| 青青草原av| 337p大胆噜噜噜噜噜91Av| 久久久九精品| 国产AV超爽| 亚洲欧美天| 欧美黄片视频在线观看免费 | 亚洲 中文 欧美 日韩 在线| 精品无码一二三四区| 91亚洲欧美| 超碰97最新人妻| 色黄色美女大长腿午夜视频| 亚洲999综合| 精品国产乱码久久久久久口爆网站 | 激情婷婷丁香| 8050午夜少妇无码| 96超碰网| 久久久久久久久久久人妻| 欧美日韩在线视频网站| 美女97超碰| 一牛影视成人片免费| 久久久久久久久久久久九| 岛国黄色短视频| 嫩草 我啊~嗯~在线| 操逼日韩无码 | 一,爱啪啪,在线免费视频| 91欧美丝袜| 久热大香蕉| 97精品网| 精品视频久久区| 色99在线| 人人看人人插| 青青草原成人| 顶级少妇BT天堂| 久草视频观看视频在线| 欧美综合天堂| 久久綜合很很很| 强奸乱伦αv片| 天天综合网日韩| 97视频620| 爱我干综合| 亚洲天堂在线怕怕视频| 精吧天堂| 久久久久久久九九九九九九| 国产精品岛国片在线观看| 先锋女优在线观看视频| 欧美在线视频播放| 精品四五区| 日韩 欧美 另类 人妻| 欲香欲色综合天天伊人| 精品久久久不卡一区二区| 99久久婷婷国产综合| 亚洲密乳AV| 不卡二三区人妻少妇| 97色涩| 97天天爽| 99热超碰在线| 大香网站| 色婷婷六月丁香七月婷婷| 亚州色图欧美色图| 青娱乐手机日韩在线视频| 97九色人妻| 人妻熟女av国产网站| 国产一区二区免费福利片| 青青草原伊人网| 中文字幕人乱码中文字的预防方法| 日韩欧美麻豆 | 麻豆区久久久久亚| 欧美A√综合网| 另类图片五月| 超碰人妻在线| 久久 国产精品 一区| 国产性久久久| 亚洲高清无毛一区二区| 国产h小视频在线观看免费| 亚洲玖玖爱| 丝袜天堂网| 伦理弟一页| 中文乱码99| 91视频观看网站| 六九九九| 日本三级久| 欧洲色| 激情第四色| 91狠狠综合久久久久久| 国产成人网站在线观看| 9999免费精彩视频| www.色99| 长长久久88视频| 综合网色| 狠狠干综合| 人妻熟女一区在| 五月激情小说| 97人肏| 97视频网站在线观看| 成人夜夜爽| 日韩97视频!在线| 国产精品久久发布| 久久骚少妇| 精品久久九| 国产外初女出血视频| 欧美日日人人天天| 中文字幕一区二区三区人妻不卡| 五月天婷婷社区| 人妻欧美| 久综合国内精品自在自线| 亚洲综合另类小说色区亚洲成av人片在www| 亚洲黄片免费在线播放| 超碰成人公开| 亚洲成人免费在线| 97资源制服丝袜| 精品久久久久久久| 91免费看一区二区三区| 日韩精品国产一区二区| 亚洲国产成人高清在线| 很很干很很操| 中文字幕人妻色偷偷久久皮| 超碰是碰在线观看| 蜜臀久久久99久久久久 | 91色五月俺来也| 极品色电影院| 精品午夜福利| 成人av影院在线观看| 国产亚洲美日韩Aⅴ中文字幕无码成人| 天天操人人操狠狠插| 2021久久国产综合精品青草| 色色无码| 性性久久| 欧美78P| 日韩欧美大力操| 狠狠色婷婷7777久| 国产又大又粗又长视频在线| 国产精品午夜精品| 亚洲精品自拍| 日本精品成人无码| 亚洲av总站| 天天操福利视频综合网站| 国产精品99999| 国产一区二区精品久久99| www.夜夜操| 大香网伊人久久综合网eew| 久九九九九九九九热| 亚洲精品白浆高清久久久久久| 国产成人无码网站在线视频| 久草色悠悠在线视频| 男女啊啊啊啊啊| 秋霞久久亚洲精品成人| 青青草在线视频人人想人人上| 天天热精品| 最新日日夜夜天天干干| 97久久久久久久精| 麻豆天天躁天天揉揉AV| 午夜福利免费福利视频| 亚洲91色在线| 丝袜亚洲综合| 天天日天天色| 久久久久久人| 秋霞免费AV| 久久骚少妇| 视频国产成人精品日本亚洲18| 九久9精品| 一区不卡在线观看av| 久超碰在| 91精品人妻一区二区三区蜜桃| 亚洲色图殴美色图激情乱伦| 搞中出视频在线观看| 懂色Av| 花野真衣| 97精品视频| 天美传媒国产原创中文字幕亚洲欧美另类 | 亚洲男人的天堂亚洲| 97国产精选| 久久亚洲AV成人精品无码| 伊人操操| 日韩国产不卡在线视频| juliaann丝袜大战黑鬼| 色在线综合| 屌妞视频久久久久久久| 久久久久久久九九九九九九| 丝袜综合| 免费超碰97在线观看| 麻豆国产成人精品| 久久亚洲AV无码专区首页| 性爱欧美五月| 乱欲一区二区| 啊啊啊啊,啊啊好多水| 91三级理论片播放器| wuyechaopeng| 日韩成人网址| 亚洲天堂男人的天堂| 人妻夜夜爽天天爽麻豆三区网站| 欧美色人| 啊啊啊啊操死我了| 探花在线免费观看视频国产一区| 色www精品视频在线观看| 久干9操| 国语精品av| A V少妇特黄三级| 中英熟女操女| 天堂射| 精品国产肉丝袜在线拍国语| 日韩有码专区| 求求你操操我| 国产美女高潮叫床视频| 蜜屁av| 精品无吗久久| 久久高清欧美国产| 亚洲男人天堂AV| 欧亚第一综合网| 在线观看黄色电话| 91青青草| 香港日本韩国人妇99www.wccm20| 亚洲一区二区中文字幕| 熟女人妻一区二区三区| 久久久久久九九九九-美女久久久久久久-成人AV | 日韩无码专区| 99超碰色| 国产精品久久久久亚洲av| 亚洲同性aV综合| 三级片大波波| 日韩久久激情精品| 国产偷人伦激情在线观看| 国产精品不卡一区二区三区| 五月丁香啪| 久久天天艹| 91熟女丨91老女人| 欧美亚洲涩涩| 91 在线亚洲| 久久久精品无码亚免费| 黑人娇小av在线播放| 中字一区| 国产乱弄免费在线视频。| 国产无马av| 加勒比在线观看一区二区| 国产精品日日摸天天碰| 97精品国产精品免费观看| 国产精品一二三免费网站| 欧美黄片免费在线观看视频| 欧美色女人| 国产黑白丝在线| 欧美猛交黑寡妇中文字幕| 美女黄色一级A视频| aaaa黄片| 尤物视频一区| 日韩欧美亚洲自拍偷拍| 黄色交缠性感爆操91国产精品免费一区二区三区 | 亚洲区限制级 99| 97亚洲资源| 深夜啪啪啪视频免费| 91狼人| 精品国产人成在线| 岛国免费视频在线| 五月丁香激情四射| 丰满人妻-区二区三区免费看| 亚州色阁| 天堂资源站| 亚洲揄拍网| 色眯眯射| 欧美一二三区四五区| 日韩亚洲美女一区久久| 另类在线| 爱射综合| 97色色视频| www.色婷婷色综合| 亚洲AV成人无码一区二区三区在线观看 | 婷色五月| 天天干天天干天天| 欧美日韩国产在线| 天天射影院| 夜夜肏2021| 亚州色交| 肉丝网站91| 国产性刺激| 精品国产乱码久久| 日日操夜夜操天天操免费观看麻豆| 国产精品一区二区麻豆| 老鸭窝在线视频播放| 国产自偷| 超碰97COm中文| 婷婷五月天激情四射| 我要色综合网| 国产91亚洲精品一区二区三区| 亚洲AV无码秘 蜜桃臀国精产品| 天天噜| 天天射天天操天天干天天吃2018| 日韩熟女三十乱伦| 91精品微拍福利| 蜜桃视频成a人v在线| 性爱乱伦网址| 99久久久99久久91熟女| 国产11页| 97色97好| 欧洲一区二区三区四区在线观看| 午夜福利合集| 欧美狠狠干| 国产亚洲精品久久久久小| 中文字幕精品一区二区精| 久久性爱大全| 男人天堂婷婷五月天校园春色| 青青操97| 最新9久久久9免费视频| 78m成人视线| 中文字幕第9页萱萱影音先锋| 少妇无码av专区线| 在线国产探花| 麻豆AV一区二区| 日本顶级天天操狠狠操夜夜操中文字幕| 啊啊啊啊在线播放| 欧美色女人| 日韩欧美tv一区二区在线观看| 岛国成人av在线播放网址| 夜夜操天| 色呦色呦色精品| 老熟妇91| 欧美强奸乱能| 亚洲精品一区二区三区新线路| 人妻熟女一区二区三区在线| 色97欧美| 日本不卡高清视频| 亚洲色偷偷色噜噜狠狠99网| 爱爱久久| 97色碰| 伊人久久大香大香线蕉中文| 美日韩一卡二卡三卡免费人妻精品| 久久少妇人妻| 精品国产乱码久久| 无码日韩网站| 插老姨肥穴| 综合久久2017| 粉嫩av在线一区二区| 啊嗯好大视频在线观看| 9精品久久久久| 国产av又色又爽又黄| 偷窥自拍亚洲色图| 97超碰精品图片| 欧美人妻久久精品二区三区| 久久啊啊| 老司机射| 蜜桃久久久久久久久久久久| 七月婷婷综合| 久99热| 久久人妻一区二区三区高清| 亚洲色图尤物视频| 亚洲熟女国产综合另类| 日产精品久久久一区二区| 日韩国产欧美伦理在线| 艾草av| 91人妻在线视频| 99视频内射三四| 青青草国产一区二区三区| 亚洲欧洲日本精品中文a∨| 屌逼传媒| 成人无码欧美一级A片狼牙直播| 一区二区三区四区免费视频| 三级网站超变态精品| 人人操人人93| 久草久热| 超碰免费97| 国产黄a三级三级三级av在线看| 风间由美日韩欧美久久| 中文字幕性感少妇av| Julia Annxxxxx| 人人操人人摸人人看人人干| 97精品视频免费| 伊人操你| 嫩草影院永久在线制服丝袜| www.yeyecao| 久久綜合很很很| 日逼逼免费看| 国产亚洲精品美女| 超碰成人公开| 青青欧美| 国产精品久久久三级无码| 亚洲综合另类色图| 精品超碰国产| 日韩精品一区二区人人人| 99色色网| 亚洲有码视频二区| 国产黄a三级三级三级av在线看 | 狠狠爱综合网| 91爱| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 国产高清在线自在拍69| 日本一级性爱| 2020中文字幕在线观看| 99热综合在线| 日韩操p| 激情小说亚洲图片| 激情五月天丁香社区| 少妇三p| 夜夜嗨AV蜜臀av| 天堂俺去俺来也www久久婷婷| 人妻黑丝袜电影| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 国产最新小视频在线播放下载| 久久天天艹| 九七毛片九九毛片| 五月天激情四射| 毛片久久| 九九九草| 天美国产精品| 久久国产性爱| 91中出视频| 五月天伊人| 人看人人摸人人操| 日日夜夜免费| 国产精品丝袜久久亚洲不卡| 91站街按摩店老熟女熟女| 97日韩| 97网址97| 又大又长又爽| 天天天天天天天天天天干美女| 久久伊人影院| 动漫av中文| 五月丁香啪啪啪| 中文精品一区二去| 91中出视频| 亚洲中文电影| 成人情色一区二区| 欧美日韩国产三级黄色| 欧美在线天堂| 伊人久久亚洲色欲综合网站 | 国产精品一区二区久久精品| 无码人妻毛片丰满熟妇精品区| 亚洲精品 大香蕉| 午夜福利在线合集| 成人精品无码| 少妇色欲综合网2| 欧美熟女激情| 91五月天| 91三级理论片播放器| 欧美亚洲情色| 老鸭窝成人| 九九九久久久久| 9久综合网| 手机在线看片免费人成视频| 亚洲?V高清一区二区三区尤物| 欧美日韩国产人人| 久久综合久久综合人久久夜精品| 免费综合亚洲中文| 夜夜天天噜狠狠爱2021| 欧美高清第一页| 91 亚欧| 大香蕉综合久久| 久久天堂婷婷网| 伊人五月天激情| 另类小说综合网| 人人搞人人插人人操| 欧美精品系列| 成人一区二区三区四区| 啊…啊…操我用力操我| 囯产乱伦一区二区三女| 亚洲三区视频| 国产对白刺激视频| 欧美性爱第一页久久| 国产熟妇 码视频户外直播| 久久AV色| 躁躁日曰躁2020| 欧美中文字幕一区| 成人精品视频一区二区| 亚洲 图片 综合91| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 九草九九九| 97超碰精品成| 亚洲熟久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 午夜男女爽爽爽在线视频| 高清无码 国产精品| 狠日操| 91艹B视频| 色欲蜜臀AV| 看大黄色大片原件| 国产成人无码啪| 亚洲国产婷婷在线播放| www.av在线视频| 国产精品黄色三级av| 污污汅18禁网站在线永久免费观看 | 五月婷婷五月天| 五月天色图影视| 97超碰色五月| 亚洲日韩青青草色月| 久久大线蕉一区| 少妇色综合| 女人18精品一区二区三区| 亚洲日精品| 综合网91| 三级AV入口| 久久久麻豆精品| 色婷婷在线视频| 精彩视频日韩| 九九自拍伦理| 天美av在线| 天天综合网日韩| 久久免费99精品久久久久久| 韩国黄片aaaa| 我爱大香蕉| 少妇被玩视频二三区| 色婷婷久久综合超碰| 999九九九九国产动| 亚洲欧美洲综合| 日本人妻丰满熟妇久久久久久| 操婢日韩| 日本99久久| 厕所偷拍在线| 亚洲精品黑丝| 97天天摸天天爽| 夜夜操青青草| 99综合网| 情色五月天网| 久久9精品| 国产精品成人久久一区二区三区| 亚洲色图亚洲无码强奸乱伦| 欧美日不卡| 久久夜精品一区二区三区| 亚洲激情在线| 正在播放国产精品一区| 亚洲九九夜夜| 天天日天天操VV| 天堂性色| 国产网红精品| 极品丝袜无码| 后入式999| 欧美人与动性人交a| 黑人黄片在线免费观看| 性色高清在线| 精品美女少妇一区二区| 26uuu偷拍亚洲欧洲综合| 欧美色色色| 边做饭边操逼逼| 青青操狠狠撩| 精品一区二区三区四区女| 91在线观看,天天综合| av在线播放国产一区| 三级三级三级日本99| 色网综合网| 欧美岛国精品在线观看| AV九九| 土豪酒店各种姿势玩弄极品幼稚| 国产精品九九九| 翔田千里av一区二区三区| 久草男人天堂| www熟女乱伦com| 中文字幕在线观看丝袜| 美女网站黄页| 高潮的A片激情扒开一区| 美女露胸露尿口| 欧美一区二区| 午夜福利视频在线一区| 欧美精品偷拍| 高清国产精品福利网站| 天天射影院| 97久操| 国产高清无码一区二区三区四区皇冠| 久久鲁夜| 国产精品爱欲| 一区二区 日韩 欧美 国产 传媒| 亚洲图片欧美| 吻戏激情性巴克| 欧美se综合| 婷婷色五月激情| 黑人精品欧美一区二区蜜桃| 国产亚洲精品玖玖玖在线观看| 亚洲激情天堂网| 日韩免费高清大片在线| 大香蕉综合| 国产欧美在线观看免费观看| 97午夜剧场日韩| 精品少妇999| 九九毛片这里只有精品| 玖玖爱影院| 少妇 综合| 成·人免费午夜在线观看| 夜夜肏2021| 91夜色| 北京专精特新企业招聘信息| 男人天堂网站| 特级大荫道BBwBBwBBW| 日韩成年人性爱视频| 啊嗯好大视频在线观看| 欧美大香蕉久| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 综合久久欧美| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 青青草国产一区二区三区| 93人人操人人| 国产熟码AV| 天天做天天爱天天高潮| 青青色在线观看| 打av高清| 男人高清无码一区二区| 欧美激情内射| 欧美体内射精| 天天日日日射| 蜜臀中文字幕| 亚洲情色婷婷五月天| 9色国产精品一区粉嫩| 男人天堂站| 欧美性爱无码一区二区三区| 99国产精品免费| 日韩精品碰碰| 97超碰色中文字幕| 韩国一级婬片A片AAAAA| 热热色91| 精品然女一区二区| 国产呦精品一区二区三区下载| 97操碰| 德国一二三不卡| 亚洲蜜乳av| 超碰吊日色| 麻豆九九九| 日美免费黄片| 国产97视频| 伊人一区二区三区| 日本道久久综合色色| 夜色综合| 丝袜亚洲91| 人妻少妇久久久| 亚洲好看强奸乱伦| 综合亚州欧美| 超碰天天久久79| 日本理论在线| 国产午夜精品理论片一二三区区| 欧美 亚洲 综合 制服 另类| 任你艹| 成人乱人伦一区二区| 青草精品视频一日本久久久久网站| 日本淫色网| 亚洲最大无码中文字幕网站| 中文久久| 欧美日韩人妻精品一区二区三区| 啊a一区在线| 中文字幕 国产 精品| 国产精品一二三区18| 欧美中日韩XXXX| 色娱乐色呦呦夜夜夜夜av| 欧美色棕合| 日本在线不卡一二区| 久久无码一区二区二三区性色| 国产91美女视频| 亚洲性猛交| 热天堂一区二区| 依人大香蕉| AV无码久久久精品| 欧美的性爱网站免费| 精品久久久久久久| 97国产中文| 亚洲日韩久久精品一区| 成人AV素股で擦久久| 婷婷精品| 91成人精品在线播放| 性暴力欧美猛交在线直播| 久久精品熟妇丰满人妻99| 久久成人精品| 熟妇国产免费一区| 伊人国产av| 97舔舔| 亚洲激情网一二三四区| 国产AV久久久蜜爱影集| 亚洲AV秘 精品久久老牛影视| 青娱乐福利99| 亚洲九九九| 超碰97COm中文| 婷婷丁香人妻 | 精品十八在线观看| 亚洲天堂久| 操老熟女AV| 精品乱码在线观看| 激情黄色五月天| 欧美熟女丝袜| 久日综合网| 亚洲熟女乱色一区二区三区久久久 | 天天综合官网| 夜夜爽夜夜操| 操东北女人| 日本人妻最新在线中| 精品999999| a级免费在线观看| 人人么人人操| 久久久久亚洲熟妇熟女| 久久久久久久强迫| 日韩有码 一区二区三区| 欧美精品精品一区二区| 大香蕉乱级| 天天插夜夜操| 久操网址| 91精品国产高清久久久久久,亚洲成人| 日韩探花精品在线视频| 大伊香蕉在线视频免费| 亚洲精品成人| 亚洲中文字幕噜噜噜久久久| 野狼激情网| 裸模AV女优| 久久久久斤小| 999色欧美中文字幕|