亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

從Electron到自研C# UI引擎:200KB內(nèi)核實現(xiàn)0.2秒啟動

從Electron到自研C# UI引擎:200KB內(nèi)核實現(xiàn)0.2秒啟動 寫這篇文章的起因是我這段時間把一個基于 Electron 的桌面工具徹底推翻重寫用一套自研的 C# UI 引擎 XchyUI 換掉了原來的 Web 套殼方案。內(nèi)核壓縮到 200KB 級別啟動耗時從 3 秒壓到 0.2 秒以內(nèi)內(nèi)存占用從 300MB 掉到 50MB 上下。整個過程踩了不少坑也積累了一些能直接復用的經(jīng)驗今天就是想把這套東西的來龍去脈、設計取舍、核心實現(xiàn)和實測數(shù)據(jù)攤開聊一聊。想在桌面端擺脫 Electron 體積和性能包袱、對 UI 渲染底層原理感興趣的 C# 開發(fā)者應該能從里面找到自己需要的東西。1. 先把賬算明白200KB 和 Electron 的差距到底在哪1.1 Electron 體積與內(nèi)存的真實賬單Electron 的本質(zhì)是一個把 Chromium 瀏覽器內(nèi)核、Node.js 運行時和你的應用代碼打包在一起的發(fā)行方式。Chromium 本身就是個上億行的龐然大物它的多進程架構決定了每開一個窗口至少要拉起一個 GPU 進程、一個渲染進程再加若干輔助進程。我原來的應用僅僅是一個內(nèi)部數(shù)據(jù)看板加報表工具功能談不上復雜打包出來 exe 安裝包接近 180MB安裝完成之后磁盤占用輕松突破 600MB運行時內(nèi)存基本穩(wěn)定在 250MB 以上切換到復雜頁面時峰值可以沖到 400MB。這在開發(fā)機上還不覺得什么放到客戶配置一般的辦公電腦上風扇狂轉(zhuǎn)、點擊卡頓是常有的事。自研 XchyUI 之后整個應用的 UI 層程序集大小只有 180KB 左右加上輔助類庫也穩(wěn)定在 200KB 級別。這里的 200KB 指的是自研 UI 引擎本體的文件體積不包含 .NET 運行時。用 .NET 的 single-file publish 把應用連同框架一起發(fā)布出去完整產(chǎn)物也才 35MB 左右磁盤占用 100MB 出頭運行時內(nèi)存 40~60MB。這組數(shù)字不是拿不同配置的機器硬對比出來的而是在同一臺機器上反復測量的結果。1.2 Web 套殼方案被忽略的隱性成本很多人選擇 Electron 或者類似的 Web 套殼方案理由是寫起來快、樣式好調(diào)、前端生態(tài)豐富。這幾句話在原型階段沒問題但放到真實產(chǎn)品里隱性成本會一點點顯現(xiàn)出來。首先是啟動鏈路過長。Electron 要依次完成加載 Chromium 內(nèi)核、初始化 V8、啟動 Node.js、加載應用腳本、構建渲染進程的 DOM 樹、執(zhí)行前端框架的掛載邏輯。這條鏈路做任何一步優(yōu)化都要和瀏覽器內(nèi)核打交道你幾乎沒有掌控力。你以為自己寫的是一款桌面應用其實你只是把瀏覽器和 Node.js 縫在了一起。其次是內(nèi)存模型。前端頁面的所有 DOM 節(jié)點、JavaScript 對象、CSS 樣式和圖片解碼數(shù)據(jù)都堆在渲染進程的堆里而 Node.js 和 Chromium 各自維護獨立的運行時狀態(tài)兩邊通過 IPC 反復拷貝數(shù)據(jù)。哪怕頁面本身很簡單瀏覽器內(nèi)核的基礎開銷也省不掉。我遇到過僅僅打開一個主窗口、沒有任何復雜邏輯內(nèi)存就穩(wěn)定在 120MB 以上的情況——其中真正屬于業(yè)務數(shù)據(jù)的部分連 5MB 都不到。第三是事件鏈路的時延。Web 套殼中一次鼠標點擊要走完渲染進程捕獲事件 → 序列化 → IPC 發(fā)給主進程 → 主進程執(zhí)行邏輯 → 序列化 → IPC 回渲染進程 → 更新 DOM → 瀏覽器重排重繪。這條鏈路從原理上就決定了它的延遲不可能太低尤其是頻繁交互的場景掉幀、卡頓幾乎是必然的。1.3 自研引擎的收益邊界與選型判斷做任何技術決策之前先想清楚收益邊界。自研 UI 引擎確實能解決 Electron 的體積、內(nèi)存、啟動速度問題但它也要求你具備對渲染底層機制的基本理解同時意味著你不再擁有前端生態(tài)里那些開箱即用的圖表庫、富文本編輯器、UI 組件庫。我的判斷標準是如果應用界面復雜度一般交互密度高對資源占用有硬性要求且團隊本身有 C# 功底那么就非常適合走自研路線。反過來如果你的應用重度依賴網(wǎng)頁生態(tài)里那些復雜組件界面每天都要換皮膚、調(diào)樣式又或者迭代速度要求極高那還是繼續(xù)用 Electron 或者考慮 Avalonia 這類成熟框架更穩(wěn)妥。XchyUI 的定位就是夠用且可控。它不做你根本用不上的各種瀏覽器特性不做通用 DOM 解析不做復雜的 CSS 盒模型而是聚焦桌面應用真正高頻需要的按鈕、輸入框、列表、樹、表格、簡單的自定義繪圖面板。這個邊界決定了它能夠做到很小也決定了它能夠快。2. 200KB 內(nèi)核是怎么做到的XchyUI 的核心架構2.1 剝離 Chromium 后一個 UI 引擎剩下什么很多人聽到自研 UI 引擎會下意識覺得這是個大工程動輒要寫幾萬行代碼。實際上如果暫時放下瀏覽器那套巨獸體量一個面向桌面應用的 UI 引擎只需要解決六個子問題窗口創(chuàng)建和消息循環(huán)——調(diào)用操作系統(tǒng)提供的原生窗口機制繪制圖元——在窗口客戶區(qū)輸出文字、矩形、線條、圖片輸入事件——把鼠標、鍵盤、觸摸事件分發(fā)到具體控件布局計算——按規(guī)則算出每個控件的位置與尺寸控件樹與生命周期——組織界面結構并管理重繪樣式與主題——讓控件長得不那么原生且保持一致性Electron 為了兼容所有網(wǎng)頁技術把每個子問題都做成了通用抽象代價就是體量爆炸。XchyUI 的做法恰恰相反按照桌面應用的實際情況做最強約束??丶涫瞧胀ǖ?C# 對象樹布局只支持垂直流式、水平流式、絕對定位和表格定位樣式只有純色背景、邊框、字體、間距這些有限屬性。約束越多實現(xiàn)越簡單越容易做到極致體量。2.2 渲染層的選擇為什么不直接上 SkiaSharp做 C# UI 引擎第一個選型難題就是渲染后端。備選項無非幾個GDI、SkiaSharp、SharpDX/Direct2D、OpenGL。SkiaSharp 功能強大跨平臺文字渲染質(zhì)量高但它本身是一個相當龐大的圖形庫原生部分加載進進程就占不少內(nèi)存包裝層也不小。再疊加微軟的字體管理系統(tǒng)和圖像解碼庫內(nèi)核體積很難保持在 200KB 量級。SharpDX/Direct2D 性能更好但它是原生 COM 接口的薄封裝使用難度大對象生命周期管理要非常小心哪怕一個 COM 引用釋放遺漏都可能引發(fā)直接的地址訪問錯誤比如 C# 調(diào)用 C 層時常見的 access violation c0000005。對于一個小內(nèi)核的項目引入這么厚的底層依賴性價比不高。XchyUI 最終選擇了 GDI 作為第一代渲染后端。理由很直接它吃內(nèi)存少調(diào)用鏈短C# 里用 System.Drawing 就能穩(wěn)定輸出文字和圖形。雖然 GDI 的渲染性能上限不如 Direct2D但是對于一個界面層操作遠多于高頻動畫的桌面應用來說60fps 的需求是一定滿足得了的——我后面會給出實測數(shù)據(jù)。提示這里有個常見誤區(qū)。很多人覺得 GDI 慢是因為拿它去渲染整屏不斷變化的高幀率游戲畫面。對于普通表單和業(yè)務界面GDI 的真正瓶頸并不在繪制速度而在無腦整窗重繪。做好局部失效重繪之后性能完全夠用。2.3 消息循環(huán)與事件分發(fā)的最小實現(xiàn)Windows 應用程序的窗口系統(tǒng)是一個消息驅(qū)動模型。鼠標點擊、鍵盤輸入、窗口移動、尺寸變化Windows 都會把行為封裝成消息投遞到目標窗口的消息隊列里。你的 UI 框架只要持續(xù)循環(huán)接收這些消息再轉(zhuǎn)成自己的事件就完成了事件分發(fā)。XchyUI 的消息循環(huán)是所有控件的心臟。它的基本結構是一個 while 循環(huán)調(diào)用 Win32 的 GetMessage 取出消息TranslateMessage 做鍵盤按鍵翻譯再 DispatchMessage 把消息交還給窗口過程函數(shù)。窗口過程里XchyUI 收到 WM_PAINT 就觸發(fā)整體重繪收到鼠標移動消息就把坐標換算后交給命中測試邏輯從而找到這個點落在哪個控件上再把對應的鼠標事件派發(fā)給它。這里要強調(diào)的是消息循環(huán)和渲染循環(huán)的關系。XchyUI 并不是拿一個獨立的死循環(huán)去不斷刷幀。沒有界面變化時消息循環(huán)會阻塞在 GetMessage 上CPU 占用率幾乎降到零。只有當消息到達、或者某段代碼顯式觸發(fā)重繪時才走一遍繪制流程。這種做法保證了百分百的省電和安靜也是桌面應用該有的基本素養(yǎng)。2.4 布局引擎從坐標計算到 Flex/Stack 布局Electron 里的布局是由 CSS 盒模型計算的瀏覽器為了一小段樣式要跑完整的計算鏈。XchyUI 不需要這套東西。我把它設計成了一套極簡的測量-安排兩階段布局流程。測量階段每個控件根據(jù)自己的內(nèi)容、字體和尺寸策略計算出理想大小。安排階段容器控件按照自己的布局規(guī)則把子控件逐個擺放到具體位置。最核心的容器是 StackLayout參數(shù)只有方向垂直或水平和間距Spacing沒有百分比、沒有媒體查詢。另一個是 GridLayout把可用區(qū)域按行和列切分對表格類界面特別實用。這兩下子看起來樸素的過分但實際用下來會發(fā)現(xiàn)桌面應用 90% 的界面布局就是一行一行往下排加一個二維表格。自研引擎的最大好處就是你可以按照實際需求去砍功能而不必被通用方案拖累。3. 手把手構建 XchyUI 跑道渲染循環(huán)、事件系統(tǒng)與組件封裝3.1 第一個可用的渲染循環(huán)先看一段最核心的代碼。這是 XchyUI 消息循環(huán)和渲染觸發(fā)的骨架去掉了一些邊界處理保留了主干邏輯。public sealed class XchyApplication { private readonly IntPtr _hwnd; private readonly ListControl _rootControls new(); private bool _dirty true; public void Run(Window mainWindow) { _hwnd mainWindow.Handle; mainWindow.Show(); while (true) { if (GetMessage(out var msg, IntPtr.Zero, 0, 0)) { TranslateMessage(ref msg); DispatchMessage(ref msg); } else { break; // 收到 WM_QUIT退出應用 } if (_dirty) { RenderFrame(); _dirty false; } } } private void RenderFrame() { var buffer new Bitmap(WindowWidth, WindowHeight); using var g Graphics.FromImage(buffer); g.Clear(_backgroundBrush); // 先布局再繪制 LayoutEngine.Instance.Arrange( _rootControls, new Rect(0, 0, WindowWidth, WindowHeight)); foreach (var control in _rootControls) control.Draw(g); using var screen Graphics.FromHwnd(_hwnd); screen.DrawImageUnscaled(buffer, 0, 0); } }這里用了一個 內(nèi)存位圖 一次性拷貝 的雙緩沖思路。先在內(nèi)存里畫好整幀再一次性拷貝到窗口顯示區(qū)避免用戶看到撕裂的繪制過程。邏輯上整個渲染循環(huán)不就兩件事消息來了處理界面臟了重畫。消息循環(huán)負責響應動作渲染循環(huán)負責呈現(xiàn)結果二者通過 _dirty 標志位解耦不會出現(xiàn)事件處理時強插一個繪制的混亂局面。3.2 控件樹與命中測試的完整實現(xiàn)控件樹是 XchyUI 結構上最重要的數(shù)據(jù)結構。每個控件要么是葉子節(jié)點要么是內(nèi)部節(jié)點內(nèi)部節(jié)點負責持有子控件集合。結構就是這么簡單。public abstract class Control { public string Name { get; set; } string.Empty; public Rect Bounds { get; set; } public bool Visible { get; set; } true; public bool Enabled { get; set; } true; public Control? Parent { get; internal set; } public ListControl Children { get; } new(); public void Add(Control child) { child.Parent this; Children.Add(child); } public virtual Size Measure() { // 子類根據(jù)內(nèi)容計算理想尺寸 return new Size(0, 0); } public virtual void Draw(Graphics g) { if (!Visible) return; foreach (var child in Children) child.Draw(g); } public virtual bool HitTest(Point p) { return Visible Enabled Bounds.Contains(p); } public virtual void OnMouseDown(Point location, MouseButton button) { } public virtual void OnMouseUp(Point location, MouseButton button) { } public virtual void OnMouseMove(Point location) { } internal virtual void RaiseMouseDown(Point location, MouseButton button) { // 深度優(yōu)先優(yōu)先把事件交給最后繪制、看起來在上層的子控件 for (var i Children.Count - 1; i 0; i--) { var child Children[i]; if (child.HitTest(location)) { child.RaiseMouseDown(location, button); return; } } OnMouseDown(location, button); } }命中測試的規(guī)則也很直接收到鼠標點擊坐標后從控件樹的最末端節(jié)點往根節(jié)點走誰的面積覆蓋了這個點就把事件給誰。因為最后繪制的控件視覺上在最前面所以按子控件列表的倒序去檢查第一個命中的就是用戶真正想點的那個控件。這套機制雖然樸素但已經(jīng)足夠在按鈕、列表項、樹節(jié)點之間做出正確的事件路由。3.3 組件庫封裝Button、TextBox、List 的設計思路有了控件樹和事件路由接下來就是封裝具體控件。以一個最簡單的 Button 為例它需要處理三種視覺狀態(tài)普通、懸停、按下每種狀態(tài)對應不同的背景色。繪制時根據(jù)狀態(tài)填充圓角矩形再居中繪制文字。XchyUI 中按鈕的實現(xiàn)大概只有 100 行但它完整覆蓋了外觀表現(xiàn)和交互反饋。TextBox 復雜一些。它要管理插入符位置、支持響應鍵盤輸入、處理光標閃爍、支持選中區(qū)域的反白顯示。早期版本我直接在控件內(nèi)部用一個普通的 TextBox 成員變量去承接輸入后來發(fā)現(xiàn)這會造成 WinForms 控件的全權耦合最后改用純 GDI 繪制文本和插入符自己實現(xiàn)鍵盤字符替換邏輯。這樣既減少了外部依賴也讓控件體積和渲染可控性更好。List 是另一個高頻組件。我最初實現(xiàn)的是全部可見項逐一繪制的樸素版本。支持 10 個、20 個條目沒問題但條目一旦達到幾千個逐一繪制就會拖慢每幀速度。最終采用了虛擬化方案只繪制出現(xiàn)在可視區(qū)域內(nèi)的那幾十個條目。這個優(yōu)化屬于 UI 引擎常見的基礎設計但對性能的提升是立竿見影的。3.4 局部失效區(qū)域優(yōu)化不做無腦全窗重繪自研引擎最容易被忽視的一個細節(jié)是哪些區(qū)域需要重繪。一開始我也是最簡單的辦法控件 Event 觸發(fā)任何變化就設 _dirtytrue然后整窗口重畫。這在控件少時無所謂窗口大了或者控件多了無謂的整窗繪制會直接影響幀率。XchyUI 最終實現(xiàn)了區(qū)域失效機制。每個控件維護一個 IsDirty 標記父容器負責把子控件的臟區(qū)域合并成一個或多個矩形區(qū)域記錄到 _invalidRegions 集合。RenderFrame 時只對這些矩形區(qū)域做裁剪繪制最后用 DrawImageUnscaled 配合 Graphics 的 SetClip 把對應部分拷貝到窗口上。這樣高頻改動的小控件不會再拖累整個窗口的重繪。提示實現(xiàn)局部失效的復雜度會明顯上升因為裁剪區(qū)域、控件交疊、縮放變換都要處理。如果項目第一版趕進度建議還是先整窗重繪把功能跑通之后再用特性分支去升級局部失效。性能優(yōu)化永遠不要發(fā)生在需求還沒穩(wěn)定的階段。4. 性能驗證與真實數(shù)據(jù)怎樣才算秒殺4.1 1000 控件壓力測試的實測數(shù)據(jù)我拿一個真實場景做了壓力測試窗體里有 1000 個自定義卡片控件每個卡片包含一個標題、一行描述、一個圖標區(qū)域。分別測量了靜態(tài)界面無交互時的幀率、滾動列表時的事件處理吞吐量、以及內(nèi)存占用。用 XchyUI 跑這套界面靜態(tài)幀率穩(wěn)定在 60fps觸發(fā)滾動和點擊時幀耗時幾乎恒定在 14ms 左右CPU 占用率在無交互時是 0.4% 以下持續(xù)滾動的峰值也只有 15%。同樣的界面我用 Electron 做了一版對照靜態(tài)內(nèi)存大約 260MB高速滾動時幀率會出現(xiàn)明顯下降到 40fps 以下CPU 峰值可達 45%。差距的主要來源是 Electron 每一次滾動都要經(jīng)過 DOM 樹更新、樣式重算和瀏覽器合成而 XchyUI 只是在畫布上把卡片新位置繪制一遍。4.2 內(nèi)存與啟動時間的可復現(xiàn)測試方法性能對比不能只憑體感要有一套可復現(xiàn)的測量方法。在 XchyUI 里我做了這樣三個測試步驟任何人都可以直接抄走啟動耗時從進程啟動開始計時到主窗口完成第一幀繪制結束。用 Stopwatch 包裹 Main 函數(shù)入口之后到 Run 函數(shù)進入首輪 RenderFrame 完成的位置多次取中位數(shù)。內(nèi)存占用用 GC.GetTotalMemory(false) 做增量測量判斷托管堆增長情況再用 Process.WorkingSet64 觀察進程整體的工作集。后者受 .NET 運行時預熱影響較大最好在運行 30 秒、各項功能點過一遍之后再讀數(shù)。滾動流暢度維護一個固定長度的幀耗時隊列在滾動循環(huán)里每次 SwapBuffer 后記錄耗時統(tǒng)計 P9595 分位值。如果 P95 低于 16ms基本可以認定在普通 60Hz 屏幕上是流暢的。按照這套方法實測下來的結果前面已經(jīng)列了這里再補一個最有說服力的對比同一個業(yè)務流程從點擊按鈕到界面完成刷新XchyUI 的平均時間是 9msElectron 大約是 87ms。這個差異在業(yè)務界面上直接體感就是秒開和輕微遲滯的區(qū)別。4.3 XchyUI、Electron、WPF 的橫向?qū)φ罩笜薠chyUIElectronWPFUI 層程序集體積約 200KB瀏覽器內(nèi)核約 150MB框架約 3MB完整安裝包體積約 35MB含 .NET 運行時普遍 150MB~250MB約 50MB 起啟動到首幀時間0.1~0.2s1.5~3s0.2~0.4s靜態(tài)內(nèi)存占用簡單窗口40~60MB150~300MB80~120MB渲染原理GDI可選后端升級Chromium 合成器DirectX 合成器跨平臺計劃中三平臺全覆蓋僅 Windows前端生態(tài)可用性無完整極弱這張表格不是為了貶低 Electron 和 WPF而是想說明不同技術棧的本質(zhì)差異Electron 用一個完整的瀏覽器內(nèi)核來解決通用問題WPF 用一個龐大的框架體系來解決富媒體表現(xiàn)問題而 XchyUI 是定義問題邊界之后做減法的產(chǎn)物。三種方案適合三種不同訴求關鍵是看清楚你的訴求是什么。4.4 高 DPI、字體渲染、線程調(diào)度等細節(jié)坑在測試和真實使用中有幾個細節(jié)會讓結果出現(xiàn)劇烈波動必須單獨說。高 DPI 是第一大坑。如果進程沒有正確聲明 DPI 感知Windows 會把你的窗口自動縮放導致所有坐標比例錯亂畫面模糊點擊區(qū)域?qū)Σ簧?。我最終把清單里的 dpiAwareness 設成了 PerMonitorV2再用 QueryDpiAwareness 做運行時檢測。這套處理做完在 125%、150% 縮放環(huán)境下窗口和對齊才是正確的。字體是第二大坑。GDI 的文本渲染在默認字體下會有明顯的鋸齒中文尤其容易發(fā)虛。我的經(jīng)驗是優(yōu)先使用微軟雅黑并開啟 TextRenderingHint.ClearTypeGridFit同時對字體做一次 Fallback 鏈——微軟雅黑 → 宋體 → 系統(tǒng)默認字體。這樣即便目標機器沒有安裝微軟雅黑中文也不會變成方塊。線程調(diào)度是第三大坑。所有 UI 相關的繪制和控件屬性更新必須發(fā)生在創(chuàng)建窗口的同一個線程上。如果在后臺線程直接改控件坐標或者觸發(fā)重繪輕則閃爍重則直接崩潰典型的 access violation c0000005 就是這么來的C# 層訪問了已被釋放的 GDI 對象。XchyUI 內(nèi)部做了一個簡單的 Dispatcher 封裝所有外部更新請求統(tǒng)一通過 PostMessage 投遞到 UI 線程執(zhí)行。5. 實戰(zhàn)記錄從 Web 套殼遷移到 XchyUI 的完整過程5.1 遷移前的架構評估與組件盤點如果你現(xiàn)在也想做類似的遷移第一個建議是不要急著寫代碼先盤需求。我把原有應用里的界面元素逐個列成清單按鈕、輸入框、下拉框、表格、樹、彈窗、消息條、自定義繪圖面板、右鍵菜單。然后逐個評估XchyUI 現(xiàn)成有沒有、需要新寫、需要改設計。最終結論是 60% 的控件可以直接復用25% 需要少量定制15% 需要重寫思路。這個評估過程還有個額外收益它會逼著你去砍那些看起來挺炫但沒人用的界面裝飾。脫離 Web 生態(tài)后很多花里胡哨的動效自然就不做了產(chǎn)品反而更聚焦。另一個重要決策是數(shù)據(jù)綁定。Web 套殼的前端框架都有響應式綁定XchyUI 一開始沒有設計這套東西。我的過渡方案是控件數(shù)據(jù)源 刷新接口每個復雜控件持有一個數(shù)據(jù)源列表數(shù)據(jù)變化時調(diào)用控件的 Refresh()控件在內(nèi)部重新讀取數(shù)據(jù)并標記臟區(qū)域。這個模式寫起來比響應式綁定繁瑣但邏輯鏈路很短排查問題很容易。數(shù)據(jù)頻率不高的場景下這種寫法完全夠了。數(shù)據(jù)綁定決策還影響了一個核心數(shù)據(jù)結構。從 Web 套殼遷移到一個內(nèi)聚框架最大的區(qū)別就是所有狀態(tài)有且僅有一個權威來源。Web 時代可能 Model 一套、DOM 一套、狀態(tài)管理再存一份XchyUI 只認 C# 對象里的字段。別小看這個約束它直接解決了大量數(shù)據(jù)不同步的舊 Bug。5.2 自定義主題系統(tǒng)與樣式處理Web 套殼里改樣式是頻率很高的操作。自研引擎如果讓每個控件把顏色、字體寫死團隊迭代起來會非常痛苦。我做了一個極簡主題系統(tǒng)主題是一個 Theme 對象里面有背景色、前景色、邊框色、按鈕不同狀態(tài)的顏色、字體名稱和尺寸、間距常量等若干字段。所有控件在繪制時只從當前主題讀取顏色不硬編碼。切換主題只需要換一個 Theme 實例然后全窗標記重繪。因為 GDI 里繪制矩形和文字的成本極低哪怕是整窗重繪也能在幾毫秒內(nèi)完成主題切換這個平時最容易卡出掉幀的操作反而成了 XchyUI 最具表現(xiàn)力的功能之一。5.3 常見問題排查速查表現(xiàn)象可能原因排查思路與解決動作窗口渲染為空白重繪時機被漏掉WM_PAINT 沒有觸發(fā)布爾標記檢查 Invalidate 是否真的調(diào)用了確認渲染代碼是否在 UI 線程執(zhí)行點擊控件沒有反應消息循環(huán)被阻塞或者命中測試順序錯誤檢查事件處理里是否有 Sleep/耗時操作打印鼠標坐標和控件 Bounds 對比文字發(fā)虛、有鋸齒GDI 默認渲染模式不對設置 Graphics.TextRenderingHint ClearTypeGridFit中文顯示方塊字體 Fallback 缺失配置字體鏈優(yōu)先用系統(tǒng)自帶的微軟雅黑高 DPI 下坐標全亂進程沒聲明 DPI 感知修改 manifest 設置 PerMonitorV2并動態(tài)查詢 DPI內(nèi)存緩慢上漲每次繪制創(chuàng)建了 Bitmap 未釋放或者事件沒有解綁用 Dispose 模式管理 Bitmap檢查控件樹移除時是否清理事件引用后臺線程 Crash跨線程操作 UI 控件統(tǒng)一走 Dispatcher不要直接訪問控件屬性5.4 打包發(fā)布與裁剪策略XchyUI 項目的目標是小打包環(huán)節(jié)也要堅持這個思路。首先確保所有用不到的程序集不進發(fā)布目錄。然后使用 .NET 的 single-file publish 把所有托管程序集打成一個文件這是最直觀的體積削減。之后經(jīng)過 ILLink 裁剪把沒有被引用的框架代碼從最后的產(chǎn)物里移除。這里有個值得注意的細節(jié)ILLink 裁剪雖然能縮小體積但它對反射破壞非常敏感。如果代碼里用了 Type.GetType 或者反射調(diào)用必須給對應的程序集標記 DynamicDependency否則運行時會直接 TypeNotFound。我在 XchyUI 的早期版本就踩過這個坑上線測試時控件創(chuàng)建報了一大堆反射錯誤最后是把加載邏輯改成顯式注冊表才繞開反射機制的不確定性。發(fā)布時還要保留 PDB 文件。自研引擎沒有成熟的崩潰上報體系如果你連符號文件都沒有用戶那邊報一個 access violation 你根本沒法定位。PDB 加上 Windows 事件日志里捕獲到的異常堆棧是排查崩潰類問題最重要的兩張底牌。6. 下一步值得探索的方向6.1 跨平臺與國產(chǎn)化適配XchyUI 目前以 Windows 為主但架構上沒有把非 Windows 的路堵死。核心的控件樹、布局引擎、事件路由邏輯全部用純 C# 實現(xiàn)不依賴任何 Windows 程序集。只有最底層的創(chuàng)建窗口 消息循環(huán) 圖形上下文這一層與平臺相關我把它隔離成了 IPlatformBackend 接口。如果后續(xù)要支持 Linux可以在 XLib/Wayland 上實現(xiàn)這個接口macOS 則走 Cocoa國產(chǎn)化環(huán)境的難點主要在 CPU 架構而非操作系統(tǒng)——大部分國產(chǎn)系統(tǒng)本身就是 Linux 內(nèi)核但指令集可能是 ARM 或者龍芯的 LoongArch。.NET 官方已經(jīng)支持多種架構的 Linux 發(fā)布理論上只要 IPlatformBackend 的接口實現(xiàn)能正常編譯整套 UI 引擎就能在這些平臺上跑起來。這條路我還沒有完整走通現(xiàn)階段只能算一個方向但它讓 XchyUI 擁有一個比 Electron 輕量得多的跨平臺想象空間。6.2 渲染后端升級路線SkiaSharp、SharpDX 都只是備選GDI 作為第一代渲染后端確實簡單穩(wěn)定但它的抗鋸齒質(zhì)量、圖形變換能力、復雜路徑填充效果都存在上限。后續(xù)如果要支持更細膩的圓角陰影、漸變、變換動畫就需要考慮更強大的渲染后端。我的規(guī)劃不是立刻替換而是先把渲染層抽象成 ICanvas 接口GDI 只是其中一個實現(xiàn)。然后可以逐步添加 SkiaSharpCanvas、SharpDXCanvas 這些實現(xiàn)并且針對不同后端去做性能對比。這里的關鍵是渲染后端可以換但控件樹結構、布局引擎、事件系統(tǒng)絕不能因為換后端而重寫。接口隔離的意義就在于讓變化局限在最小范圍內(nèi)。注意追加渲染后端要考慮的不僅是代碼工作量還有體量變化。SkiaSharp 的原生庫會拉高內(nèi)核體積SharpDX 的 COM 對象生命周期也要投入不少精力。收益與代價需要反復權衡別為了營造技術很牛的感覺去堆疊依賴。6.3 開源計劃與社區(qū)共建XchyUI 現(xiàn)在處于自用順手、開源需整理的狀態(tài)。如果要開源許可證我會選 MIT 或者 Apache-2.0并且會整理出三類倉庫內(nèi)容核心引擎、組件庫、示例模板。社區(qū)共建的價值在于可以讓更多從業(yè)者幫忙補齊真實場景里的邊界情況——不同輸入法、不同顯卡驅(qū)動、不同企業(yè)安全軟件的兼容性這些問題永遠只能靠足夠多的真實場景暴露出來。我還沒有確定開源的具體時間表但可以確定的是即使不開源我也會持續(xù)把 XchyUI 用于自己的實際項目讓它保持小而鋒利的特點而不是膨脹成一個誰都不需要的通用框架。最后分享一點個人體會。整個遷移過程中我最深的感受不是Electron 不好而是技術選型要對齊真實約束。如果你的產(chǎn)品身處資源受限環(huán)境或者用戶對啟動速度和內(nèi)存占用極其敏感那 Electron 這套技術棧的底層代價就會壓得你很難受。自研引擎的價值不在于標榜我不用 Electron而在于它逼著你去理解 UI 是怎么工作的——一個按鈕從點擊到屏幕反饋經(jīng)歷哪些環(huán)節(jié)、一次滾動如何保證不卡、一個窗體如何做到秒開。這些理解在任何技術棧里都不會浪費。不要被性能焦慮綁架更不要被工具路徑綁架——輕量自有輕量的價值。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
韩国免费播放一级毛片| 亚洲精品97久久中文字幕| 久久色情| 日韩亚洲欧美中文字幕| 精品免费囯产一区二区三区| 色噜噜狠狠色综无码久久合欧美| 天美传媒AV在线| 大香蕉十区| 人妻一区二区三区视频| 精品欧美日韩在线观看| 欧美亚洲日韩人妻在线观看| 91被操| 熟女露脸激情自拍视频| 亚洲天堂男人在线| 黄色电影在线播放综合网站| 99热在线只有精品| 97精品综合久久网| 婷婷激情五月| 天天干天天燥| 91久久婷婷| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产97色在线| 久久精品高清无码一区| 亚殴在线| 色婷婷九月天天综合| 久久97视频| 嗯嗯啊啊视频一区二区三区| 色色色999| av资源在线播放天堂| 99久久精品国产系列| 四虎在线免费视频| 青青色综合| 九九热精品免费视频| 国产精品色| 99精彩视频| 欧美老妇曰批的视频| 色噜噜国产精品视频一区二区| 精品少妇一区二区三区| 大茄子熟女AV导航| 99热婷婷一区二区三| 蜜桃久久一区| 精品人妻一区二区三区不卡断| 亚洲女优有码无码高清| 夫妻天天操岛国视频| 97超碰超欧美。| 国产精品经典一卡久久久 | 欧美色日| 丰满人妻一区二区中文| 国内外毛片在线观看| 日本东京热大香蕉a片| 夜夜操av亚洲一区二区| 久久亚洲天天做| 97激情97激情| 超碰久草| 桑老女人九区| 性感美女91影视| 国产一线二线三线av| 成人久久久| 熟妇综合一区二区三区| 久久久久夜夜夜夜| 日本成人A片网站| 国产亚洲精品无码三区| 亚洲成人美女无吗| 蜜桃丰满熟妇av无码区不卡| 日韩欧美久久婷婷网站| 日本视频一区二区三区| 五月婷婷基地| 久久久久久久一级黄色打同平台| 中文字幕在线观看第二页| 精品久久久久久久久久久久 | 97久久网| 成人五月天丁香激情综合| 精品久久久av无码免费| 视频分类 国内精品| 一本一道波多野毛片中文在线| 十八禁av无码免费网站APP| 永久免费av无码网站国产app| 精品国产一区二区三区在线播出| 日韩无码专区| 麻豆国产成人精品| 日韩中文字幕精品一二三事国产精品| 五月情色天| 99无码| 精品视频免费在线一区| 精品毛片久久久精品毛片| 澳门特级毛片免费观看| 夜夜狼人妻| 97视频在线观看网站| 国产97视频| 一起草日韩| 久久极品一区二区| 97国产天堂岛| 亚洲在线欧美| 另类小说五月天| av东京热男人的天堂| 九九自拍伦理| 蜜臀无码视频在线观看| 狠狠操狠狠插| 欧洲色综合| 国内偷自视频区视频综合 | 青青草原香蕉日本Ap| 100啪啪视频大全| 国产91精品福利在线| 人妻少妇久久久| 一区二区亚州激情久婷婷欧美| 绯色一区二区三区不卡少妇| 丁香六月激情| 亚洲天堂精品日韩电影| 中文字幕性感少妇av| 日韩AV电影网站| 热热色综合网| 在线人人人人人人精品超| 91红杏| 精品午夜福利| 国产欧美一级在线观看| 少妇色综合| 男人天堂黄片| 蜜臀久久99精品久久久久久成人小说 | 夜嗨影院| 伊人大香蕉在线| 人人妻人人爽人人精品| 久久曰曰| 人人人摸人人| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 亚洲色图欧美| 骚货| 人妻精品免费一二三区| 人妻天天爽夜夜爽爽| 超碰 国产熟女精品一区| 手机在线看片免费人成视频| 综合欧美色图| 久操大香蕉手机视频在线看 | 嫩草影院在线观看精品| 老司机香蕉| 女同在线视频一区| 18禁的网站在线| 嗯嗯啊啊的视频| 18禁超污无遮挡无码免费网| 久久黄黄黄| 久操大香蕉手机视频在线看| 一级人妻性爱视频| 欧美亚州色的图| 思思热免费视频观看| 狠久久| 天天干天天日天天射黄色| 久9re热视频这里只有精品| 97色插| 影视综合无码少妇| 啊啊啊啊,啊啊好多水| 亚洲丝袜色| 亚洲精品国语在线播放| 在线情色电影 91大 | 探花激情视频| 超碰97中文| 欧美97视频| 91人妻Pr| 欧美日韩激情无码专区| 久久偷偷色综合蜜桃| 在线无码操| 欧美精品一二三| 在线综合 亚洲 欧美中文字幕 | 五月婷婷激情综合| 久热精品在线国产| 欧美性夜| 91激情国产| 香蕉99秘 精品一区丁香| 强奸乱伦日韩AV| 久久久久久久| 天堂精品| 欧美大香蕉97| 亚熟在线| 殴美,日韩国产伦精品| 级做a爱无码性色永久免费| 熟女露脸激情自拍视频| 精品一区二区三区四区女| 新婚人妻扶着粗大强行坐下| 麻豆三极片| 大香蕉色欲AV| 久久精品一区| 久久超碰久| 亚洲女毛多水多21P| 91激情国产| 久草新免费| 欧美性爱视频免费一区一A| 蜜臀久久99精品久久久| 女人天堂网| 欧美一级欧美三级在线观看| 九九九久久久久| 能看的AV| 日本一二区免费| 亚洲成人免费中文字幕| 最新日本中文字幕| 久操97| 人人操人人摸超碰| 亚洲激情在线| 日日躁狠狠躁天天躁精品| 久久婷婷亚洲欧| 中日无幕一二三四区| 五月开心网| 激情接吻视频久久久久久| 亚洲天堂五月天国产| 人人妻人人爱人人玩| 校园春色美腿丝袜 | 搡老女人老91妇女熟女| 色综合久久夜色精品国产天堂| 91人人看| 激情露脸爱| 久久久久久中文字幕中文字幕最新| 女同女同恋久久级三级| 日日操丁香五月天| 精品国产91av一区二区三区| 尤物黄色在线观看网站| 日韩国产欧美伦理在线| 亚洲精品人妻吞精av | 中文字幕av片| 传媒在线观看一区二区三区| sewuyueav| 亚州性色| 精品一区二区三区国产| 大香蕉视频一二三区| 狠狠久久手机视频精品| 顶级丝袜熟女一区二区三区 | 97超碰免费生活| 97超碰总站| 欧美激情亚洲情色| 精品国产乱子伦一区二区三区,精品一 | 欧美人与动性人交a| 日韩av无码网站| 欧美Aⅴ| 色激情综合网站| 成人一道本免费视频| 性色AV蜜色av色欲av| 特级特黄一级毛片免费| 韩日精品四区| 蜜桃久久久久久久久久久久| 超碰欧美97资源| 一区二区三区一亚洲中文字幕、综合区灬| 精品久久久久综合无码| A一区片| 国语av最新自产拍在线观看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 天天添天天干电影| 欧美情色男人的天堂| 一区二三区四区视频大全套| 国内毛片欧美香蕉精品| 丁香色婷婷| 中文字幕日产av人| 精品人妻高清麻豆av| 欧美欧美啪啪视频| 欧美视频一区二区在线| 久久国产精品一级二级三级| 久欲AV| 国产91精品在线免费| 日本免费一级AAA大片器 | 91黑人狂躁丰满熟妇| 欧美丰满少妇xx高潮| 婷婷综合五月天| 91爱做| 夜夜爽夜夜爽| 亚洲AV无码国产成人| 99自拍B亚洲| 色天使AV天堂| 一级@啪啪视频| 爽爽淫人网| 色香伊人| 亚洲91在线播放影院| 一区二区三区精品黑丝白丝酒店对鸡 | 五月婷婷性爱| 丝袜天堂网| 欧美黄色手机在线观看| 色综合一区二区三巨| 少妇精品久久久八区九区| 麻豆国产97在线| www.久久| 熟妇人妻精品一区二区| 欧美国产伊人久久久久| 亚洲国产蜜臀系列在线观看| 中文字幕国产| 精品免费国产二区三区| 日本一区二区亚洲综合| 亚 欧 美 综合| 东京热伊久| 午夜啪啪片| 97久久久精品| 操逼逼中文字幕| 亚洲少妇色图自慰直播| 亚洲天堂一区二区久久| 国产青视频| 亚洲影院成人| 亚洲精品天天影视综合网 | 少妇一级婬片免费放一级a性色.| n1038 一二三区| 麻豆久久精品亚洲精品88| 婷婷在线播放| 91性色| 99热亚洲天堂| 日本熟女免费視颖| 熟女久久久| 另类小色呦| 尤物视频偷拍免费| 日韩在线女优天天干| 白丝一区| 精品九九九九九九九| 日韩免费福利在线观看| av天堂加勒比| 五月丁香激情综合| 欧美色偷偷| 国产精品久久发布| 亚洲色图欧美色图日韩色图| 国产AV线| 97久久久久久久精| 蜜乳av一区二区| 97操在线| 色噜噜婷婷| 亚洲91色| 粉嫩AV一区夜夜嗨| 在线国产探花| 欧美第一页| 国产真实野战在线视频| 亚洲天天更新| 欧美 综合| 国产操操日韩三级黄| 亚洲影视高清第一页| 五月婷色| 国产中文字幕在线点播| 一本色道人妻久久| 试看福利| 97超碰美国| 黄色大片免费在线| 亚洲图片偷拍欧美| 中文字幕视频一区视频二区| 黑人无码一区二区| 国产 热久久久久国产精品| 午夜a成v人电影| 黄色视频60分钟| 宅男91视频在线播放| 国产精品久久久无码aV去| 人妻少妇精品久久久| 色综合色欲色综合色综合色综合| 欧美性xxxxx狂欢| 色眯眯av| 久9久| 欧亚乱色熟女一区二区| 日本精品一级二级三级| 超碰在线免费一区二区三区| a人欧美综合天堂麻豆| 日本护士高潮| 久操凹凸视频| 国产午夜精品理论片一二三区区| 99久久免费看精品国产一区| 伊人久久大香线综合无码| 人人操av| 亚洲天堂 视频你懂的| 激情黄色片在线观看| 这里只有97精品| 久久一本大香蕉| 厕所偷拍在线| 色婷婷电影网| 国产三级电影免费观看| 在线无码网站| 久久久久久电影| 97超碰人人操人人操| 日本ZZ高免费A级视频| 91黑丝美女| 嗯嗯嗯啊啊啊操的我好爽| 婷婷综合激情| 久操操| 日本福利二区视频| 色综合色综合网| 日本Xx性爱| 国产一区二区三区免费视频在性观看 | 亚洲欧洲色情高清| 白丝AV网站| 精品久久青青草| 91超级碰碰| 3p国产欧美99热| 激情综合网五月婷婷五月天| 亚洲图片偷拍视频区| 久久夜黄色无码A级大片| 国模私拍一区二区三区神乳| CCYY草草影院地址入口| 亚洲成aⅴ人片不卡无码| 国产肏逼网站| 日韩在线一区高清在线| 国产探花精品在线| 在线啊v一区| 干婷婷综合网| 久久性爱城| 国产激情片在线观看| 极品白嫩美女白浆成人福利在线看| 亚洲欧洲精品视频发布| 欧美特大黄一级片片免费| 不卡一区二区日本视频| 久久艹逼视频| 2001天天操| 中文字幕丝袜人妻| 欧美国产一区二区三区麻豆传媒| 校园春色亚洲无码| 日本熟妇自慰性高潮一区二区三区| 蜜臀一二三区| 啊啊啊啊啊啊在线| 操操吧亚洲乱伦视频| 国产91啪| 久久曰曰| 色综合潮| 中文字幕欧美日本乱码一线二线| 欧美男人的天堂| 99热在线播放| 亚洲欧洲综合成人av一区| 嫩草一区二区在线观看| 防屏蔽在线视频| 日韩精品高清资源在线| 国产偷人妻精品一区二区在线| 色亚州人久干视频在线观看免费版| 久久九操在线观看| 超碰美国| 国产无马视频| 天天综合网~69| 97精品97| 97这里只有精品| 久久91视频| 天天干,天天日| 久久25| 伦理日韩国产久久| 成人精品久久久午夜福利| 五月天婷精品激情| 九九玖玖精品| 黑白配性爱AV成| 内射老妇BBWX0C0CK| 欧美顶级黄片AAAAA在线免费看| 男人的天堂2010| 91精品国久久久久久无码| 欧美 亚洲精品首页| 亚洲成人精品在线一区| 人妻激情偷乱视频一区二区三区| 伊人 俄罗斯 a v| 久久免费少妇| 色婷五月| 伊人午夜福利视频| 日韩欧美操逼xxx| 天天干少妇| 精品国产久久乱码| 无码人妻精品一区二区中文 | 91超碰在线| 睡产熟女乱伦| 亚洲 综合 第一页| 国产黄色在线播放观看| 97在线免费看| 97综合激情| 国产午夜无码片在线观看影视 | 日韩欧美福利视频看看| 五月丁香久久| 97国产中文| 欧美十八禁导航成人| 美女的肌被草喷水视频| 男人女人18禁片免费看网站| 久久亚洲骚逼综合| 国产精品诱惑| 神马久久久久眼| 伦理第一页| 丁香色五月 97干| 麻豆a'v电影| 八人操人人摸人人看| 97超碰免费人人性爱| 日本操逼aaaaa| 熟女一区二区| 亚洲天堂一区二区久久| 中出789在线视频| 国产无码三级视频在线观看| 久久伊人青青草| 尤物视频一区| 久久精品99| 欧美精品1区2区3区| 后入式999| WWW黄片COM| 天天碰久久入| 五月婷婷激情综合| 男女无套 免费网站| 熟妇人妻一区二区三区| 亚洲无码精品AV久久久| 91黑丝美女| 亚洲国产精品无码AV在线| 国产成人精品一区| 激情五月婷婷综合| 蜜桃av色偷偷av老熟女| 久久发布国产伦子伦精品| 男女啪啪网站免费视频| 性生活无遮挡纯毛片在线看| 中国国国产一级特黄毛片| 久久青娱乐| 黑丝内射一区二区三区| 久久伊人亚洲AV无码网站| 91在线/欧洲| 欧亚在线视频| 人妻少妇久久中文字幕一区二区 麻豆| 久久精品免费| 五月天婷精品激情| 欧美综合网| 国产女同性恋视频| 精品久久久亚洲AV成人网站| 亚洲天天综合| 欧洲亚洲综合| 久久黄黄| 艹少妇网站| 天堂性色| 精品久久九| 欧美激情综合色综合啪啪五月| 久久国产AⅤ| 超碰97在线色男人??| 亚洲第一综合| 乱伦一区二区三区‘| aV中文麻| 91高跟美女在线播放| 亚洲人妻av| 免费人成在线观看网站品爱网| 青青青草原| 日日夜夜骚| 麻豆国产免费影片| 亚洲一区二区三区不卡国产欧美| 欧美午夜熟妇黑人精品91| 亚洲 欧美 另类 综合 偷拍| 久久久夜夜嗨免费视频| 眼镜人妻101.com| 男人久久天堂| 91欧美少妇| 免费网站观看www在线观| 五月大香蕉| 18禁的网站在线| 日本一区二区亚洲综合| 日韩有码中文字幕女同性恋| 久久AV色| 日韩丝袜高跟制服在线观看| 骚乳在线| 久久久久久中文字幕中文字幕最新| 日韩人妻中文视频| 99老司机精品视频在线观看 | 性欧美天天| 亚洲宅男天堂| 色婷婷综合网站| 18禁精品网站在线看| 国产免费黄色一级大片| 婷婷五月天激情四射| 96精品久久久| 日本国产二线女色| 中字一区| 欧美色道啊| 日本孕妇孕交| 黄色十八禁| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 69天堂| 97AV在线观看| 91精品国产一区三一| 亚洲综合有码| 夜夜高潮夜夜爽夜夜爱爱一区| 一二三四视频在线社区中文字幕| 97碰碰日本乱偷人妻中文的| 好看的久久不射无码影视影院| 东北女人的毛片| 玖玖爱综合| 黑人中出21连凳花野真衣| 91人妻丝袜无码| 欧亚乱色熟一区二区三四区| 用力操死我| 超碰1024久久| 精品中文一区二区| 天天干夜夜操一区二区| 国内一级精品| 精品久| 精品无码久久久久久久久果冻糖心| 老熟女综合| 超碰97色| 天天插夜夜操| 精品一区二区亚洲国产| 日韩AV片| 操B久久| 欧美亚州色的图| 久久熟女精品不卡一区| 久久加勒比| 被窝影院午夜看片无码| 亚洲色图欧美色图日韩色图| www.色操逼| 久都青青视频| 97国产伦理| 成人三级片一区二区三区视频| 91国模| 国产1024在线播放| 97人妻免费中文字幕| 免费观看啪视频| 精品网站9999| 日本高清一本二本免费不卡| 校园春色五月天| 国产对白刺激视频| 激情五月综合网| 国产久久日韩网站导航| 日韩人人精品| 肏逼视频日本| 国产免费永久精品无码| 久久亚洲天天做| 乱人乱色一区二区三区免费| 国产精品露脸在线观看| 色综合久久888| 久操操| 玖玖久久久| 日韩欧美成人午夜福利| 调教熟妇 久久久久久| 大香蕉欧美日韩| 三四中文字幕| 亚洲蜜桃V妇女| 精品人妻夜夜草| 日曰骚久久精品| 一起草欧美| 欧美图片偷拍| 亚洲丝袜二区在线| 亚洲国产婷婷在线播放| 亚洲国产一区二区三区在线| 玖玖爱视频网站| 国产人妖视频一区在线观看| 蜜臀av中字字幕网站| 插插综合网天天影视网| 免费精品人妻一区二区三| 九九热男人天堂| 67914在线兔费成人视频| 青娱乐欧美激情一区二区| 亚洲日韩肥臀视频在线观看| 后入人妻无码| 热99这里只有精品| 在线情色电影 91大 | 色色色欧美| 97资源站久久| 国产精品成人福利在线| 9久久美女首页| A 天堂| 极品五月天噜噜| 精品久久久久综合无码| 中日高清无码操逼视频| 一本色道久久综合狠狠操| 国产精品无码av在线| 国产高清不卡视频| 亚洲无码超碰免费| 国产农村妇女精品一| 亚洲中文字幕熟女| 亚洲国产剧情少妇激情| 人人搞人人插人人操| 日韩人妻操B| 国产精品网址| 黑操B| 91丨人妻丨国产丨丝袜| 欧美第一页性| 亚洲 无码 偷拍| 男人的天堂2018.| 乱伦一二三| 日韩钢筋无码高清啾啾啾| 黄片免费视频2019| 97一区二区三区视频| 秋霞成人一级在线观看| 午夜综合在线| 欧美成va视频网站| 97日亚洲欧美| 日本一区二区电影网站| 思思视频免费看网站| 国产25页| 国产一区二区视频在线播放| 欧美午夜熟妇黑人精品91| 亚洲国产第一页综合视频| 久久久久国产精品久久久| 日韩天堂av电影在线观看| 日韩字幕一区| 五月天亚洲网| 五月丁香大香蕉| 中文字幕av亚洲精品| 大香蕉一人在线| 偷看洗澡一二三区美女| 老熟女91视频| 熟妇精品juliaannAV| 8050无码八戒| 无码天堂| 欧美 综合 亚洲| www.夜夜操| 国产美女口爆吞精视频| AV天黑人| 亚洲熟妇无码一区二区三区| 九色精品视频导航1| 性高潮久久久久久久久久久| 精品久一区免费| 欧美日本国产日韩激情视频| 欧美翘臀视频网站一区二区三区| 91美女在线视频| 丁香五月综合| 亚洲国产精品9999在线观看| 国产激情在线| 日本久久综合| 老色69| 中国东北熟女老太婆内谢| 欧洲精品二区| 欧美 亚洲 综合 制服 另类| 日韩97超碰中文字幕| 黄片色区软件| 国产综合日韩伦理| 精品人妻高清麻豆av| 一区二区精品更新提醒| 丁香五月久久| 亚洲欧综合另类无码一区| 日韩在线国产字幕| 欧美日韩妖精91com| 丝袜无码a片| 男人的天堂在线有码| 美中日韩无码| 正在播放国产精品一区| 欧美激情综合| 易易A毛视频| 97伦乱| 新97国产超碰| 女同性恋一区二区三区精品视频| 色色激情五月天| av午夜影院在线播放| 操人人| av三级电影在线播放| 国语精品对白| 夜夜嗨TV| 春色综合免费| 操老熟女AV| 久久99草| 欧洲小说色图视频另类| 91撸色网 玖玖网 欧美| 99热这里只有精| 极品色社| 色色色色色色色色色色色色色色综合| 操逼网站地址| 日本 欧美 国产一区| 国产高清精品福利| 久久精品国产72国产精品福利| 亚洲激情综合另类男同| 亚洲激情在线观看一区| 国产色综合亚洲色综合吹潮| 亚洲伊人久久综合97| 天天日天天干天天操| 欧美色图20p| 九九九九国产| 国产精品九九九| 超碰78| 欧美人与动性人交a| 日韩成人性日韩成人性爱视频在线免费观看 | 男人的天堂99| 欧美加勒比| 白丝av| 麻豆国产97在线| 日韩偷拍一区二区三区| WWW啪啪的com| 嫩草影院在线观看精品| 欧美人人AAA| 99爱精品| 中美日韩毛片| 中文字幕精品久久久久人妻红杏ⅰ| 性爱欧美五月| julia ann久久| 国语精品对白| 国产在线观看一区二区三区| 日韩性爱视频在线免费观看| 91久久精品中文字幕| 亚洲欧美日韩精品久| 日本日逼视频网| 国产欧美伊人| A啊啊在线观看| 麻豆区久久久久亚| 欧美高清第一页| 翔田千里Av在线| 最近2019中文字幕国语免费版| 激情五月天视频| 色综合美国| 加勒比海成人视频网| 一区二区三区四区五区久久久久久| 蜜臀久久99精品久久久久久成人小说 | 91国产操逼视频| 人人妻人射| 色色热| 91激情网| 久久久久久久9| 国产亚洲精品久久久久小| 秋霞免费AV| 中文字幕日韩国产传媒欧美精品| 中文字幕78| 国产精品丝袜在线| 在线综合 亚洲 欧美中文字幕| 日韩黄色一区二区三区| 强奸少妇AV导航网| 精品无码一区二区三区| 免费A片三p视频| 成人av动漫在线观看| 福利风月五月天影院| 久久9精品网站| 日本孕妇一区二区视频操逼免费看| 国产精品一级片在线看| 欧美亚洲性爱一区二区| 99精品无码| 国产乱色国产精品免费视| 人妻少妇久久久| 久色99999| 思思久热在线精品66| 看一级黄色视频| 伦在线97| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 99在线无码精品秘 入口黑人| 亚洲一区深夜| 俺也射| 欧美日韩另类在线播放| 狠狠中文字幕| 东京热,男人的天堂| 亚洲日韩美国人妻| 91撸色网 玖玖网 欧美| 久久啊啊| 大香蕉久| 久久九九精品一区二区 | 九九热精彩视频| 在线视频 亚洲精品| 99久久婷婷| 国产精品一区二区麻豆| 国模艳艳啪啪一区| 伊人991| 少妇一区二区三区精选| 超碰 另类 欧美 | 极品综合| 国产精品午夜成人福利| 性综合网| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产女s强制榨精视频| 日韩pv中文| 国产精品播放| 东京热激情视频一二三区| 天天摸天天操视频| 91chinese在线| 欧美精品系列| 99久久婷婷国产综合精品草原| 青青草导航在线视频| 日本一级二级三级网站| 青青草日韩免费观看高清在线| 天天日天天搞天天干| 青青草视频导航官网| 亚洲无码太久| 亚av顶级裸体一区二区三区四区五区| 特级特黄一级毛片免费| 欧美性爱一区二区三区四区 | 黄色十八禁| 日韩乱伦影音先锋| 丝袜狂射91| 精品成人av一区二区三区在线| 亚洲丝袜二区在线| 亚洲综合激情五月久久| 在线中文字幕视频| 婷婷伊人一区| 国产精品 久久久精品一牛| 亚洲情色一区二区三区| 99久久久er直播网址| 蜜臀在线看片| 发朗少妇买婬全视频中文| 99re这里只有精品9| av在线人气| 二男一女成人A片| 黄久久| 99亚亚热| 亚洲精品免费中文字幕| 超碰人人干天天射| 在线无码操| 国产黄a三级三级三级av在线看| 91久久精品美女高潮喷水| 亚洲欧美91√| 老司机老司机午夜影院| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产精品3| 99热在线播放| 亚洲国产成人7777| 天天激色| 嗯嗯啊中文字幕| 欧美精品23| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美日日操| 极品美女嘿咻| 亚洲精品欧洲精品| 天天躁日日躁AAAXX| 中日韩免费看男女操逼大全| 国产乱码久久久久久| www.色五月| 欧美1区二区三区公司| 91美女视频直播| 欧洲射精91| 亚洲日本韩国在线| 日本爽爽爽爽爽爽免费视频| 伊人在线大香蕉视频久久| 成人综合色网| 亚洲成熟国产精品美女| 人人操人人色网| 丁香7月婷婷| 91jk色拍| 成人欧美一区二区三区黑人一| 草草影院最新网址| 久久久久久久九九九九| 97久久天天综合色天天综合色电影| 在线黄页看毛片| 综合欧美日韩在线观看| 成人免费视瓶| 欧洲亚洲少妇| 天天天做天天天爱天天天爽| 歐美一級亂黃99在綫精品| 超碰在线国产| 国产 热久久久久国产精品| 蜜臀99久久精品久久久懂爱| 日本高清视频在线观看黄已三辽| 蜜臀AV成人精品蜜臀| 日韩亚洲美女一区久久| 丁香五月久久| 伊人影院综合是一个与深夜成人在线 | 操逼网免费无码视频| 亚洲性爱电影| 青娱乐福利99| 91老熟女| 欧美性夜| 91色欧美| 999热日韩精品| 人妻美腿丝袜日韩| 中文字幕伊人| 中文幕97| 中国小夫妻勾搭露脸淫荡对白| 一牛影视久久久一区二区三区| 超碰碰碰碰| 美女自卫慰黄网站免费| 欧美日韩 强奸乱伦| 91深夜夜| 天天摸夜夜添无码小视频| 2023天天操夜夜操| 欧美国产精品久久九九| 人人操欧美风骚| 精品78| 欧美性天天| 97综合久久| a'v在线资源| 国产无码精品久久久久久| 男啪女色黄无遮挡免费观看| 91亚洲电影| 精品九九九九九| 亚洲视频中文一区| 国产精品一区二区手机看片| 亚洲āv网址在线观看| 国产精品久久天天干| 最近2018中文字幕在线高清第一页| 人人么人人操| 国产真乱mangent| 美国黄片aaa| 国产精品国产自产高清AV| 久久黄色视频一区二区三区 | 久久免费看高潮毛片韩国| 一区 欧美 日韩 麻豆| 啊啊啊好舒服好爽啊啊啊视频| 艳尻美人妻| 麻豆天美在线喷水AV| 激情内射| 啊啊啊草死我| 亚洲国产精品无码AV久久久| 亚洲天堂中文字| 9999免费精彩视频| 日韩AV电影网站| 内射黑人| 欧美丝袜美女电影一二三四区| chaopen97久久| 91成人18| 久久无码成人| 欧美国产日韩高清在线| 欧美久久九九| 亚洲永久永久永久永久一级一级一级精品| 品亲网欧美品亲网| 老熟女综合网| 1769国内精品视频| 欧美性爱精品一区二区| 精品熟女一区=区三区| 东京热熟女亚洲视频网站| 色狠狠一区二区三区香蕉| 久操精品| 久久精品国产亚洲AV高级北京| 色婷婷久久| av情色影音| 极品一区二区三区免费| 五月丁香激情四射| av在线一区二区三区| 欧美成人精品A片免费一区99| 蜜桃中文字日产乱幕4区| 久久精品高清无码一区| 91无遮挡| 欧美一区二区观看在线| 高清不卡国产| 加勒比无码毛片| 久久精品 六十路 熟女 欧美| 久久肏大逼| 日本女厕偷拍| 啊啊啊啊无码| 99精品欧美一区二区三区桃色| 九九精品热| 激情小说亚洲视频| 波多野结衣之双飞调教在线播放| 亚洲欧美日韩精品久| 肉丝网站91| 少妇三p| 围产精品一区二区三区视频播放| 久久免费老司机精品| 精久久久| 日日摸夜夜夜夜爽| 欧美丝袜激情| 凹凸精品熟女在线观看| 最新日韩黄片| 日本黄色裸日本黄色裸体| 男人天堂网站| 五月开心网| 99热在线只有精品| 91成人久久| 人人妻人人色| 五月天我淫我色av| 中文字暮97| 777超碰| 婷婷丁香六月| 中文字幕免费在线观看| 333kkkk·亚洲com久久| 久久鲁夜| 家庭乱伦国产精品| 欧插网站| 欧亚日韩中文在线| 久久亚洲婷婷| 超碰欧美COM| 26uuu国产免费观看| 欧美综合 站| 高清无码一区二区三区| 91jk色拍| 国产精品ⅴ无码大片在线看.| 国产精品情侣啪啪| 97干97色| 欧美熟爽综合| 加勒比综合| 夜夜夜久久| av网站免费看| 日本一区二区三区精品| 91综合色噜噜| 欧中日成人免费影视| 老熟妇乱轮| 熟妇一区二区三区| 国产JDAV无码视频在线观看| 欧美激情视频一区二区三区不卡| 26uuu最新| 330Dv国产女人终合视频极品人与兽| 性色AV蜜色av色欲av| 动漫片子网站3黄| 日韩三A大片在线观看| 91真人天天在线| 你想操日本小逼吗| 亚洲骚男同com| 丁香五月激情综合| 人妻少妇精品久久久久久久| 久视频在线观看| 手机看片日韩人妻| 久草精品一区| 韩国一级婬片A片AAAAA| 黑人性欧美| 日韩三级久久久| 国内精品久久人妻性色av| 青青草男人天堂| JIZZJIZZ国产精品喷水| 欧美91网| 精品国产一区二区久久| 久久性爱精品一区| 蜜桃臀一区二区三区久久| 五月天综合网| 日韩免费中文字幕视频| 国产性爱欧美性爱在线| 丰满的三级少妇欧美久久久| 青娱乐91| 91美女在线视频| 久久老子无码午夜伦不卡| 97视频在线播放| 久久超碰98| 色色色五月婷婷| 大香蕉乱级| 欧美后入式| www.欧精品| 亚洲 日韩 丝袜 熟女 变态| 亚洲交性| 人妻 欧美 中文| 色婷视频| 日韩欧美午夜一区二区| 精品白丝一区| 九久久九精品视频| 久久肏大逼| 三级日本一区二区三区| 干美女人妻| 东北女人的毛片| 色五月激情网| 日本狂喷奶水在线播放212| 91老司机精品| 中文字幕综合人妻| 精品女人999| 影音先锋乱| 欧美高清18A片| 夜夜黄| 日本黄色裸日本黄色裸体 | 中出欧美| 丝袜高跟澳门91视频| 欧美大香蕉在线观看| 国产精品久久久久久久久AV大片| 亚洲精品国产精品成人| 欧美性高潮| 97视频新免费| 9超碰免费| 2020中文字幕| wwwcaobibi| a一区二区三区乱码在线| 亚洲在线欧美| 91丝袜人妻| 亚洲人综合| 黑丝日韩av丝袜av| 青娱乐 成人娱乐在线| 日韩另类| 熟女人妇一区二区三区| 免费观看性欧美一级| 91精片| 亚洲熟女综合网| 精品国产乱码久久久久久久久久毛片| 综合啪啪| 国产乱人妻精品入口| 殴美牲| 久9热| 深田咏美亚洲精品福利社| 色欲无码人妻日韩欧美精品| 午夜精品久久一区二区| 亚洲资源一区| 日韩BBN| 九九九久| 人人澡人人澡人人| 天天拍天| 一级黄碟在线看| 青女在线| 亚洲综合九| 国产天美传媒精品| 精品网站99999| 中文字幕人妻色偷偷久久皮| 精品国产一区二区三区久久久蜜臀 | 国产精品99久久久www| 亚洲欧洲日韩国产自在线| 美女操逼福利视频| 成人性爱美曰韩| 无色无码| 桃花色涩综合影院| 色五月激情网| 午夜免费视频1000| 精品一区二区三区蜜桃臀赵总| 人妻熟女一区在| 美女露胸露屁股| 欧美三级免费伊人| 91天美传媒精品| 蜜臀亚洲综合一二三四区| 少妇色综合| 白嫩妹子国产骚| 亚洲综合网91| 日本精品一区二区三区四区的功能| 97亚洲综合| 看免费的黄片| 国产91精品福利在线|