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

ARTICLE DETAIL

資訊詳情

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

前端圖編輯器核心揭秘:從數(shù)據(jù)模型到Canvas渲染的完整實戰(zhàn)

前端圖編輯器核心揭秘:從數(shù)據(jù)模型到Canvas渲染的完整實戰(zhàn) 先從結論說起這類名為“diagram-design”的項目核心目標從來不是“畫出好看的圖”而是“讓圖和背后的數(shù)據(jù)關系對得上”。我在實際動手做了幾個月之后最大的感受是圖表設計最難的部分不是渲染而是把數(shù)據(jù)模型、交互狀態(tài)和視覺表現(xiàn)三者解耦清楚。下面把我的完整設計與實操過程拆開講從數(shù)據(jù)建模到渲染管線再到避坑實錄都整理出來。1. 整體設計思路先想清楚“圖”到底是什么1.1 核心需求拆解在動工之前我先把這個標題翻譯成具體的功能清單。所謂“diagram-design”往細了說無非是三件事創(chuàng)建和編輯節(jié)點節(jié)點有坐標、大小、樣式可以被拖拽、縮放、刪除、復制。建立連接關系節(jié)點之間通過邊連接邊能記錄從哪里出發(fā)、到達哪里還能在中途拐彎。整體視圖控制畫布可以縮放、平移局部細節(jié)和整體結構可以切換查看。這三件事拆完之后我發(fā)現(xiàn)真正的難點在第一件事的前半句“坐標、大小、樣式”這些數(shù)據(jù)從哪里來答案是從用戶的操作中來但操作只是表象背后必須有一份可以被持久化、被復制、被程序讀取的數(shù)據(jù)結構。否則你畫出來的圖只能看不能存更不能參與業(yè)務邏輯判斷。我做了一個取舍所有的圖形元素都用純數(shù)據(jù)描述不把任何視覺狀態(tài)混進去。節(jié)點的位置、顏色、大小是數(shù)據(jù)節(jié)點處于“選中”“高亮”這類交互狀態(tài)則不屬于數(shù)據(jù)——它們是運行時的臨時狀態(tài)。這個分離規(guī)則在后續(xù)開發(fā)里幫我省了大量麻煩。1.2 為什么不自已從零折騰一套復雜引擎很多人一聽到圖表設計第一反應是去引入現(xiàn)成的開源庫。這個思路沒有問題但對于我這種希望深度定制交互、并且要把圖數(shù)據(jù)導入導出到其他系統(tǒng)的場景現(xiàn)成庫反而會帶來幾層限制它的數(shù)據(jù)格式是固定的你的業(yè)務模型得遷就它它的狀態(tài)管理是內置的你想和外部框架聯(lián)動得靠事件橋接它的自定義渲染能力再強也不可能完全覆蓋你想要的視覺規(guī)范。所以我的判斷是自研一個輕量級圖編輯器核心是值得的。這里“輕量級”三個字很重要它意味著不需要處理巨型圖、不需要復雜的動畫引擎、不需要多用戶實時協(xié)同。我的目標是支撐單畫布內幾百個節(jié)點、上千條邊的規(guī)模同時保證交互不掉幀。這個量級下完全可以通過合理設計做到。當然如果圖規(guī)模到了上萬個節(jié)點或者需要多人同時編輯那自研的代價會急劇上升此時使用成熟的圖編輯平臺反而更劃算。取舍的關鍵指標就一個圖和你的業(yè)務數(shù)據(jù)之間耦合得有多深。1.3 技術方案選型我的技術棧定在純前端主語言用 TypeScript。選擇 TypeScript 的理由非常直接圖數(shù)據(jù)涉及大量類型定義節(jié)點類型、邊類型、端口類型在編譯期就定死比靠人腦記憶字段名靠譜得多。數(shù)據(jù)渲染層我選擇了兩套渲染方案并存畫布Canvas負責主場景渲染SVG 負責少量裝飾性元素。具體理由在后面的渲染章節(jié)詳細展開這里先給結論——Canvas 在復雜場景下性能優(yōu)勢明顯但文本適配和局部更新不如 SVG 靈活所以兩者各司其職。狀態(tài)管理方面我引入了一個簡單的狀態(tài)機維護畫布當前的模式空閑、拖拽節(jié)點中、連線中、框選中。每種模式對應的鼠標事件處理完全不同用狀態(tài)機可以避免大量互相打架的 if-else。整體架構分成了三層數(shù)據(jù)層節(jié)點、邊、端口的純數(shù)據(jù)模型負責增刪改查和序列化。視圖層負責將數(shù)據(jù)模型渲染到畫布并處理視口變換。交互層監(jiān)聽鼠標、鍵盤事件將其翻譯成數(shù)據(jù)層的修改操作。這個分層的核心原則是單向數(shù)據(jù)流用戶操作 → 交互層解析 → 修改數(shù)據(jù)層 → 視圖層訂閱變化并重繪。交互層不直接改畫布視圖層不反向改數(shù)據(jù)數(shù)據(jù)層不感知任何 UI 細節(jié)。2. 核心數(shù)據(jù)模型把所有圖形變成可存儲的數(shù)據(jù)2.1 節(jié)點、邊、端口的建模細節(jié)先說我經(jīng)過幾次重構后的最終數(shù)據(jù)結構。一張圖我用一個對象表示包含三塊interface Diagram { id: string; nodes: Mapstring, DiagramNode; edges: Mapstring, DiagramEdge; meta: DiagramMeta; } interface DiagramNode { id: string; type: string; x: number; y: number; width: number; height: number; ports: Port[]; // 連接錨點 data: Recordstring, unknown; // 業(yè)務數(shù)據(jù)不渲染但持久化 } interface Port { id: string; position: top | bottom | left | right; offset: number; // 端口在該邊上的相對位置0~1 } interface DiagramEdge { id: string; sourceNodeId: string; sourcePortId: string; targetNodeId: string; targetPortId: string; points: Point[]; // 折線的中間拐點可為空 data: Recordstring, unknown; }我公開過很多次這個數(shù)據(jù)結構每次被問到最多的都是為什么要單獨拆出一個Port概念而不是直接用節(jié)點坐標計算連接點關鍵在于邊的連接位置必須是穩(wěn)定、可恢復的。如果一條邊連接的是“節(jié)點A的右側邊緣中間”那么無論節(jié)點A怎么移動這條邊的連接點都會跟著右側邊緣跑。如果你只存了節(jié)點的中心點每次重新計算連接點就會受節(jié)點尺寸變化影響——節(jié)點一旦改變寬高整條邊的位置就會漂移。端口這個概念的另一個好處是它天然支持“同節(jié)點多連接錨點”。一個節(jié)點可能有多個輸出口每個輸出口都是獨立的端口邊只需要記錄端口 ID 即可不需要關心端口的具體坐標。坐標由視圖層根據(jù)節(jié)點位置實時計算。2.2 數(shù)據(jù)序列化與格式兼容圖數(shù)據(jù)最終要能被保存到文件、數(shù)據(jù)庫或者發(fā)送給后端。所以序列化格式的設計非常關鍵。我用的是帶版本號的 JSON Schema{ version: 1.3.0, diagram: { id: diagram-001, meta: { title: 訂單流程圖 }, nodes: [], edges: [] } }version字段是我踩過坑之后補上的。起初我在本地開發(fā)時沒有版本號后來數(shù)據(jù)結構調整舊數(shù)據(jù)全部無法解析幾千條測試數(shù)據(jù)直接作廢。加上版本號之后每次寫解析器都先判斷版本再決定走哪條遷移分支數(shù)據(jù)兼容的問題就徹底解決了。序列化時還應遵循“可以丟了不致命但保留更好”的字段放最后的原則。核心節(jié)點和邊的 ID、連接關系是必須的缺了圖就廢了樣式和坐標可以恢復成默認值但保留可以提升還原度擴展字段全部掛到data對象里不占主體結構。2.3 撤銷與重做快照策略很關鍵撤銷和重做是圖編輯器的隱形能力沒有它任何誤操作都像毀尸現(xiàn)場。我的實現(xiàn)方式是每次數(shù)據(jù)變更之前記錄上一個完整快照變更完成后記錄新快照撤銷和重做就是在這兩個快照之間切換。問題在于快照是深拷貝深拷貝的成本很高而很多操作只是一次小修改比如拖動節(jié)點拖動的過程中可能產(chǎn)生幾十次中間狀態(tài)。全量快照會讓內存和 CPU 都吃緊。我最終采用了兩層策略拖拽、縮放這類連續(xù)操作在開始時存一份快照操作過程中產(chǎn)生的中間狀態(tài)不保存操作結束時再存一份最終快照。這樣一次拖拽永遠只對應一次撤銷步驟。其他離散操作添加節(jié)點、刪除邊、修改顏色每次操作前存一份快照。這個方案實現(xiàn)簡單卻能把內存占用降低一個數(shù)量級。我實測在 200 個節(jié)點的畫布上連續(xù)拖拽 10 秒撤銷棧里只新增了 2 個快照內存波動可以忽略。3. 渲染管線的核心細節(jié)畫布為什么比想象中復雜3.1 Canvas 和 SVG 的取舍在圖表設計這個領域Canvas 和 SVG 的爭論從來沒有定論但我的選擇標準非常實用誰能在我的場景下用更少的代碼達到更好的交互體驗誰就上。SVG 的最大優(yōu)勢是 DOM 化每個圖形就是一個 DOM 節(jié)點可以綁定事件、修改樣式、單獨更新、配 CSS 動畫。對于節(jié)點數(shù)較少幾十到一百的圖表SVG 的開發(fā)效率明顯更高因為很多渲染細節(jié)瀏覽器幫你處理了。但當節(jié)點數(shù)上升到幾百邊數(shù)上千DOM 節(jié)點數(shù)量開始拖慢頁面。任何一個節(jié)點的重繪都可能觸發(fā)瀏覽器的樣式重算和布局更新響應延遲會明顯變大。Canvas 沒有這個負擔所有圖形都畫在一塊畫布上沒有 DOM 節(jié)點更新時只需調用重繪函數(shù)。代價是你需要自己實現(xiàn)命中檢測、事件映射、局部更新等于瀏覽器的 DOM 能力沒法用了都得自己寫。我在項目中的最終策略是主場景用 Canvas 渲染全部節(jié)點和邊保證性能和渲染上限浮動的連接預覽線、我正在拖拽中的節(jié)點輪廓提醒這類“臨時裝飾”用 SVG 疊在畫布上層因為這類元素只存在于交互瞬間量小而靈活SVG 的語法表達更舒服。3.2 視口變換一張圖兩個坐標系圖編輯器必須支持縮放和平移這是硬需求。實現(xiàn)縮放平移的核心是理解兩套坐標系之間的換算世界坐標World Coordinates數(shù)據(jù)模型里的 x、y 是真實坐標節(jié)點之間的距離關系用世界坐標描述它不隨視口變化。屏幕坐標Screen Coordinates畫布上用戶實際看到的坐標等于世界坐標經(jīng)過平移和縮放變換之后的結果。兩者之間的換算公式簡單直接// 世界坐標 → 屏幕坐標 screenX (worldX - viewportCenterX) * zoom canvasWidth / 2; screenY (worldY - viewportCenterY) * zoom canvasHeight / 2; // 屏幕坐標 → 世界坐標用于鼠標定位 worldX (screenX - canvasWidth / 2) / zoom viewportCenterX; worldY (screenY - canvasHeight / 2) / zoom viewportCenterY;看似簡單但真做起來有兩個常見坑。第一個坑是縮放中心。用戶滾動滾輪時通常希望鼠標指向的位置在縮放后保持不動也就是“以鼠標為中心縮放”。實現(xiàn)方式是先記錄鼠標在縮放前位于哪個世界坐標縮放后把這個世界坐標重新映射回鼠標的屏幕位置從而反推出新的視口中心。公式如下const worldPointBeforeZoom screenToWorld(mouseScreenX, mouseScreenY); zoom clamp(zoom * factor, minZoom, maxZoom); // 將世界點重新投影到鼠標處反推出視口中心 viewportCenterX worldPointBeforeZoom.x - (mouseScreenX - canvasWidth / 2) / zoom; viewportCenterY worldPointBeforeZoom.y - (mouseScreenY - canvasHeight / 2) / zoom;第二個坑是縮放邊界。無限縮放會讓畫布漂到看不見的地方或者把場景縮到比一像素還小。我設置了最小 10%、最大 500% 的縮放范圍同時在實現(xiàn)上用clamp函數(shù)把計算后的 zoom 鎖死。另一個隱藏問題是縮放值如果是浮點數(shù)累計十幾次滾輪之后精度漂移會讓視圖抖動。我干脆在縮放事件里只保留兩位小數(shù)實測后用戶基本感覺不到。3.3 命中檢測與框選Canvas 渲染模式下沒有 DOM 可以點擊所有交互都要自己判斷“鼠標落在了哪個元素上”。最樸素的辦法是遍歷全部節(jié)點逐個判斷鼠標點是否落在節(jié)點矩形內。節(jié)點數(shù)量少時這么做可以接受但節(jié)點一多每次 mousemove 都全量遍歷性能就開始露餡。我的優(yōu)化是建立一套空間索引按網(wǎng)格劃分畫布區(qū)域節(jié)點按所在網(wǎng)格注冊鼠標移動時只檢測鼠標所在網(wǎng)格及相鄰網(wǎng)格內的節(jié)點遍歷量直接下降一個數(shù)量級。const gridSize 64; const grid new Mapstring, DiagramNode[](); function getGridKey(x: number, y: number): string { return ${Math.floor(x / gridSize)},${Math.floor(y / gridSize)}; }網(wǎng)格的鍵是坐標除以格子大小的取整結果節(jié)點插入時按其中心點所在的格子歸入對應 key。命中檢測時只查詢鼠標點所在的三個格子當前格、左側格、上側格里的節(jié)點做精確矩形判斷??蜻x的做法類似拖拽出橡皮筋選框時遍歷受影響網(wǎng)格里的節(jié)點只要節(jié)點的矩形和選框矩形有交集就視為被選中。這里要注意的是框選時需要把屏幕坐標的選框反算成世界坐標再來判斷因為節(jié)點存儲的是世界坐標直接拿屏幕坐標去比對會因為縮放平移的干擾而錯誤。我在實際實現(xiàn)中還發(fā)現(xiàn)一個細節(jié)節(jié)點選中狀態(tài)應顯示在渲染層之外。選中節(jié)點的邊框、陰影屬于表達層狀態(tài)直接掛在臨時狀態(tài)對象里不會污染數(shù)據(jù)模型。這樣圖數(shù)據(jù)導出時不會包含多余信息重開畫布時也不需要重建選中狀態(tài)。4. 實操過程從空白畫布到可交互編輯器4.1 環(huán)境準備與基礎依賴開始編碼之前我先明確依賴清單。這里列的是我實際用到的最小集合能少裝的絕不多裝TypeScript類型系統(tǒng)核心依賴Vite開發(fā)服務器和構建工具主打一個快無 UI 框架純 Canvas 場景框架在這場合幫不上什么忙初始化方式非常標準npm create vitelatest diagram-design -- --template vanilla-ts cd diagram-design npm install為什么不用 Vue 或 React因為 Canvas 渲染的主場景不依賴框架的虛擬 DOM節(jié)點的增刪改全由數(shù)據(jù)層觸發(fā)重繪框架反而會引入不必要的橋接邏輯。UI 面板、屬性編輯器這些外圍組件我是寫在一個簡單的 div 層上的直接用原生事件綁定即可。4.2 核心實現(xiàn)的逐步推進我按下面這張順序表逐步推進開發(fā)每完成一步都會做一次手動測試確保沒有崩壞第一步數(shù)據(jù)模型層先寫出DiagramNode、DiagramEdge、Diagram的類型定義和增刪改查方法。這個階段不碰渲染所有操作都只是純數(shù)據(jù)變化。第二步基礎畫布渲染創(chuàng)建 Canvas 并畫出一批靜態(tài)節(jié)點和邊驗證整個數(shù)據(jù)到圖形的映射關系。程序跑通后我加了一個背景網(wǎng)格線方便觀察坐標位置是否正確。第三步鼠標事件接入實現(xiàn)鼠標按下、移動、釋放的事件監(jiān)聽區(qū)分左鍵和右鍵行為。切換畫布模式為拖拽模式實現(xiàn)節(jié)點跟隨鼠標移動。第四步滾輪縮放與拖拽平移把視口變換邏輯接入實現(xiàn)以鼠標為中心的縮放和畫布拖拽平移。第五步連線創(chuàng)建在兩個端口之間創(chuàng)建貝塞爾曲線。按下鼠標出線移動鼠標彎曲釋放鼠標完成連接。第六步撤銷重做接入快照機制。每次操作完成后壓棧撤銷時恢復上一狀態(tài)。第七步性能優(yōu)化加入網(wǎng)格索引、視口剔除、渲染節(jié)流。每一步之間我都跑了固定測試用例建 20 個節(jié)點連 30 條邊然后移動、縮放、撤銷、重做確保沒有回歸。整個開發(fā)周期大概用了三周半每天投入兩到三小時。時間的大頭花在連線的交互適配和框選的邊界問題上這兩個點最容易出細節(jié) bug。4.3 連線交互的完整實現(xiàn)連線是整個編輯器中交互邏輯最復雜的一塊我來重點展示它的實現(xiàn)路徑。連線創(chuàng)建屬于一種特殊模式用戶從源端口點擊按下此時畫布進入connecting模式鼠標移動時需要實時繪制一條從源端口到鼠標位置的“預覽連線”釋放鼠標時程序判斷目標位置是否為合法的目標端口合法則正式創(chuàng)建邊不合法則丟棄。預覽連線的形狀我用的是三階貝塞爾曲線。為什么用貝塞爾而不是直線或者折線因為貝塞爾曲線能以一條平滑曲線優(yōu)雅地連接兩個端口且可以根據(jù)兩個端口的朝向自動調整控制點不需要我在數(shù)據(jù)模型里存儲路徑信息。曲線的控制點確定規(guī)則是源端口朝向是左側控制點就向左邊延伸目標端口朝向是右側控制點就向右邊延伸。延伸距離取兩端口之間距離的一半這樣曲線彎曲幅度適中不會過彎也不會太直。function buildEdgePath(source: Point, target: Point, sourceDirection: Direction, targetDirection: Direction): Path2D { const dist Math.hypot(target.x - source.x, target.y - source.y); const offset dist * 0.5; const c1 offsetByDirection(source, sourceDirection, offset); const c2 offsetByDirection(target, targetDirection, offset); const path new Path2D(); path.moveTo(source.x, source.y); path.bezierCurveTo(c1.x, c1.y, c2.x, c2.y, target.x, target.y); return path; }目標端口的檢測也需要注意釋放鼠標時取鼠標所在坐標調用空間索引找到覆蓋該坐標的節(jié)點再判斷該節(jié)點上是否有端口在這個鼠標位置附近。如果命中則創(chuàng)建正式邊如果沒有命中直接把預覽連線清掉。創(chuàng)建邊之前還多一步合法性校驗一條邊不能連接同一個端口兩次也不允許從輸出端口連接到另一輸出端口具體取決于端口類型定義。這些規(guī)則放在數(shù)據(jù)層渲染層不做判斷這樣可以保證無論如何操作底層數(shù)據(jù)不會進入非法狀態(tài)。4.4 自動布局與對齊輔助用戶手動拖完一堆節(jié)點后圖必然歪歪扭扭。所以我在工具欄里加了兩個自動整理功能層級布局和垂直/水平對齊。層級布局適用于流程類圖把節(jié)點按照邊的方向分層同一層的節(jié)點排列成一列或一行層與層之間的距離相等。實現(xiàn)分三步拓撲排序確定每個節(jié)點的層級。同一層的節(jié)點按原始橫向順序排列間距均勻。邊的交叉最小化我用的是一個簡化的貪心算法逐層調整節(jié)點的順序讓相鄰層的邊交叉數(shù)量盡量小。垂直對齊和水平對齊的邏輯更簡單選中多個節(jié)點取一個基準坐標比如最左側節(jié)點的 x 或所有選中節(jié)點的均值把其他節(jié)點的對應坐標改為基準值即可。對齊操作不是一個“永久狀態(tài)”用戶隨時可以再做手動調整所以它仍然落成數(shù)據(jù)層的坐標修改配合撤銷重做棧一起使用沒有引入額外復雜度。4.5 性能優(yōu)化實戰(zhàn)性能問題在節(jié)點數(shù)超過 300 之后開始顯現(xiàn)。第一件導致卡頓的事是每次重繪都清空整個畫布并重畫全部節(jié)點和邊。優(yōu)化手段是視口剔除只繪制當前視口可見范圍內的元素function isInViewport(node: DiagramNode, viewport: Viewport): boolean { return ( node.x node.width viewport.left node.x viewport.right node.y node.height viewport.top node.y viewport.bottom ); }視口的邊界值直接由視口中心坐標和縮放后的窗口尺寸計算得出。由于世界坐標和視口邊界都經(jīng)過縮放換算這個判斷非常便宜。第二件導致卡頓的事是鼠標移動過程中觸發(fā)密集重繪。我引入了requestAnimationFrame節(jié)流移動事件只更新狀態(tài)標記不直接重繪動畫幀到來時檢查標記若有變化才重繪。這樣把重繪頻率從 mousemove 的每次觸發(fā)可以高達幾百次/秒降到了屏幕刷新率60次/秒體驗反而更平滑。第三件是字體渲染消耗。Canvas 每幀繪制大量文本字體解析很貴。優(yōu)化方案是把文本渲染單獨抽出來啟用ctx.font的緩存只有在字體字符串變化時才更新。實際測試中這個優(yōu)化帶來了 20% 左右的渲染耗時下降。5. 常見問題與排查技巧實錄5.1 高頻問題速查表我把開發(fā)過程中遇到的高頻問題整理成一張速查表每一個都附了對應的排查思路?,F(xiàn)象可能原因排查/解決方式拖拽節(jié)點時圖形跳動事件綁定時誤用了局部坐標而非全局坐標確認鼠標事件計算的坐標已通過getBoundingClientRect去除畫布偏移滾輪縮放后視圖抖動縮放倍數(shù)是浮點累積導致精度漂移縮放后對 zoom 值做四舍五入保留兩位小數(shù)連線總是對不準目標端口端口坐標計算沒有考慮節(jié)點拖拽后的位移確保端口坐標在每次渲染前按節(jié)點當前世界坐標重新計算撤銷一步后整個圖回到幾秒前快照覆蓋了整個畫布拖拽中間態(tài)也被記錄連續(xù)操作只記錄起始和結束快照中間態(tài)丟棄框選時選中了看不見的節(jié)點屏幕坐標和世界坐標混用框選矩形按視口變換反算為世界坐標再進行相交判斷Canvas 文字發(fā)虛或模糊高 DPI 屏幕下沒有做像素比適配畫布實際尺寸乘以window.devicePixelRatio再設置 Canvas 物理像素5.2 一個典型的數(shù)據(jù)恢復 bug 復盤我想單獨講講之前遇到的一個 bug它花了最長的時間。現(xiàn)象是用戶打開一個保存過的圖形文件所有節(jié)點都在但節(jié)點之間原本存在的邊全部消失了或者邊的兩端都連到了奇怪的端口位置。初步排查時我懷疑是渲染層沒畫出來但控制臺輸出邊的數(shù)據(jù)是存在的。繼續(xù)追查發(fā)現(xiàn)邊的數(shù)據(jù)里記錄的sourcePortId和節(jié)點上的ports數(shù)組對不上——原來的端口 ID 在節(jié)點移動時被重置了但邊的數(shù)據(jù)沒有同步更新。根因是節(jié)點有一個“重置端口”的操作邏輯會為端口生成新的 UUID但此時關聯(lián)邊仍然握著舊端口的 ID。因為沒有做級聯(lián)更新舊端口 ID 查無此人渲染層自然畫不出連線。修復辦法是在重置端口的邏輯里增加一步先遍歷所有關聯(lián)該節(jié)點的邊把邊的端口 ID 更新為新端口 ID然后再執(zhí)行重置操作。這個案例給到一個通用教訓圖數(shù)據(jù)模型里凡是要改節(jié)點內部標識符ID的操作必須先檢查關聯(lián)邊的引用關系。這類引用一致性問題是圖編輯器的地雷往往不會當場爆而是在用戶重新加載時爆。5.3 排除性能瓶頸的順序策略當畫布開始卡頓我的排查順序是先看是否在拖拽/縮放的動畫幀里做了全量重繪。這是最常見的性能殺手占比超過一半。再看命中和渲染是否做了無謂的遍歷。例如每次鼠標移動觸發(fā)全量遍歷而不是網(wǎng)格索引。然后檢查是否有內存泄漏導致的 GC 壓力典型情況是事件監(jiān)聽器沒有解除。最后才看圖形本身的繪制開銷比如陰影、漸變這類視覺效果本身會拖慢渲染。前三個問題都是代碼結構問題修復成本低效果立竿見影。第四個通常是為了視覺效果做出的主動取舍需要靠視覺降級方案比如只在選中的節(jié)點上繪制陰影而不是所有節(jié)點來平衡。6. 關于擴展方向的一點體會圖表設計做到這里基礎能力已經(jīng)完整了但我梳理下來發(fā)現(xiàn)還可以往幾個方向走。一個是把導出能力增強。目前只能導出 JSON 和圖片快照后續(xù)可以支持導出為 SVG 源文件、Markdown 內嵌圖或者直接生成 PDF。導出 SVG 的時候需要注意Canvas 里的貝塞爾曲線要原樣轉成 SVG 的 path 元素文本節(jié)點需要轉成 text 元素并且保留字體的 family 和 size 屬性。另一個方向是多頁面支持。當前的圖是一張單畫布如果業(yè)務上需要同時管理多張圖需要加一層項目對象把圖組織成樹形結構支持跨圖復制節(jié)點和引用關系。再一個是協(xié)作能力。多人同時編輯同一張圖是個很誘人的擴展。但要注意實時協(xié)作對數(shù)據(jù)模型的耦合度要求非常高節(jié)點 ID 必須全局唯一、邊引用必須跨端保持一致、操作記錄需要支持 CRDT 或版本向量。我的體會是如果業(yè)務沒有剛需盡量晚點碰這一塊先保證單機體驗足夠扎實。從實際交付的角度講單機圖表編輯器做好已經(jīng)能覆蓋大多數(shù)真實場景。做復雜系統(tǒng)的圖設計工具第一步永遠是數(shù)據(jù)模型穩(wěn)不穩(wěn)而不是渲染漂不漂亮。我寫的所有代碼里給之后項目復用最多的也是那套數(shù)據(jù)模型和狀態(tài)管理思路而不是任何一處渲染效果。最后分享一個實際調試中的小技巧節(jié)點多的時候不要靠人眼看圖找 bug我會在畫布里臨時按 F2 提前一層紋理把節(jié)點 ID 直接打印在每個節(jié)點的左下角。雖然它不會出現(xiàn)在正式交付版本里但排查邊連錯、端口錯位、序列化還原不一致這類問題效率能提升好幾倍。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久国产99精品72福利 | 人人扣人人操| 丝袜狂射91| 国产极品美女高潮无套在线观看| 超碰久草| www鬼畜国产男人的天堂| 国产视频一区二区三区在线免费观看| 日韩在线观看AV| 亚洲超碰在线| 亚洲国产一区二区入口| 免费视频观看60秒| 国产欧美后入| 色天使大香蕉| 在线观看日韩av不卡| 九久久九九久视频| 人妻大香蕉| 国语人妻精彩刺激| 夜夜影视四色| 欧美黄色手机在线观看| 欧美精品久久久久久久久88| 84YTCOM性无码| 97天天插| 国产 大胆 对白| 国产自偷自拍一区| 日本免费人成视频播放120秒| 国产精品96| 日韩精彩视频| 精品丰满熟妇人妻一区| 97色香蕉| 青青草中日韩在线| 日韩欧美成人大香蕉| 免费在线黄片视频| 牛牛AV人人夜夜澡人人爽| 色九久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 青娱乐淫乱1314| 久久久久99精品成人片蜜臀| 色97欧美| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 中文字幕版| 日本在线激情一区二区三区 | 男人的天堂啪啪啪啪啪蜜桃不卡| 欧美黄色片AAAAA| 亚乱色| 特级丰满少妇一级AAAA爱毛片| 色逼综合| 日韩电影免费网站麻豆视频| 人妻久久| 国产精品蜜臀久久久久无码AV| 综合少妇网| 欧美日韩另类激情图片| 蜜桃狠狠色伊人亚洲综合网站| 狠狠色五月亚洲91| 碰碰97| 丁香婷婷五月| 国产欧美一级在线观看| 亚洲国产精品久久久男人的天堂| 97爱爱爱综合| 国产11页| 青青草在线视频欧美| 99热超碰| 97精品全部| 香蕉99秘 一区精品蜜桃臀| 蜜臀99久久精品| 91爱欧美| 啊啊啊在线看| 人人做天天爱| 在线 制服丝袜中出 人妻| 日韩精品三区四区| 96国产精品| 一区二区三区美女超清| 试看日韩黄片| 天天谢天天干| 精品少妇一区二区三区免费观看| 高清不卡视频| 国产丝袜高跟美女av免费观看| 欧美综合1性辶| 精品人妻一二三| 欧美97| 操逼逼中文字幕| 日本国产高清色www视频在线| 亚洲精品丝袜-不卡成人免费……| 99999精品视频| 精品大全99999| 色就色综合| 可以在线观看AV的网站| 九九热精品免费视频| 啊啊啊啊啊啊啊啊啊在线观看| 亚洲综合校园春色| av一区二区三区不卡| 亚洲中文字幕久久人妻| 东北女人的毛片| 人人妻人人爽一区二区三区| 5278欧美一区二区三区| 一级黄色性爱裸体视频| 综合久久久久久久综合网| 人人妻人人澡人人爽久久av| 色综合久久88色综合久久天天| 亚洲图片欧美日韩| 国产91丝袜 在线播放| 黄色区免费观看中文字幕| 青草青青久久久久久国产| 呻吟 欧美 日本 中出| 三级精品三级在线观看| 中文字幕精品日韩中文字幕| 激情文学小说一区二区 | 人妻熟女一区二区三区视频| 亚洲一区在线观看欧洲| 大香蕉伊在线久草麻豆天堂故事| 人妻色偷色噜| 老熟女熟妇| 神马九九| 宗合情欲网| 国产精品视频在线观看| 97在线免费看| 大香蕉免费3| 国产精品91一样| 亚洲二区精品在线观看 | 激情五月天中文字幕色| 免费的av网| 亚洲欧美色图片| 亚洲综合另类小说色区亚洲成av人片在www| 国产AV超爽| 国产丸一视频| 蜜桃无码AV一区二区| 97伦乱| 国产精品一级片在线看| 亚洲精品乱码久久久久久蜜桃麻豆| 强奸乱伦日韩AV| 精品无码一区二区人妻久久蜜桃| 亚洲免费人妻在| 超碰1997| 欧美中文字幕日韩在线| 熟女露脸激情自拍视频| 亚洲91少妇| 九九九九AV| 日韩免费人妻色情网站| 手机午夜电影神马久久| 欧美综合777| 日韩精品黄片免费观看| 花花AV导航| 国产天天骚| 日韩97P| 丁香五月综合| 一区二区三| 国产青一二三| 十八禁啪啪视频| 久久综合女优| 嗯嗯嗯啊啊啊操的我好爽| 91久久九九精品国产综合| 欧美亚洲AN| 天天综合网日韩| 男人的天堂欧美| 手机看片1025| 国内毛片欧美香蕉精品| 久久精品国产97欧美精品亚洲 | 四虎免费视频| 精品久一区免费| 国产隔壁老王影院在线| 啊啊啊爽爽| 伊蕉97蜜桃97狠狠综合干| 亚洲强奸乱伦影视网| 欧美72网页| 人人操人人大香蕉| 国产在线综合福利网站| 欧美综合综合| 96国产污污污丝袜| 日本成人电影资源网| 精品亚洲天堂| 国产中午字一暮区| 久久人体一区二区| 欧美日韩淫加| 丁香五月偷拍| 熟女探花啪啪| 久久久精品九| 九一性生活免费视频| 欧美少妇大量自拍视频在线观看| 青草青草久热| 天天草天天干天天日| 一区二区三区国产在线播放 | 波多野结衣先锋影音| 熟妇熟女一区二区三区| 一本色道久久综合亚洲二区三区| 欧亚不卡| WWW4虎| 国产av尤物| 强奸乱伦av电影| 18啪啪手机免费性爱| 青青在线视频日韩欧美| 91女日逼| 日韩小电影| 97在线免费视频观看| 啊啊啊啊啊啊啊网址在线观看| 97色爱| 日本欧美一区二区三区免费| 麻豆国产精品午夜视频| 一起草三级AV电影在线观看 | 98一区二区精品| 狠狠干综合| 涩五月婷婷| 人干人人人操人人摸| 黄色香蕉视频网站一区| 激情婷婷综合久久| 国产精品人妻一区二区| 久久性爱视频99| 国产色产精品在线观看| 东北少妇高潮zzzz| 精品久久久久久AV无码| 久久久久久999| 正宗无毛一线天嫩逼| 久久久9 9 9精品| 啊啊啊好疼| 欧美色爱综合| 91青青草| 日本性交操一区二区不卡系列| 青娱乐999| 亚洲综合电影| 国产精品人妻熟女aⅴ| 性爱综合一区二区| 一级性爱aaaa| 丰满欧美少妇| 久久亚洲不卡一区二区三区| 神马久久69| 操逼短片| 国产偷拍网站| 大香网站| 北条麻妃99精品青青久久| 国产人伦精品一区二区三区| 妇女视频网站| 91白虎| 亚洲色宗合| 超碰欧美| 五月丁香拍拍激情综合三级| 美女诱惑爱爱| 亚洲欧美91√| 97精| 一区二区视频在线播放| www.超碰| 精品妇操一区二区三区| 蜜臀久久99精品久久久久| 日本性感人妻91| 手机在线播放国产福利| 98一区二区精品| 亚洲一区二区三区麻豆传媒| 欧美最大综合网| 夜夜爽夜夜操| 一级特级aaaa毛片免费观看 | 亚洲射综合网| 97中文字幕一区| 91激情| 在线国产一区二区av| 一区二区你上我| 国产第二页| 亚洲欧美情色| 国语对白在线播放视频| 亚欧中文字幕在线视频| 亚洲欧美综合| 婷婷午夜| 亚洲日韩97| 亚洲精品国产精品成人| 亚洲成人网站在线观看| 久久久久久久少妇| 97亚洲色图| 国产精品女生av| 欧美日本久久精品一区 | 国产亚洲在线| 国产AV天美传媒一区二区三区 | 久久精品综合| 夜间福利片1000无码| 久久久久久久极品香蕉视频| 极品出轨视频网站| 亚洲第2页| 在线天堂999| 哈哈操 大香蕉| 国产又粗又长又爽又色| 久久久久亚洲一区女同性恋中文字幕| 亚洲熟女综合网| 欧美网站免费| 久伊人网78| 入口操逼网站| 99爱爱| 欧美 日韩 亚洲 春色| 野狼激情网| 亚洲欧美91| 亚洲一区日韩| 久久久一二三四区| 国产精品久久久三级无码| 久久日本熟女精品一区| 大香蕉免费3| 91逼逼女人91| AV一起草在线| 午夜综合在线| 欧美疯狂做爰xxxx| 久热伊人| 97午夜剧场日韩| 女人久久久| 欧洲天天在线| 手机午夜电影神马久久| 久久超碰97中文字幕| 日韩欧美福利视频看看| 91夜夜蜜桃臀1区2区3区| 26uuu成人影片| 欧美91精彩| 国语av最新自产拍在线观看| 男人的天堂99| 中日无幕一二三四区| 日本人妻最新在线中| 精品久久99| 午夜亚洲WWW湿好大| 神马午夜久久久| 国产亚洲精品美女久久久久久2021| 亚洲日韩AV视色| 97伊人超碰| 色综合五月天| 无码不卡八戒| 色婷婷一区二区三区久久午夜| 在线观看国产黄色| 蜜臀99久久| 夜夜騷av、一區二區| 日韩人妻一二三区视频| 91N综合网| 精品妇女一区二区三区| 日欧操屄| 欧美草草高清日韩视频| 九九九九九九成人| 91校园春色长篇| 久久在线观看免费视频| 欧美偷| 熟妇人妻一区二区三区| 欧美青青视频| 99热在线播放| 久久黄色视频一区二区三区| 性生活性生大爱77AV国产| 一二三四日本视频高清| 蜜乳AV一区| 亚洲图片另类| 91 国产丝袜在线播放-百度| 91黑丝少妇| 亚欧无码在线| 国产JDAV无码视频在线观看| 久久有码视频| 天天操人人操骚逼网站| 欧中日成人免费影视| 免费看日产一区二区三区| 精品久久久久久中文字幕视频免费| 久久人妇| 国产精品自产拍在线观看社区| 日本在线不卡123| 日韩av无码网站| 一本色道久久综合狠狠操| 九久9热| 成人性爱全视频观看| 亚洲加勒比久久日本道| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 99热亚洲天堂| 五月天激情小说| 国产日韩欧美亚洲精品95| 97香蕉网| 欧美精品97| 999熟女精品| 久久久久久91香蕉国产| 久悠悠av| 又黑又大又粗| 综合色图,成人综合网| 国产亚洲综合欧美一区| 加勒比久久综合网高清| 欧美人妻精品一区二区| 国产亚洲日韩在线三区黑人| 亚洲色系另类精品国产| 欧美日日操| 91视频精品| 风月影院十八禁| 欧美亚洲首页| 超碰九区| 人人摸人人入| 蜜乳成人AV| 一二三四区电影| 久久久久久久9最新免费视频观看| 人人澡人人爽人人精品| 厕所偷拍在线| 日本青青草在线| 91丰满| 日本在线15p| 伊人四虎综合| 欧美 色 亚洲| 欧美97爱| 国产人妖的免费的视频| 影视综合无码少妇| 丝袜熟女一区二区三区| 日韩乱伦视频| 啊…啊…操我用力操我| 精品免费1| 久久一二区四| 日韩电影天堂视频一区二区| 激情四射五月天| 欧美精品久久| 四虎在线观看视频| www久久国产精品| 久操网无码在线| 91天堂色男人的天堂| 国产高清无码一区二区三区四区皇冠| 大香蕉综合在线| 可以看的av| 大香蕉AV丝袜| 免费超碰97久久| 五月天亚洲网| 欧美乱欲| 日本免费一级AAA大片器| 激情网色| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美激情性久久久久久| 国产中文字幕曰本毛片| 丝袜 亚洲 偷拍| 18一区二区三区| 久久久久大香青草精品综合| 91天美免费| 免费视频在线一区二区不卡| 色官网色综合| 亚州情色j区| 青娱乐蜜桃臀AV色婷| 97欧美色| 国内精品嫩模A∨私拍小视频| 啪啪资源网| 激情网五月天| 新精精品久久精品| 天天伊人| 亚洲精品无码少妇久久| 亚洲 se图 欧美电影| 福利天天都操| 温婉少妇玩3p| 日本一区二区三区欧美日韩中文字幕| 十八禁电影伊人网| 日产欧美电影一区二区三区| 丁香九月激情| 男人的天堂在线| 亚洲日韩国产精品| 亚洲成人网站在线观看| 亚洲黄a三级三级三级看三级| 91亚洲网站| 午夜偷拍久久熟女| 亚洲欧美中日韩| 大香蕉人妻久久| 日韩欧美国产一区二区三区四区| 夜夜中出国产| 91丨九色丨熟女高潮| 美女裸体麻豆天美蜜桃91| 亚洲丨在线| 久久亚洲AV无码专区国产精品| 97网址www| 狠狠色五月亚洲91| 婷婷亚洲综合| 欧美综合综合| www.人人cao| 激情视频一二三| 日韩精品中文字幕人妻| 超碰97资源大奶| 91色拍| 欧美男人一区| 91观看 国产白丝| 亚洲中文字幕精品久久久久久直播| 超碰人妻中文在线| 日韩在线性爱免费视频| 神马久久69| 欧美精品23| 国产熟女一区二区丰满| 午夜a成v人电影| 伊人久久亚洲中文字幕| 亚洲成人黄色在线观看| 丝袜性亚洲| 18禁止看精品中文字幕| 国产成自自拍在线观看| 91看黄片| 天美一区在线| 国产 v乱码一区二| 操久久久久| 亚洲综合小说另类图欧美视频激情小说色五月天 | 和协影院中文字幕三区| 中文字幕一区二区三区字幕| 国产一区二区三区久久精品太古里| 极品销魂美女一区二区| 国产精品午夜成人福利| 一本精品日本在线视频精品| 77国产精品| 亚洲 欧美 手机在线观看| 久久9精品网站| 3p国产色噜噜一区| 欧美综合亚洲综合| 中文97国产| 日日摸夜夜夜夜爽| 性欧美| 六月丁香五月婷婷| 波多野结衣AV无码一区| 91艹| 一本一道人妻久久一区二区三区| 在线日韩精品一区二区三区| 欧美日韩青操| 色五月首页| 69视频入口| 国产精品久久久久久久免牛肉蒲团 | 十八禁成人网站在线观看| 亚洲97网站| 日韩乱码Av| 在线岛| 欧日韩一二三f区| 欧美日不卡| 999亚洲国产视频| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 国产无码成人无码| 婷婷久草| 东京太热久久久| 日韩色欲久久一二三四区| 精品国产乱码久久久久久久| 九九英色视频| 色婷婷激情| 久久透逼视频| 另类欧美色| 裸体1区| 天天淫人人妻日日色| 亚洲成人一区二区精品| 亚洲自拍偷拍视频在线| 国产精品3| 免费看污网站| 婷婷丁香六月| 国产三级多多影院2022国产AA一级毛片无码| 67914在线兔费成人视频| 求求你操操我| 亚洲情色第一页| 日本肏逼视频在线观看| 中文字幕日韩精品久久| 欧美天天弄| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美日韩国产电影| 国产剧情一区在线观看| 亚欧高清v| 思思热免费在线视频| 中文字幕精品探花视频| 国产精品久久久亚洲第一牛牛_在线观看| 美腿丝袜高跟网免费视频免费视频| 高清国产av无码| 手机在线播放国产福利| 超清福利精品视频在线| 欧美精品成人一区二区在线观看| 在线视频资源| 婷婷五月天色网| 91超碰碰在线| 国产精品久久久久久久久久久久久久久久久久 | 麻豆天美制片厂网站视频| 亚洲国产第一页综合视频| 欧美日韩性爱操大逼| 香蕉久久AⅤ...| 亚洲成人在线高清| 韩三级a视频在线观看| 日韩熟女三十乱伦| 久久伊人最新网址视频| 亚洲男人天堂网| 蜜臀视频网站| 精品人妻中文字幕高清| 国产精品自拍视频 | 亚州操操穴网| 亚洲s在线观看| 啊啊啊啊视频免费| 欧美色图中文字幕| 久久蜜桃综合网| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 色综合久久久久| 综合色图区| 99日韩| 这里只有精品视频| 天天操天天射青青草| 国产精品久久发布| 亚洲情色在线| 青操影院| 欧美 亚洲| 日韩成人私密一级精品av| 亚洲精品一区二区精品| 欧美日本国产日韩激情视频| 五月婷在线| 野狼激情网| 日韩精品影视| 亚洲日韩少妇一道本视频| 久久原创中文| 亚洲丝袜少妇在线| 国产肏逼网站| 新婚人妻扶着粗大强行坐下| 丁香六月婷婷| 日本啊啊啊啊啊视频| 99re这里| 蜜臀AV一区二区三区| 囯产精品久久久久久久久久二区三区 | 日韩有码 一区二区三区| 国产一进一出视频网站| 亚洲精品成人| 欧美性,色九九| 懂色影视久久| 老熟女91| 自拍偷拍2025在线观看| 好淫网一二三视区| 亚洲天天精品| 伊人热综合| 在线v中文字幕一区二区三区| 亚洲人成网www| 夜夜嗨绯色| 日本媚薬中文字幕在线| 狠狠中文字幕| 懂色AV一区二区三区| 中文字幕人乱码中文字的预防方法 | 欧美三级免费伊人| 91操熟女视频| 一区二区三区视频国产免费| 人妻啊啊人妻啊| 91精品免费| 国产亚洲色停停久久99精品91| 波多野结衣先锋影音| 国产精品91一样| 久9爱精品| 一级@啪啪视频| 激情开心五月天| 狠狠2050在线观看| 欧美黄色手机在线观看| 成人在线日韩| 久久成人精品| yellow网站免费观看日韩高清无码| 91色艳| 欧美图片校园春色| 日本操逼视频导航| 双插在线| 韩国免费播放一级毛片| 激情深爱五月天| 男人天堂久久精品不卡| 婷婷午夜成人色中色| 国产精品久久久蜜臀| 我想要 啊 啊 啊| 亚洲熟女中文字幕在线| 天美一二三在线观看Av| 99久久精品无码一区二区| 91蜜臀在线久久久久| 国产天天噜一噜久久久| 超碰成人公开| 最新精品久久蜜桃 | 国产亚洲精品农村妇女| 美女淫穴| 亚洲国产精品V?在线播放| 98色网| 日韩综合97p| 久久婷婷色| 综合熟妇一区二区三区| 欧美视频中文字幕区| 941超碰| 在线强奷到舒服的无码视频| 天天爱综合网| 国产超碰人人操| 撸无码不卡免费视频| 五月丁香综合啪啪| 另类小说欧美激情校园春色| 五月婷婷深深爱| 久久久四区| 美女黄色一级A视频| 98久久超碰| 男人亚洲91首页在线| 91在线视频国产网站| 小草精彩毛片| 国产无吗在线播放| 亚州高清色综合| 亚洲五码一区二区三区| 91色s| 婷婷久热| 国产无码成人无码| 亚洲 欧美 另类 日韩 人妻一区| 精品人妻中文字幕4399| 九热超碰| 国产刺激视频| 免费看片黄| 亚洲999综合| 婷婷色播婷婷| 大象AV在线| 91超碰碰在线| 一区二区激情国产熟女| 国产精品爆乳懂色蜜乳| 爱爱久久| 欧美日综合| 成人毛片免费| 国产乱子伦一区二区三区免看| 国产成人自拍视频在线| 精品视频在线观看| 97超碰中文| 99热精品在线| av强奸乱轮| 中国熟妇| 手机久操欧美综合色码| 六月色色| 天堂俺去俺来也www久久婷婷| 羞答答AV中文字| 精品一区96| 国产三级电影免费观看| 久久性爱视频免费看| 激情五月天校园春色网| 91ise欧美| 中文字幕日韩人妻视频一区二区三区| 超碰99re| 精品乱码在线观看| 九九十八精品| 欧美一级色| 萌白酱自拍视频| 亚洲爽图| 欧洲一级性爱视频在线观看| 精品国产乱码久久久久久蜜臀| 久久久久密臀一区二区| 亚洲 欧美 91| 黄网色一区二区三区四区精品| 天天干人人看综合| 一二三区精品视频| 97欧美久久久久久久| 日韩伦理视频| 五月天色五月| 91free福利| 婷婷去俺也去六月色| 校园春色五月天| 99这里只有精品| 欧美人人天天网| 青青草吊丝| 校园春色之综合网| 成人av免费观看| 乱伦日本色图AⅤ| 国产一区二区三区白丝| 久久久久9999| 97在线免费| 久久精品国产亚洲av水密被窝| 亚洲女人毛茸茸91| 99色骚| 91天天爱| 国产熟女精品区| 青青操少妇| 综合久欧洲| 人人爽夜夜操| 超碰激情808| 夜夜夜久久| 日韩丝袜人妻AV| 麻豆精品久久久久久久| 亚洲天堂电影精品一区| 这里只有精品视频在线| 性爱久久| 亚州伊人色综台| 久热色情精品| 日本精品人妻少妇一区二区| 91九九九馒头| 顶级少妇BT天堂| 国产精品制服丝袜中文字幕日韩一区二区三区 | 草草网站影院白丝内射| 亚洲囯产精品女人久久久| 人人做,人人操,人人摸| 久久亚州精品成人Av无| 激情抓乳插进去啪啪啪日韩| 久思思热视频在线观看| 91在线视频观看国产| 欧美午夜视频精品久久| 熟女被操视频网址| www.色婷婷| 亚州国产精品乱| av在线人气| 国产一区二区三区久久精品太古里| 亚州综合AⅤ| 无卡一区=区| 亚洲图片欧美偷拍| aaa亚无码专区| 91N综合在线| 强奸熟女一区二区三区| 国内外毛片在线观看| 神马麻豆福利院| 亚洲国产成人7777| 久久直播国产| 五月香婷婷| 欧亚第一综合网| 国内成人圈中文字幕无码视频| 99热这里都是精品| 无码动漫av中文字幕| 精品亚洲国产成人精品| 天天插天天干| 日本A级视频| 99这里只有精品| a片久久久久久久久久久久 | 超碰在线1234区| 久久久久久九| 久久美女国产| 爱爱60秒免费视频| 97一区二区三区视频| 91老司机视频| 家庭乱伦性爱av| 3571色综合一区二区二区| 青青操在线亚洲视频观看欧美在线 | 青青草日韩无码| 久久久∴| 东京热天堂网| 欧美亚洲日本视频久久久| 天天日B狠狠操| 天天热精品| a片久久久久久久久久久久 | 大香蕉在线SuP| 亚洲欧美另类小说| 每日更新AV| 天天α片| 呦呦一区| www99热| 试看60秒| 人人操我人人干| 亚洲色吧网| 91熟女视频网| 思思热免费在线视频| 天天干2019| 色九久| 丰满人妻av一区二区三区 | 精品欧美А∨无码黑人大荫蒂| 久久综合九九| 熟女一区二区三区四区| 久久久久亚洲三级电影| 色欧美天天| 九九精品网| 亚洲drav色图| 人人么人人操| 亚洲不卡AV在线| 久久精品操| 国模少妇一区二区三区| 99精品丰满人妻| 强奸乱伦免费网站| 黄色小说亚洲| 亚洲 暴爽 AV人人爽日日碰| 九九综合| 少妇熟女一区二区三区| 一级免费啪啪片| 性感美女啊啊啊在线| 日本操大逼| 久久亚码| av在线一区二区三区| 九九九九九九九九九五码| 操www| 欧美久久婷婷| 一级做a爰片久久毛片图片| 校园春色欧美色图| 在线观看一级α片刺激高潮视频| 免费看污网站| 成人av性爱电影在线观看| 色狠狠综合噜一二三区| 欧州一区二区三区四区| 亚洲AV资源| 国产亚洲欧美每日在线| 少妇69中文| 国产黄片精品在线| 啊啊啊啊啊啊啊在线| 午夜爽爽爽在线观看永久入口姬片| 九九国产热| 日本一级婬片试看三分钟| 日日噜噜夜夜久久亚洲一区二区 | 亚州综合图片| 一级久久久久久久久久久| 人妻少妇精品无码专区二区密桃| 日日噜噜夜夜狠狠视频无| 乱操乱伦AV| 97硬碰| 18啪啪手机免费性爱| 日本高清加勒比| 思思热影视| 久久有码视频| 久久久9品一区二区三区| 99人妻碰碰碰久久久久禁片| 啊啊啊好舒服好爽啊啊啊视频| 中文字幕一二区二三区人妻专区| 久久精品视| 精品一区二区3区| 精品人妻一区二区三区四区不卡在| 国产综合在线视频网站| 亚洲永久永久永久永久一级一级一级精品 | 高清不卡视频| 欧美一级国产一级| 老鸭窝在线视频播放| 99激情| 欧美亚洲第一页| 懂色av中文字幕| 午夜久久一区二区无码中出| 97在线观看播放视频| 久伊人网78| 99re69| 97在线精品| 国产美女销魂在线观看不卡| 人妻喷水| 欧美一区二区三区大综合| 白嫩国模丰满一二三区| 起碰97| 日日AAvv| 91亚州欧美| 丁香婷婷久久 | 操死我了嗯嗯嗯| 久久香蕉网| 美女午夜福利免费视频| 91殴美| 激情久久日韩精品中文字幕麻豆| 国产成人资源| 在线观看日韩av不卡| 综合av社区| 中文字幕人妻丝袜乱一区三区| 精品国产99| av优播| 黄片不用下载在线观看| 国产家庭乱伦性爱视频| 熟妇色99| 综合网亚洲1| 亚爽爽爽爽爽爽爽爽| 红杏大香蕉| 日韩去日本高清在| 影音先锋新男人| 精品人妻中文字幕高清| 日韩欧美三级| 五月婷婷青青草娱乐伊人| 97se综合网| 熟女啪啪视频| 26uuu欧美| 亚洲AV无码国产成人| 一级日本牲交大片好爽在线看| 60秒不遮不挡| 日韩欧美麻豆 | 91丝袜| 蜜桃久久一区| 97人人色| 懂色av中文字幕一区二区三区天美| 四季AV综合网址| 中文字幕精品人妻丝袜| 亚洲天堂电影精品一区| 天天综合精品| 精品色色| www.色婷婷| 天天爽天天| 欧美男人一区| 99热这里只有精品8| 久久这里只精品99re66图| 蜜臀AV网站| 国产女人91精品嗷嗷嗷嗷| 国产精品一级特黄aaa大片在线观看| 丁香九月 婷婷| 日韩操逼性鲍| 一区不卡在线观看av| 成人av福利在线观看| 亚洲熟女乱色一区二区三区| 不卡av免费在线网址| 日产操逼| 人人做天天爱| 九色精品视频导航1| 欧美性爱第一区| 人人艹亚洲| 在线观看色视频| 国产精品久久伊人| 五月天婷婷基地| 蜜臀网址在线| 老熟女阿 国产91| 97极品无码| 电家庭影院午夜69久久夜色精品国产69乱 | 国产强奸乱伦第1页| 老熟妇乱轮| 欧美日韩另类在线播放| 国产探花精品在线| 日本污ww视频网站| 青青草日韩无码| 天天干天天日天天射黄色| 久久一区,青青青青草视频在线播放| 国产污视频麻豆传媒一区二区 | 色欲三区| 女人喷水视频在线观看| 91精品丝袜久久久久久| 日韩素人无码一区二区三区三州| 艳美熟妇先锋一二三区| 久久神马影院| 91少妇通奸网站| 九热久| 69av一区二区三区| 唐山老熟妇露脸啪啪叫| 日本99视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 婷婷五月天av| 超硑97精品| 97天天插| 亚洲另类天堂| 免费看国产曰批40分钟怎么下载| 十八禁视频网站| 四虎AV无码| 91亚.色| 网站A V在线| 亚洲经典啪啪| 久久婷婷在线观看视频| 色综合1991| 91人妻人人澡人人爽人人精品| 91c色| 熟妇女人妻呻吟久久AV| 国产外初女出血视频| 免费AV中文网在线观看| 日本性爱少妇| 欧美老妇女内射网址| 麻豆色约约| 欧 美 自 拍 偷 拍| 六月激情网| 一区二区亚州激情久婷婷欧美| 91天天综合| 免费一级视频特黄色大片| 久久久婷| 中文字幕乱码在线| 少妇滛荡视频| 中文字幕日韩人妻视频一区二区三区交换夫妻| 色香天天| 一区二区三区激情在线观看| 屌妞视频久久久久久久久久久久| 欧亚三区动漫| 亚洲成A∨人影院在线欢看| 天美一二三在线观看Av| 91精品91久久久久77777俄罗斯老妇姓x| ..日韩av毛片精品久久久| 日本熟妇熟色97一本在线观看| 99蜜月精品久久| 精品中文字幕一区二区| 亚洲一二三精品久久网 | 黄页大片在线观看| 欧美激情 亚洲色图| 人人操人人叉人人插人人| 又黄又粗又硬又长又大| 肏逼视频日本| 精品国产乱码久久久久久影片| 伊人欧美大香蕉视频| 亚洲成人久久一区二区| 青青草色插素人| 日本性爱视频一级| 日本青青草在线| 亚洲情色欧美| 黑操B| 色悠久| oumeisetu综合| 亚洲动态色图| julia高潮后不停追击中出| 青草精品视频一日本久久久久网站| 黑丝自慰喷水网站| 久久久91福利姬| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 欧美天天综| 思思热在线视频在线| 国产原创精品| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 欧美大香蕉同搞| 91/欧美| blacked精品一区国产| 美女91av| 女人被添高潮免费视频| 99久久99九九99九九九| 丁香六月综合激情| 亚洲91网| 校园春色欧美色图| 中文字幕精品一区欧美| 午夜精品久久久久久久99热影院| 特级特黄一级毛片免费| 嗯嗯啊啊视频一区二区三区| 99久久婷婷丁香| 69丨亚洲丨精品丨入口免费播放| 国产人妻天天干精品| 97精品视频在线| 大香樵伊人网| 欧美成人一级麻豆| 97色妞| 一区二区三区精品视频| 97天天| 蜜臀AV成人精品蜜臀AV久久| 日韩中文字幕人妻视频| …中文字幕亚洲乱,97人妻无码费视…| 5月婷婷6月六月丁香| 一区二区视频在看| 快点操死我| 中文激情网| www熟女乱伦com| 久操视频免费观看| 长长久久88视频| 国产真乱mangent| 久9爱经典视频| 一区二区 韩日AV| 亚洲无码超碰免费| 九九九九一级| 婷婷久草一区二区三区| 岛国免费视频在线| 欧美精品,四区。五区| 啊啊啊不要好疼视频| gogogo免费高清看中国国语| 人妻大香蕉| 人妻夜夜爽天天爽麻豆三区网站 | 97综合国产精品高潮久久| 欧美黑人精品一区二区| 97亚洲在线| 青青欧美| 懂色AV一区二区三区| 亚洲一区二区三区中文字幕| 日本久久久久久久久久| 亚洲精品欧洲精品| 亚洲AV成人无码一区二区三区在线观看 | 亚洲偷91色| 久9视频| 亚洲无码精品AV久久久| 色哟哟AV| 国产人伦精品一区二区三区 | 久久婷婷伊人| 亚洲啪AⅤ永久无码| 奶水 人妻 哺乳 在线| 欧美91在线+|+欧美| 亚洲男人天堂Av| 免费伦费视频在线观看| 日韩欧无码一区二区三区免费不卡 | 亚洲欧美洲综合| 国产熟女二区| 人人妻人人操人人乐| 一个人免费HD91视频| 国产狂喷潮在线精品| 东京热综合久久一区二区 | a级理论午夜日本| 欧 美 自 拍 偷 拍| 超碰91在线| 亚洲第一页色网| 日韩欧美日韩| 亚洲国产午夜真人一级片中文字幕精品黄网站| 天美传媒婬乱在| 夜夜做夜夜爽精品视频| 97天天操天天干| 亚洲天天艹| 亚洲九九夜夜| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 日韩一级特黄av毛片| 日韩成人无码| 超碰人妻久久| 999国产精品999久久久久久| 免费超碰97久久| 亚洲精品国产精品乱码不卡| 91女在线观看| http://qxhbdz.com| 久99| www.久久| 99久久久久| 99热只有这里有精品| 国产AV精久久| 日韩中文字幕人妻视频| 先锋激情∨在线视频播放| 午夜福利国产欧美日韩夜夜| 色99999| 熟妇乱伦一区二区| 国产品精品自在在线午夜免费| 2017天天插| 九九九九9999| 欧美激情综合网| 91狠狠综合| 中文字幕国产在线天堂| 东京热一区二区中文字幕| 久久一二三四| 亚洲巨爆乳一区二区三区四季网| 啊啊啊在线观看| 无码精品久久久久久亚洲| 搡老熟女免费视频| 1769一区| 嫩呦国产一区二区三区AV| 亚洲欧洲日韩天堂av| 日韩精品1区2区中文字幕| 亚洲码专区| 人妻久久久| 日韩av三四区|