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

ARTICLE DETAIL

資訊詳情

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

diagram-design:用代碼化設(shè)計(jì)系統(tǒng)管理架構(gòu)圖表

diagram-design:用代碼化設(shè)計(jì)系統(tǒng)管理架構(gòu)圖表 1. 從一張草圖到一套系統(tǒng)diagram-design 到底在解決什么問(wèn)題第一次看到 diagram-design 這個(gè)詞很多人會(huì)以為它只是“畫(huà)圖”的另一種說(shuō)法。但真正在項(xiàng)目里被圖表折磨過(guò)的人知道問(wèn)題從來(lái)不是“畫(huà)不畫(huà)得出來(lái)”而是“畫(huà)出來(lái)的東西能不能用、能不能改、能不能被別人接手”。我做過(guò)不少技術(shù)方案配圖、流程梳理和架構(gòu)示意早期也用過(guò)各種拖拽式工具結(jié)果是圖越畫(huà)越漂亮維護(hù)成本卻越來(lái)越高——改一個(gè)節(jié)點(diǎn)整張圖重排換一個(gè)主題顏色全亂想復(fù)用某個(gè)模塊只能截圖粘貼。diagram-design 的核心是把“圖表”從一次性美術(shù)產(chǎn)物變成可維護(hù)的設(shè)計(jì)系統(tǒng)。它關(guān)注的不是單張圖的視覺(jué)效果而是一整套規(guī)則節(jié)點(diǎn)怎么定義、連線怎么走、間距怎么統(tǒng)一、顏色怎么分層、不同圖種之間怎么共享同一套語(yǔ)義。換句話說(shuō)它更像是一套“圖表的 CSS 框架”而不是一個(gè)畫(huà)圖軟件。這套東西適合誰(shuí)如果你只是偶爾畫(huà)一張流程圖發(fā)群里可能用不上。但如果你需要持續(xù)輸出架構(gòu)圖、時(shí)序圖、狀態(tài)機(jī)、數(shù)據(jù)流圖并且這些圖要跟著代碼和文檔一起迭代那 diagram-design 的思路就非常值得參考。它解決的是三個(gè)具體問(wèn)題第一圖表風(fēng)格不統(tǒng)一導(dǎo)致溝通成本高第二圖表源文件難以版本管理和協(xié)作第三重復(fù)繪制相同結(jié)構(gòu)的圖浪費(fèi)大量時(shí)間。我后來(lái)把這套思路落地到自己的項(xiàng)目里最直觀的變化是以前畫(huà)一張部署架構(gòu)圖要四十分鐘現(xiàn)在改一個(gè)配置文件十秒鐘重新生成。這不是工具帶來(lái)的魔法而是設(shè)計(jì)系統(tǒng)帶來(lái)的復(fù)利。2. 核心設(shè)計(jì)思路拆解為什么是“系統(tǒng)”而不是“模板”2.1 圖表即代碼把視覺(jué)元素抽象成可配置項(xiàng)diagram-design 最底層的邏輯是承認(rèn)圖表本質(zhì)上是一種結(jié)構(gòu)化數(shù)據(jù)。節(jié)點(diǎn)是對(duì)象連線是關(guān)系布局是算法樣式是規(guī)則。一旦接受這個(gè)前提就可以用處理數(shù)據(jù)的方式來(lái)處理圖表。我最初嘗試的是“模板法”做幾個(gè)漂亮的模板每次復(fù)制一份改文字。這個(gè)方法在第三張圖就崩了因?yàn)槟0謇锏臉邮绞怯簿幋a的改一個(gè)圓角半徑要手動(dòng)調(diào)二十個(gè)節(jié)點(diǎn)。后來(lái)轉(zhuǎn)向“配置法”把顏色、字號(hào)、間距、圓角、連線樣式全部抽成變量節(jié)點(diǎn)只負(fù)責(zé)聲明自己是什么類型。這樣改一次配置所有圖同步更新。具體來(lái)說(shuō)我會(huì)定義一套基礎(chǔ) tokentokens: color: primary: #2B6CB0 secondary: #718096 accent: #ED8936 background: #FFFFFF surface: #F7FAFC spacing: unit: 8 nodePadding: 16 layerGap: 48 typography: family: Inter, sans-serif size: node: 14 label: 12 title: 18 shape: radius: 6 strokeWidth: 1.5這些 token 不直接出現(xiàn)在圖里而是被語(yǔ)義層引用。比如“數(shù)據(jù)庫(kù)節(jié)點(diǎn)”引用color.primary和shape.radius“外部服務(wù)節(jié)點(diǎn)”引用color.secondary。這樣做的最大好處是當(dāng)品牌色調(diào)整時(shí)我只需要改一個(gè)十六進(jìn)制值所有圖自動(dòng)對(duì)齊。注意token 的命名要按“用途”而不是“外觀”來(lái)定。叫color.primary而不是color.blue叫spacing.layerGap而不是spacing.48。否則換主題時(shí)你會(huì)陷入“藍(lán)色變量指向紅色值”的混亂。2.2 語(yǔ)義分層讓圖表自己解釋自己很多圖表看起來(lái)亂不是因?yàn)楫?huà)得不好而是因?yàn)槿鄙僬Z(yǔ)義層次。diagram-design 強(qiáng)調(diào)把節(jié)點(diǎn)分成“層”基礎(chǔ)設(shè)施層、服務(wù)層、數(shù)據(jù)層、外部依賴層。每一層有自己的視覺(jué)權(quán)重讀者一眼就能看出哪些是核心哪些是輔助。我在實(shí)際項(xiàng)目中會(huì)把層定義成枚舉enum DiagramLayer { Infrastructure infra, Service service, Data data, External external, Client client }然后為每一層綁定樣式規(guī)則。比如基礎(chǔ)設(shè)施層用淺灰背景、細(xì)邊框服務(wù)層用主色填充、白色文字?jǐn)?shù)據(jù)層用深色背景、等寬字體外部依賴層用虛線邊框、降低透明度。這樣即使節(jié)點(diǎn)數(shù)量很多讀者也能通過(guò)視覺(jué)層次快速建立認(rèn)知地圖。這個(gè)思路的另一個(gè)好處是它強(qiáng)迫你在畫(huà)圖之前先想清楚系統(tǒng)結(jié)構(gòu)。以前我經(jīng)常畫(huà)到一半發(fā)現(xiàn)“這個(gè)組件到底算服務(wù)還是算基礎(chǔ)設(shè)施”現(xiàn)在必須在數(shù)據(jù)模型里先定義清楚。畫(huà)圖變成了建模而不是拼圖。2.3 布局約束用規(guī)則代替手動(dòng)拖拽手動(dòng)拖拽最大的問(wèn)題是不可復(fù)現(xiàn)。今天把節(jié)點(diǎn)放在這里明天換個(gè)人打開(kāi)位置全變了。diagram-design 的做法是定義布局約束讓算法決定位置。常見(jiàn)的約束包括同層節(jié)點(diǎn)水平對(duì)齊垂直間距固定跨層連線優(yōu)先走直線避免交叉同一父節(jié)點(diǎn)的子節(jié)點(diǎn)聚攏在一起連線標(biāo)簽靠近中點(diǎn)避免遮擋我用的是基于 dagre 的自動(dòng)布局配合自定義的層級(jí)排序。核心配置如下const layoutConfig { rankdir: TB, nodesep: 40, ranksep: 80, edgesep: 20, marginx: 24, marginy: 24, align: UL, ranker: network-simplex };rankdir控制方向nodesep控制同層節(jié)點(diǎn)間距ranksep控制層間距。這些值不是拍腦袋定的而是根據(jù) token 里的spacing.unit推導(dǎo)出來(lái)的nodesep unit * 5ranksep unit * 10。這樣布局和樣式共享同一套節(jié)奏整體看起來(lái)才協(xié)調(diào)。實(shí)操心得自動(dòng)布局不是萬(wàn)能的。遇到環(huán)形依賴或復(fù)雜交叉時(shí)我會(huì)手動(dòng)指定幾個(gè)關(guān)鍵節(jié)點(diǎn)的rank讓算法在局部服從人工約束。完全放任算法出來(lái)的圖可能邏輯正確但閱讀體驗(yàn)很差。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)從零搭一套可用的圖表系統(tǒng)3.1 節(jié)點(diǎn)定義把業(yè)務(wù)概念翻譯成圖表元素節(jié)點(diǎn)不是隨便畫(huà)的矩形。在 diagram-design 里每個(gè)節(jié)點(diǎn)類型都對(duì)應(yīng)一個(gè)業(yè)務(wù)概念并且有明確的輸入輸出。我通常會(huì)先列一張表把系統(tǒng)里所有出現(xiàn)的實(shí)體分類節(jié)點(diǎn)類型語(yǔ)義視覺(jué)特征典型屬性客戶端用戶入口圓角矩形淺色填充平臺(tái)、版本網(wǎng)關(guān)流量入口六邊形主色邊框協(xié)議、限流服務(wù)業(yè)務(wù)邏輯矩形主色填充語(yǔ)言、副本數(shù)數(shù)據(jù)庫(kù)持久化圓柱體深色填充引擎、容量緩存加速層菱形虛線邊框策略、過(guò)期消息隊(duì)列異步通信平行四邊形強(qiáng)調(diào)色主題、分區(qū)外部依賴第三方虛線矩形低透明度供應(yīng)商、SLA這張表一旦定下來(lái)畫(huà)圖就變成了“選類型、填屬性”。我見(jiàn)過(guò)很多團(tuán)隊(duì)圖表混亂根本原因是每個(gè)人對(duì)“服務(wù)”和“組件”的理解不一樣畫(huà)出來(lái)的形狀和顏色自然五花八門。統(tǒng)一節(jié)點(diǎn)定義等于統(tǒng)一了團(tuán)隊(duì)的心智模型。在實(shí)現(xiàn)上我會(huì)為每種節(jié)點(diǎn)寫(xiě)一個(gè)渲染函數(shù)function renderServiceNode(node) { return { shape: rect, style: { fill: tokens.color.primary, stroke: tokens.color.primaryDark, strokeWidth: tokens.shape.strokeWidth, rx: tokens.shape.radius, ry: tokens.shape.radius }, label: ${node.name}\n${node.replicas} replicas, font: { family: tokens.typography.family, size: tokens.typography.size.node, color: #FFFFFF } }; }注意標(biāo)簽里帶了副本數(shù)這是有意為之。圖表不只是結(jié)構(gòu)示意還應(yīng)該承載關(guān)鍵運(yùn)維信息。讀者看到“3 replicas”就知道這個(gè)服務(wù)是高可用的看到“1 replica”就會(huì)多問(wèn)一句。3.2 連線規(guī)則讓關(guān)系表達(dá)更準(zhǔn)確連線比節(jié)點(diǎn)更容易被忽視。很多人畫(huà)圖時(shí)連線就是一條直線加箭頭但關(guān)系其實(shí)有很多種同步調(diào)用、異步消息、數(shù)據(jù)流向、依賴關(guān)系、繼承關(guān)系。如果全部用同一種線型讀者根本分不清。diagram-design 建議至少區(qū)分四種連線實(shí)線箭頭同步調(diào)用表示請(qǐng)求響應(yīng)虛線箭頭異步消息表示事件通知粗實(shí)線數(shù)據(jù)流向表示批量傳輸無(wú)箭頭實(shí)線關(guān)聯(lián)關(guān)系表示結(jié)構(gòu)包含我在配置里這樣定義edges: sync: style: solid arrow: triangle color: #2B6CB0 width: 1.5 async: style: dashed arrow: open color: #ED8936 width: 1.5 dashPattern: [6, 4] dataflow: style: solid arrow: triangle color: #38A169 width: 3 association: style: solid arrow: none color: #A0AEC0 width: 1連線標(biāo)簽的位置也很關(guān)鍵。默認(rèn)放在中點(diǎn)容易和線重疊我會(huì)根據(jù)線的角度動(dòng)態(tài)調(diào)整偏移function labelPosition(edge) { const midX (edge.source.x edge.target.x) / 2; const midY (edge.source.y edge.target.y) / 2; const angle Math.atan2(edge.target.y - edge.source.y, edge.target.x - edge.source.x); const offset 12; return { x: midX Math.sin(angle) * offset, y: midY - Math.cos(angle) * offset }; }這個(gè)偏移量來(lái)自 token 的spacing.unit * 1.5保證和整體節(jié)奏一致。注意連線交叉是自動(dòng)布局的常見(jiàn)問(wèn)題。如果交叉太多優(yōu)先調(diào)整節(jié)點(diǎn)順序而不是手動(dòng)拉線。手動(dòng)拉線會(huì)破壞布局的可復(fù)現(xiàn)性下次重新生成又亂了。3.3 主題切換一套數(shù)據(jù)多種輸出diagram-design 的另一個(gè)實(shí)用特性是主題切換。同一份圖表數(shù)據(jù)可以輸出成淺色模式、深色模式、打印模式甚至不同品牌的配色方案。這在做技術(shù)分享時(shí)特別有用投屏用深色文檔用淺色打印用高對(duì)比度。實(shí)現(xiàn)方式是把所有顏色引用都指向 token然后準(zhǔn)備多套 tokenconst themes { light: { background: #FFFFFF, surface: #F7FAFC, text: #1A202C, primary: #2B6CB0 }, dark: { background: #1A202C, surface: #2D3748, text: #F7FAFC, primary: #63B3ED }, print: { background: #FFFFFF, surface: #FFFFFF, text: #000000, primary: #000000 } };渲染時(shí)傳入主題名所有節(jié)點(diǎn)和連線自動(dòng)換色。我實(shí)測(cè)下來(lái)深色模式在投屏?xí)r對(duì)比度更好但打印時(shí)必須換成高對(duì)比度方案否則灰色文字根本看不清。3.4 版本管理圖表也要進(jìn)代碼倉(cāng)庫(kù)圖表源文件用純文本格式存儲(chǔ)這是 diagram-design 區(qū)別于拖拽工具的關(guān)鍵。純文本意味著可以 diff、可以 review、可以回滾。我把圖表定義放在diagrams/目錄下和代碼一起提交。diagrams/ architecture.diagram.yaml deployment.diagram.yaml sequence-payment.diagram.yaml tokens/ light.yaml dark.yaml每次修改圖表git diff 會(huì)顯示具體改了哪個(gè)節(jié)點(diǎn)、哪條連線。Code review 時(shí)同事可以直接評(píng)論“這個(gè)服務(wù)為什么依賴外部緩存”而不是對(duì)著一張圖片說(shuō)“這里好像不太對(duì)”。實(shí)操心得圖表文件命名要帶業(yè)務(wù)含義不要用diagram1、diagram2。我習(xí)慣用architecture-系統(tǒng)名.diagram.yaml這樣搜索起來(lái)很方便。另外圖表文件里不要寫(xiě)死顏色值全部引用 token否則主題切換會(huì)失效。4. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)從數(shù)據(jù)到成圖的完整鏈路4.1 第一步定義圖表數(shù)據(jù)模型一切從數(shù)據(jù)開(kāi)始。我不會(huì)先打開(kāi)畫(huà)圖工具而是先寫(xiě) YAML。以一張典型的微服務(wù)架構(gòu)圖為例title: 訂單系統(tǒng)架構(gòu) layers: - id: client name: 客戶端層 - id: gateway name: 接入層 - id: service name: 服務(wù)層 - id: data name: 數(shù)據(jù)層 nodes: - id: web layer: client type: client label: Web 前端 - id: mobile layer: client type: client label: 移動(dòng)端 - id: gateway layer: gateway type: gateway label: API 網(wǎng)關(guān) - id: order layer: service type: service label: 訂單服務(wù) replicas: 3 - id: payment layer: service type: service label: 支付服務(wù) replicas: 2 - id: inventory layer: service type: service label: 庫(kù)存服務(wù) replicas: 2 - id: orderDb layer: data type: database label: 訂單庫(kù) - id: cache layer: data type: cache label: Redis 緩存 edges: - from: web to: gateway type: sync label: HTTPS - from: mobile to: gateway type: sync label: HTTPS - from: gateway to: order type: sync label: REST - from: order to: payment type: sync label: RPC - from: order to: inventory type: sync label: RPC - from: order to: orderDb type: dataflow label: 讀寫(xiě) - from: order to: cache type: sync label: 緩存這份 YAML 就是圖表的“源代碼”。它不包含任何視覺(jué)信息只描述結(jié)構(gòu)和關(guān)系。這樣做的好處是同一份數(shù)據(jù)可以渲染成架構(gòu)圖、部署圖、甚至?xí)r序圖只要換一個(gè)渲染器。4.2 第二步編寫(xiě)渲染管線渲染管線負(fù)責(zé)把數(shù)據(jù)變成圖形。我用的是一條簡(jiǎn)單的流水線解析 YAML讀取節(jié)點(diǎn)、連線、層級(jí)應(yīng)用布局根據(jù)層級(jí)和連線計(jì)算坐標(biāo)綁定樣式根據(jù)節(jié)點(diǎn)類型和主題綁定視覺(jué)屬性生成 SVG輸出矢量圖形導(dǎo)出 PNG按需生成位圖核心代碼結(jié)構(gòu)如下async function renderDiagram(source, themeName) { const data parseYaml(source); const theme loadTheme(themeName); const tokens mergeTokens(baseTokens, theme); const graph buildGraph(data); const layout computeLayout(graph, tokens); const styled applyStyles(layout, tokens); const svg generateSvg(styled); return svg; }computeLayout是最關(guān)鍵的一步。我用 dagre 做基礎(chǔ)布局然后根據(jù)層級(jí)做二次調(diào)整function computeLayout(graph, tokens) { const g new dagre.graphlib.Graph(); g.setGraph({ rankdir: TB, nodesep: tokens.spacing.unit * 5, ranksep: tokens.spacing.unit * 10, marginx: tokens.spacing.unit * 3, marginy: tokens.spacing.unit * 3 }); g.setDefaultEdgeLabel(() ({})); graph.nodes.forEach(node { g.setNode(node.id, { width: estimateWidth(node.label, tokens), height: tokens.spacing.unit * 6 }); }); graph.edges.forEach(edge { g.setEdge(edge.from, edge.to); }); dagre.layout(g); return g; }estimateWidth根據(jù)標(biāo)簽長(zhǎng)度和字號(hào)估算節(jié)點(diǎn)寬度避免文字溢出。這個(gè)估算不需要很精確但必須穩(wěn)定否則每次渲染寬度不一樣圖會(huì)跳。4.3 第三步處理層級(jí)與分組層級(jí)不是簡(jiǎn)單的上下排列。同一層內(nèi)的節(jié)點(diǎn)應(yīng)該有視覺(jué)分組比如“訂單服務(wù)”和“支付服務(wù)”都屬于業(yè)務(wù)服務(wù)應(yīng)該用同一個(gè)背景框起來(lái)。diagram-design 用“容器節(jié)點(diǎn)”來(lái)實(shí)現(xiàn)分組。containers: - id: businessServices label: 業(yè)務(wù)服務(wù) layer: service members: [order, payment, inventory]渲染時(shí)容器先畫(huà)背景再畫(huà)成員節(jié)點(diǎn)。容器背景用surface色邊框用虛線標(biāo)簽放在左上角。這樣讀者一眼就能看出哪些服務(wù)屬于同一個(gè)業(yè)務(wù)域。注意容器不要嵌套太深。超過(guò)兩層的嵌套會(huì)讓圖變得難以閱讀。如果確實(shí)需要多層分組考慮拆成多張圖而不是在一張圖里塞下所有細(xì)節(jié)。4.4 第四步導(dǎo)出與嵌入生成的 SVG 可以直接嵌入文檔也可以導(dǎo)出 PNG 用于演示。我通常同時(shí)輸出兩種格式diagram-design render architecture.diagram.yaml \ --theme light \ --output dist/architecture-light.svg diagram-design render architecture.diagram.yaml \ --theme dark \ --output dist/architecture-dark.svg \ --format png \ --scale 2--scale 2用于生成高清位圖投屏?xí)r不會(huì)模糊。SVG 用于網(wǎng)頁(yè)嵌入可以無(wú)限縮放。嵌入文檔時(shí)我會(huì)在 SVG 里保留title和desc標(biāo)簽方便屏幕閱讀器識(shí)別。這是很多人忽略的無(wú)障礙細(xì)節(jié)但在團(tuán)隊(duì)協(xié)作中很重要。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 布局錯(cuò)亂節(jié)點(diǎn)重疊、連線交叉這是最常見(jiàn)的問(wèn)題。原因通常有三個(gè)節(jié)點(diǎn)尺寸估算不準(zhǔn)、層級(jí)順序不合理、連線太多導(dǎo)致算法無(wú)法優(yōu)化。排查步驟檢查estimateWidth是否返回了合理值。如果標(biāo)簽很長(zhǎng)但寬度估算太小節(jié)點(diǎn)會(huì)重疊。檢查rankdir是否適合當(dāng)前圖。從上到下適合層級(jí)圖從左到右適合流程圖。檢查是否有環(huán)形依賴。dagre 對(duì)環(huán)形依賴處理不好需要手動(dòng)打斷。我的處理方式是先看日志里有沒(méi)有“cycle detected”如果有就在數(shù)據(jù)里把某條邊標(biāo)記為constraint: false讓布局算法忽略它。edges: - from: serviceA to: serviceB type: sync constraint: falseconstraint: false表示這條邊不參與層級(jí)計(jì)算只負(fù)責(zé)渲染。這樣可以打破環(huán)同時(shí)保留視覺(jué)上的連線。5.2 文字溢出標(biāo)簽太長(zhǎng)被截?cái)喙?jié)點(diǎn)寬度是估算的但文字實(shí)際渲染寬度受字體影響。如果用了非等寬字體估算值和實(shí)際值可能差很多。解決方案有兩個(gè)一是用等寬字體做估算渲染時(shí)也用等寬字體二是給節(jié)點(diǎn)設(shè)置最大寬度超出部分自動(dòng)換行。function wrapLabel(label, maxWidth, fontSize) { const charsPerLine Math.floor(maxWidth / (fontSize * 0.6)); const words label.split(/\s/); const lines []; let current ; words.forEach(word { if ((current word).length charsPerLine) { lines.push(current.trim()); current word; } else { current word; } }); if (current) lines.push(current.trim()); return lines.join(\n); }0.6是經(jīng)驗(yàn)系數(shù)不同字體略有差異。我實(shí)測(cè)下來(lái)Inter 字體用 0.58系統(tǒng)默認(rèn)無(wú)襯線字體用 0.62。5.3 主題切換后顏色對(duì)比度不足深色模式下如果主色沒(méi)有調(diào)整文字可能看不清。比如淺色模式用#2B6CB0配白字沒(méi)問(wèn)題深色模式還用這個(gè)色配深色背景對(duì)比度就不夠了。解決方案是給每個(gè)主題單獨(dú)定義語(yǔ)義色而不是簡(jiǎn)單反轉(zhuǎn)。深色模式的主色應(yīng)該更亮const themes { light: { primary: #2B6CB0, onPrimary: #FFFFFF }, dark: { primary: #63B3ED, onPrimary: #1A202C } };onPrimary表示“在 primary 背景上的文字顏色”。這樣切換主題時(shí)文字和背景的對(duì)比度始終有保障。5.4 渲染速度慢大圖卡頓節(jié)點(diǎn)超過(guò) 200 個(gè)時(shí)dagre 布局會(huì)明顯變慢。我的優(yōu)化經(jīng)驗(yàn)是關(guān)閉不必要的動(dòng)畫(huà)和過(guò)渡緩存布局結(jié)果相同數(shù)據(jù)不重復(fù)計(jì)算分片渲染先渲染可見(jiàn)區(qū)域const layoutCache new Map(); function computeLayoutCached(graph, tokens) { const key JSON.stringify({ graph, tokens }); if (layoutCache.has(key)) { return layoutCache.get(key); } const result computeLayout(graph, tokens); layoutCache.set(key, result); return result; }緩存 key 用完整數(shù)據(jù)序列化確保數(shù)據(jù)變了緩存失效。這個(gè)優(yōu)化在交互式編輯場(chǎng)景下效果很明顯拖動(dòng)節(jié)點(diǎn)時(shí)不需要重新計(jì)算全局布局。5.5 常見(jiàn)問(wèn)題速查表問(wèn)題現(xiàn)象可能原因排查方法解決方案節(jié)點(diǎn)重疊寬度估算不準(zhǔn)打印節(jié)點(diǎn)實(shí)際寬度調(diào)整估算系數(shù)或換等寬字體連線交叉嚴(yán)重層級(jí)順序不合理查看 rank 分配調(diào)整節(jié)點(diǎn)順序或關(guān)閉部分約束文字被截?cái)鄻?biāo)簽過(guò)長(zhǎng)檢查 wrap 邏輯增加最大寬度或縮小字號(hào)深色模式看不清對(duì)比度不足用對(duì)比度檢查工具為深色主題單獨(dú)定義語(yǔ)義色渲染卡頓節(jié)點(diǎn)過(guò)多統(tǒng)計(jì)節(jié)點(diǎn)數(shù)量啟用緩存或分片渲染主題切換失效硬編碼顏色搜索十六進(jìn)制值全部改為 token 引用導(dǎo)出模糊分辨率不足檢查導(dǎo)出參數(shù)增加 scale 或改用 SVG實(shí)操心得遇到布局問(wèn)題時(shí)先把圖簡(jiǎn)化到最小可復(fù)現(xiàn)案例。刪掉一半節(jié)點(diǎn)看問(wèn)題是否還在。大部分布局問(wèn)題在節(jié)點(diǎn)少于 20 個(gè)時(shí)都能定位到具體原因。6. 工具選型與生態(tài)搭配不重復(fù)造輪子6.1 渲染引擎dagre 還是 elkdagre 是最成熟的 JavaScript 布局庫(kù)適合大多數(shù)層級(jí)圖。elk 的布局質(zhì)量更高但配置復(fù)雜體積也大。我的選擇是日常用 dagre遇到復(fù)雜圖再上 elk。對(duì)比項(xiàng)dagreelk體積小大配置復(fù)雜度低高布局質(zhì)量良好優(yōu)秀環(huán)形依賴處理一般好適用場(chǎng)景常規(guī)架構(gòu)圖復(fù)雜網(wǎng)絡(luò)圖如果團(tuán)隊(duì)里沒(méi)有人專門維護(hù)圖表系統(tǒng)dagre 是更穩(wěn)妥的選擇。elk 的學(xué)習(xí)曲線比較陡配置項(xiàng)太多容易調(diào)出奇怪的結(jié)果。6.2 輸出格式SVG 優(yōu)先PNG 補(bǔ)充SVG 是矢量格式無(wú)限縮放適合網(wǎng)頁(yè)和文檔。PNG 適合演示和聊天工具分享。我的做法是默認(rèn)輸出 SVG需要時(shí)再轉(zhuǎn) PNG。轉(zhuǎn)換用 sharp 或 resvg兩者都很穩(wěn)定。sharp 速度快resvg 對(duì) SVG 特性支持更完整。如果圖里用了濾鏡或漸變建議用 resvg。const sharp require(sharp); async function svgToPng(svgBuffer, scale 2) { return sharp(svgBuffer) .resize({ width: undefined, height: undefined, kernel: lanczos3 }) .png({ quality: 100 }) .toBuffer(); }scale參數(shù)控制輸出分辨率。投屏用 2 倍打印用 3 倍網(wǎng)頁(yè)用 1 倍。6.3 編輯器集成VS Code 預(yù)覽我習(xí)慣在 VS Code 里直接預(yù)覽圖表。裝一個(gè) SVG 預(yù)覽插件保存 YAML 后自動(dòng)刷新。這樣改一行數(shù)據(jù)就能看到效果反饋循環(huán)很短。配置方式是在項(xiàng)目里加一個(gè).vscode/settings.json{ svg.preview.background: transparent, files.associations: { *.diagram.yaml: yaml } }svg.preview.background設(shè)為透明方便看深色和淺色兩種主題的效果。注意預(yù)覽插件只負(fù)責(zé)顯示不負(fù)責(zé)渲染。YAML 到 SVG 的轉(zhuǎn)換還是靠自己的渲染管線。不要指望插件能理解你的圖表語(yǔ)義。7. 從個(gè)人項(xiàng)目到團(tuán)隊(duì)規(guī)范diagram-design 的落地經(jīng)驗(yàn)7.1 先統(tǒng)一 token再統(tǒng)一圖表團(tuán)隊(duì)落地最大的障礙不是技術(shù)而是習(xí)慣。每個(gè)人都有自己的配色偏好和畫(huà)圖方式。如果一上來(lái)就要求所有人用同一套系統(tǒng)阻力會(huì)很大。我的做法是分兩步第一步先統(tǒng)一 token。把顏色、字號(hào)、間距定下來(lái)但不強(qiáng)制大家用。第二步等大家發(fā)現(xiàn)統(tǒng)一 token 確實(shí)省事之后再推廣圖表系統(tǒng)。token 的制定要讓大家參與。我會(huì)拉一個(gè)共享文檔讓每個(gè)人提名自己常用的顏色和字號(hào)然后投票選出最終方案。參與感越強(qiáng)執(zhí)行阻力越小。7.2 圖表即文檔和代碼一起維護(hù)圖表文件放在代碼倉(cāng)庫(kù)里和代碼一起 review。每次架構(gòu)變更必須同時(shí)更新圖表。這條規(guī)則聽(tīng)起來(lái)簡(jiǎn)單執(zhí)行起來(lái)需要紀(jì)律。我的經(jīng)驗(yàn)是把圖表更新寫(xiě)進(jìn) Definition of Done。沒(méi)有更新圖表的 PR 不允許合并。一開(kāi)始大家會(huì)抱怨但堅(jiān)持兩個(gè)月后圖表和代碼的同步率會(huì)明顯提升。7.3 定期重構(gòu)圖表刪掉不再使用的節(jié)點(diǎn)圖表和代碼一樣會(huì)積累技術(shù)債。不再使用的服務(wù)、已經(jīng)下線的依賴、過(guò)時(shí)的流程都應(yīng)該從圖里刪掉。我每個(gè)季度會(huì)做一次圖表清理把半年內(nèi)沒(méi)有引用的節(jié)點(diǎn)和連線刪掉。清理時(shí)要注意先確認(rèn)沒(méi)有文檔引用這張圖再刪除。有些老文檔可能還在用舊圖刪之前要通知相關(guān)同事。7.4 培訓(xùn)與分享讓新人快速上手新人入職時(shí)我會(huì)花半小時(shí)講 diagram-design 的基本用法怎么定義節(jié)點(diǎn)、怎么引用 token、怎么渲染。然后讓他們畫(huà)一張自己負(fù)責(zé)模塊的架構(gòu)圖。畫(huà)完 review 一次基本就掌握了。培訓(xùn)材料不需要很復(fù)雜一個(gè) YAML 示例加一個(gè)渲染命令就夠了。關(guān)鍵是讓新人感受到畫(huà)圖不是負(fù)擔(dān)而是幫助自己理解系統(tǒng)的方式。8. 擴(kuò)展方向diagram-design 還能怎么用8.1 自動(dòng)生成從代碼注釋提取圖表如果代碼里已經(jīng)有結(jié)構(gòu)化的注釋可以寫(xiě)一個(gè)腳本自動(dòng)提取節(jié)點(diǎn)和連線生成圖表數(shù)據(jù)。這樣架構(gòu)圖永遠(yuǎn)和代碼同步不需要手動(dòng)維護(hù)。function extractDiagramFromCode(sourceFiles) { const nodes []; const edges []; sourceFiles.forEach(file { const annotations parseAnnotations(file); annotations.forEach(ann { if (ann.type service) { nodes.push({ id: ann.name, type: service, label: ann.label }); } if (ann.type depends) { edges.push({ from: ann.from, to: ann.to, type: sync }); } }); }); return { nodes, edges }; }這個(gè)思路適合微服務(wù)架構(gòu)每個(gè)服務(wù)在自己的代碼里聲明依賴匯總后自動(dòng)生成全局圖。8.2 交互式圖表點(diǎn)擊節(jié)點(diǎn)查看詳情SVG 支持交互??梢栽诠?jié)點(diǎn)上綁定點(diǎn)擊事件彈出詳情面板顯示服務(wù)的負(fù)責(zé)人、SLA、監(jiān)控鏈接等信息。這樣圖表就不只是靜態(tài)圖片而是運(yùn)維入口。實(shí)現(xiàn)方式是在 SVG 里嵌入>svg.querySelectorAll([data-node-id]).forEach(node { node.addEventListener(click, () { const id node.getAttribute(data-node-id); showDetailPanel(id); }); });showDetailPanel可以從 API 拉取實(shí)時(shí)數(shù)據(jù)顯示服務(wù)健康狀態(tài)。8.3 多圖聯(lián)動(dòng)從架構(gòu)圖跳到時(shí)序圖同一份數(shù)據(jù)可以渲染成不同圖種。點(diǎn)擊架構(gòu)圖里的某個(gè)服務(wù)可以跳轉(zhuǎn)到對(duì)應(yīng)的時(shí)序圖展示該服務(wù)的調(diào)用鏈路。這種聯(lián)動(dòng)在排查問(wèn)題時(shí)特別有用。實(shí)現(xiàn)方式是給節(jié)點(diǎn)加link屬性指向另一張圖的 ID。渲染時(shí)生成超鏈接點(diǎn)擊后打開(kāi)新圖。nodes: - id: order type: service label: 訂單服務(wù) link: sequence-order.diagram.yaml這個(gè)功能不需要很復(fù)雜的實(shí)現(xiàn)但能顯著提升圖表的實(shí)用性。9. 我踩過(guò)的坑與最終建議第一個(gè)坑是過(guò)度設(shè)計(jì)。一開(kāi)始我想把所有東西都做成可配置的結(jié)果配置文件比圖還復(fù)雜。后來(lái)我給自己定了一條規(guī)則只有出現(xiàn)三次以上的重復(fù)才抽成配置。這條規(guī)則幫我省了很多時(shí)間。第二個(gè)坑是忽視字體。不同系統(tǒng)默認(rèn)字體不一樣導(dǎo)致同一份數(shù)據(jù)在不同電腦上渲染結(jié)果不同。后來(lái)我強(qiáng)制使用 Web Font并在渲染前等待字體加載完成。這個(gè)細(xì)節(jié)很不起眼但直接影響圖表的可復(fù)現(xiàn)性。第三個(gè)坑是不做版本管理。早期圖表文件沒(méi)有進(jìn)倉(cāng)庫(kù)改亂了只能重畫(huà)。現(xiàn)在所有圖表都在 git 里每次修改都有記錄回滾只需要一條命令。如果你準(zhǔn)備開(kāi)始用 diagram-design 的思路管理圖表我的建議是先從一張圖開(kāi)始定義好 token 和節(jié)點(diǎn)類型跑通渲染管線。不要一上來(lái)就搞大而全的系統(tǒng)。等第一張圖穩(wěn)定運(yùn)行一個(gè)月再推廣到其他圖。圖表系統(tǒng)的價(jià)值在于長(zhǎng)期維護(hù)而不是一次性產(chǎn)出。最后分享一個(gè)實(shí)用技巧給圖表文件加一個(gè)lastUpdated字段每次渲染時(shí)自動(dòng)更新。這樣一眼就能看出哪張圖很久沒(méi)維護(hù)了提醒自己及時(shí)更新。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香激情综合| 精人妻无码一区二区三区伊人直播 | 青青草成人视频在线观看二区| 高清无码国产亚洲| JIZZJIZZ国产精品喷水| 久久草草亚洲蜜桃臀| 欧美,亚洲,日韩,v,天堂,手机在线观看| 久久婷婷亚洲| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲情色 欧美| 亚洲区限制级| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 中文字幕二区日韩天堂| 欧美日综合| 日韩精品人妻一| 亚洲人妻在线精品| 天天干18禁| 麻豆a'v电影| 欧洲精品人妻| 青青草视频在线观看一区二区| 日韩一级片在线看| 色婷婷综合视频| 午夜无码精品免费看性色| 测评在线观看AV| 超碰久超碰久| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 亚洲精品国语在线播放| 久久久精品网站| 大色网久久| 偷拍亚洲情色| 日本男人天堂| 毛片久久| 国产一在线观看| 麻豆视频国产一区二区| 两女互慰AV高潮喷水在线观看| 啊啊啊操死我| 日本精品高清一二区一本到| 国产热RE99久久6国产精品首| 国产网红精品| 国产美女高潮叫床视频| 欧美亚洲日本激情在线| 亚洲色五月| 超碰精品在线| 亚州色交| 日韩钢筋无码高清啾啾啾| 超碰夫妻97| 日韩欧美偷拍美女视频| 夜夜嗨老熟女AV一区二区三区| av东京热男人的天堂| 亚洲综合性网址| 玖玖超碰熟| 欧美色图亚洲色,麻豆| 久久久久96| 欧美热图99| 欧美人体性爱互联网第一页婷婷日本| 亚洲色婷婷久久91| 曰韩精品视频一区二区| 在线国产一区二区av| 丁香五月天堂网| 国产不卡片| 中文字幕久久精视频久久大全| 精品九九九九九九九九九| 一区二区三区成人| 91中出视频| 91东北熟女| 伊人久久综合影院| 男人天堂婷婷五月天校园春色| 吉川爱美98堂在线| 亚洲图片欧美另类综合免费视频大大香| 久久久久久十| 国产高清无码一区三区二区| 欧美激情欧美精品| 日韩小电影| 蜜乳成人AV| 午夜精品五区| 97天天操天天干| 欧美精品欧美精品系列| A 天堂| 97摸视频| 亚洲色图欧美色图制服丝袜| 在线播放中文字幕| 日韩激情无码影院| 99久久婷婷国产综合精品草原| 伊人丝袜美腿高跟在线观看高清| 欧美人妻制服| 操逼操逼逼操操逼91| 亚洲色色色| 99啪啪| 超碰97综合在线| 中国一级操逼视频| 欧美综合色站| 国产91 丝袜在线播放00-百度| 国产成人无码a| 最新国产精品久久精品| 久久久久久久国产| 亚洲精品尤物yw在线影院| 婷婷精品| 九九九九九九九九九九九蜜桃| 久久久久久9| 18禁美女裸体无遮挡啪啪| 午夜免费视频1000| 日日爽熟女| 国产精品自在线发布| 麻豆 欧美 日韩| 久久97视频| 艹少妇网站| 亚洲色图欧美另类在线| 日韩精品在线观看观看| 欧美se综合| 国产亚洲精品A在线观看下载| 亚洲第一综合| 亚洲熟女av中文字幕| 蜜乳AV.COM| 夜夜爽妓女| 午夜传煤十二区精品| 人人干人人操人人..com| 美腿丝袜高跟网免费视频免费视频| 嗯嗯啊啊啊好爽| 十八禁视频网站| 蜜桃臀一区二区aV| 婷婷丁香五月天综合东京热| 超碰 欧美| 国产亚洲色婷婷久久99精品91葵花宝典| 亚洲 se图 欧美电影| 夜夜躁狠狠躁日日躁av| 麻豆精品久久久久久久| www.亚洲黄色| 欧美猛交黑寡妇中文字幕| 起碰97| 青青草自拍视频在线播放| 人妻91少妇| 天天综合网站| 富女玩鸭子一级毛片| 精品丰满人妻一区二区三区免费观| 后入合集| 日韩啪啪啪视频| 淫荡少妇免费| 国产9熟妇视频网站| 免费在线观看国内色片网站网址| 九九九九免费视频| a在线观看| 水滴偷拍| 嗯……啊…嗯嗯…啊…好舒服| 青青草好吊色| wwe 天天干.com| 你懂的在线观看区国产| 超碰在线第一页| 大香网站| 福利视频网站| 91欧美另类| 激情久久久| 十八禁黄色| 久久熟女人| 精品人妻免费观看| 嫩草 我啊~嗯~在线| 婷婷五月天色| 精品国产一区二区三区香蕉欧美| 疯操AV| 蜜伊人色综合97| 99热在线不卡| 国模精品娜娜一二三区| 日韩欧美操逼xxx| 欧美第五页| 日本免费不卡二区| 秋霞曰韩R级| 久久夜夜| 18禁久久| 欧美91精彩| 大香蕉伊人久久| 在线综合 亚洲 欧美中文字幕| 嗯嗯啊啊好大好爽| 九九夜精品九九在线| 色色婷婷五月天| 国产精品视频91久久| 亚洲色棕合| 2019AV天堂| 午夜一区| 国产农村妇女一区二区| 色五月综合| 影音先锋视频在线| 日本操大逼| 天天综合网合集91| 我要看免费韩日黄片| 午夜天堂网| 六月婷婷综合| 久操网视频| 亚洲加勒比久久日本道| 成人日本片久久久蜜桃| 午夜精品久久久久久久| 久久亚洲不卡一区二区三区 | 亚洲有码 视频一区| 亚洲少妇综合在线播放| 性爱视频免费网址| 国产福利精品98视频| 久9综合在线| 操老熟女AV| 在线亚洲精品久久久| 黄色大片一区二区密桃丝袜| 欧美日韩99精品麻豆传媒| 色色五月丁香| 日韩有码一区三区| 久久98| 日韩AV无码中文一区二区| 久草精品国产99| 97爱亚洲| 隔壁邻居波多野结衣中文字幕 | 久久的网站啊啊啊啊啊| 夜夜操av亚洲一区二区| 97亚洲欧美日韩| 人妻精品4K4K4K4K4| 国产精品九9| 桃色六月天| 国产大片精久久久久久| 91撸色网 玖玖网 欧美| 艳尻美人妻| 殴洲老熟女| 日本人妻天堂网站在线播放| 欧美色综合图片| 午夜精品久久久久| 中文字幕欧美日本乱码一线二线| 亚洲骚男同com| 五月天AV资源| 七月丁香婷婷| 一区二区三区高清天码| 一区二区三区激情在线观看| www.99视频| 亚洲视频二区 | 欧美天堂超碰97| 老司机午夜福利视频一区二区| 色九九九综合| 偷偷人人精品女女久久| 日韩成人私密一级精品av| 都市久久精品激情亚洲| 热九九精品| 青青草视频爽一爽| 97国产精选| 又大又大又大又粗爽高潮观看 | 欧美久久伊人| 欧美综合站| 亚洲视频,小说| 九热超碰| 久久精品熟女亚洲AV麻豆软件| 99e久久国产精品| 久久精品店| 亚欧精品久久久久久久久久久| 大香蕉十区| 懂色av中文字幕一区二区三区天美| 色香综合天天影视综合 | 青女偷拍网| 乱操乱伦AV| 激情综合网五月婷婷| 天天干天天日天天射黄色大片| 二三四区精品| 欧美一区二区三区不卡高清视频| 郑州宾馆老熟女露脸啪啪| 色5月婷婷| 亚洲第一页欧美| 91蜜桃传媒精品久久久一区二区| 人人人摸人人| 又黑又大又粗| 精品一级| 欧美性爱系列| 欧洲精品一区二区三区| 大香蕉99999| 91社区拍啪人妻| 日韩女优在线| 97在线看| 国产玖玖| 亚洲国产天堂| 曰韩av中文字幕专区| 97综合国产精品高潮久久| 98超碰欧美| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 26uuu久久| 久久这里只精品99re66图| 夜夜嗷嗷一区二区| AAAA欧美日韩| 亚洲男人的天堂V| 一本一道波多野毛片中文在线| 亚洲s在线观看| 亚洲人妻色图| 337p大胆噜噜噜噜噜91Av| 丝袜色综合| 欧美综合娱乐久久| 亚洲无限观看| 岛国在线一区二区三区| 亚洲欧洲无码97久久精品| 麻豆天美传媒毛片| 久jiu久神马影院| 久久久久久久久久久久97| 操逼操操操91| 精品无av| 五月婷婷综合在线| 大香蕉中文在线| 久/久精品99看9| 91N综合网| 91精品丝袜久久久久久| 国产精品自拍视频| 欧美中文字幕一区 | 成人日韩中文字幕| 亚洲色图尤物视频| 免看60秒涩涩视频| 亚洲制服欧美另类内射| 国产精品久久泡妞网站| 操狠狠| 亚洲av性爱电影| 内射中出日韩在线观看视频| 丁香五六月啪啪| 好看的久久不射无码影视影院| 成 人 A V免费视频在线观看| 日日日啊啊啊| 浪人综合网| 蜜臀久久99'精品久久久| 无码抄逼网| 久久激情四射婷婷丁香五月天| 久久久国产三级黄色片| 97超碰美女| 精品人妻二区三区| 成人亚欧免费视频| 久久久久久九九九| 国产高清不卡视频| 去干网最新版| 精品午夜福利导航| 欲女人妻性色av| 免费一级毛片在线视频观看| 日韩兔费看黄片| 激情综合av| 亚洲Av无码成人精品国产| 国产999精品久久久| 97资源超碰| 狠狠中文字幕| 伊人九九九| av情色影音| 色噜噜人妻丝袜a∨先锋影| 97在线观| 欧美一级专区免费大片| 99re9这里只有精品| 伊人激情五月天一区二区| 国产美女自拍视频| 吉川爱美亚洲二区在线 | 欧美日韩在线小说| 超碰精品人妻狠狠干| 日本有码久久| 国产日韩欧美三级片| 亚洲中字幕日本一区二区三区| 好爽免费视频,| 久久久久免费少妇| 看黄片视频免费| 女性91网站| 欧美在线色| 韩国久久97| 激情啪啪拍91| 999国产精品999| www.亚洲成人一区| 亚洲欧美日韩激情不卡| 色五月AV在线| 天天综合麻豆视频| 天天看人人操屄犊摸阴| 欧美黄色图片| 国产少妇与亚洲av| 日本一级一级一级一级| 久久久九九网站| 伦激情人妻另类人妻| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 男人天堂站| 日韩精品99999| a在线视频免费观看| 男人女人18禁片免费看网站| 日韩欧美日韩| 97精品免费视频网站| 中精品一区二区三区| 日本999精品视频| 91肏屄网| 国产亚卅97| 精品91摸| 欧洲中文字幕| 天天日天天射天天干| 丁香五月综合| 亚 欧 美 综合| 天天射影院| www.99在线| 国产精品免费视频不卡| 99操99| 色婷婷丁香五月| 97综合在线| 午夜免费福利视频一区| 色婷婷网| 91美女丝袜诱惑视频| 五月天综合网| 亚洲日本韩国极品一区二区| 欧美大香蕉在线观看| 国产成人资源| 亚洲色图欧美色图制服丝袜| 久久综合女优| 欧美成人国产精品| 欧美最婬乱婬爆婬牲视频| 熟女少妇一区二区三区| 国产精品不卡高清在线观看| 中日亚韩免费视频| 欧美性爱一级操| 亚洲人妻AV| 婷婷在线播放| 男人的天堂2018.| 日韩av色图综合| www.男人天堂| 日日骚一区二区三区| 亚洲学生妹高清av| 天天操天天干一区二区 | 爆操无码| 最新AVzaixian| 伊人久久久日韩一区| 欧美黑人日韩少妇色情| 色色九区| 人妻 丝袜美腿 中文字幕| 69精品久久久久中文字幕| 91/欧美| 亚洲自拍青操视频| 91处女在线观看| 95自拍视频在线观看| 99热只有这里有精品| 婷婷五月花| 91视频成人福利网站在线一区| 人妻少妇精品久久久| 色与欲影视天天看综合网| 欧美色图20p| 麻花豆传媒剧国产MV出差| 日本午夜久久电影| 99re69| JuliaAnnXXX888| AA级电影三区| 噜噜在线| 婷婷激情五月综合| 老熟女搡BBBB搡BBBB视频| 亚洲精品日韩国产欧美| 九九久久首页| 综合亚州欧美| 草草影院最新网址| 东北女人的毛片| 日本不卡一二区| 乱论91| 午夜福利久久久噜久噜久久综合 | 亚洲精品一区二区精品| 中文字幕一区 二区三四五 区日 日骚| 欧美猛交黑寡妇中文字幕| 躁躁躁日日躁2020| 免费久久精品麻豆一区二区av| 中文字幕版| 亚欧美色| 天天做天天爱天天爽| 男人的天堂2000| 加勒比伊人| 97人人干| 高清无码学生妹高潮| 欧美精品xxxwww| 国产超碰在线一区| 欧美成熟性爱精品| 天天摸天天插天天日| 欧美同性恋 的搜索结果 - 91n| 亚川综合视频| 欧美A√综合网 | www色色色com| 久久成人东京热人妻| h无码动漫在线观看| 国产白丝在线| 欧美性爱免费短视频| 日本伦理一区二区| 免费中文综合精品| 99re95| 少妇无码av专区线| 天天摸天天舔天天操| 欧美一区二区日韩三区| 午夜福利区| 成人性爱av| 丝袜av一区二区三区| 另类小说综合网| 国产不卡中文字幕免费avi| 日韩一区二区精彩视频| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久久色一区二区| 天天谢天天干| 热热色色综合| 亚洲成av人片色午夜乱码| 色香网| 久久久婷| 精品久久久久久无码| 久久久婷| 日本一区二区三区四区免费观看| 久久精品99久久久久久| 成人国产精品三级A片| 国内毛片四区| 男人天堂站| 国产精品点击进入在线影院| 人妻精品一区一区三区蜜桃91| 韩国一级做A片免费的| 成人三级片一区二区三区视频| 麻豆国产尤物AV| 久久亚洲中文字幕视频| 欧美日韩青操| 亚洲无码99| av激情亚洲五月天| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 岛国福利在线精品播放| 日本熟妇色熟妇在线视频播放| av天堂5| 蜜臀久久99精品久久久久久-DVD| 综精品久久久aaaa| 欧美性爱十八禁| 亚州欧美色图| 我中文字幕6区 | 福利视频香蕉免费一区二区在线| 欧洲亚洲天堂精品| 婷婷六月天| 久久免费99精品久久久久久| 久久久久久久久女黄| 精品国产乱码久久久久久久久1| 欧美一级美片在线观看免费| 亚洲区小说| 色呦呦、国产精品| 婷婷久久大香蕉| 九九视频黄色片| 在线洲亚线| 九九九九九九成人| 超碰超碰95| 午夜国产成人福利视频| 国产精品盗摄 偷窥盗摄| 蜜臀中文无码午夜| 欧美精品久久| 密臀在线免费观看| 久碰视频| 8050午夜少妇无码| 操逼片中文| 岛国1区2区3区在线观看| 精品少妇99| 亚洲s色图| 爱啪精品一区| 强上我不卡卡| 一本正道久久熟女| 人人澡人人澡人人| 日韩欧美偷拍美女视频| 久久曰曰| 97这里都是精品| 欧洲天天在线| 亚洲色图大香| 91大学精品激情戏| 九九亚洲视频| 色99视频| 99ri精品| 99re在线观看| 日本天天色| 91一起操| 五月天综合在线| 日本在线不卡一二区| 久久精品国产亚洲AV无码电影| 精品丝袜无码一区二区三APP| 日本不卡一区二区| 激情婷婷综合久久| 日韩熟女操逼| 亚洲国产91精品一区二区久久| 18禁看网站一区| 亚洲阿v天堂在线| 精品人妻一区二区三区日产乱码| 久久狠狠色噜噜狠狠狠狠97| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲影院365| 69XX一中文字幕人妻91| 99这里只有精品国产| 久久久精品电影| 26uuu性物| 国产精品一二三在线看| 熟女突然公开看18禁影片 | 欧美天堂亚洲电影院一区在线播放| 大香网伊人久久综合网eew| 欧美色图下一页| 超碰一区二区| 国产成人精品网站| 国产亚洲色停停久久99精品91| 色欲久久久久综合网| 久久久久免费看少妇A片特黄| 欧美自拍偷拍综合图片| 久草国产在线视频| 亚欧性爱在线无码| 艳美熟妇先锋一二三区| 蜜臀色乳| 91痴汉| 97操| 多乙久久久久久| 日韩三级一区 | 亚洲区 欧美区| 亚洲精品人体| 精品人妻一区二区视频| 一级性爱aaaa| 日韩pv中文| 亚洲 欧美 另类 日韩 人妻一区| 日本不卡免费二区| 日韩成人无码| 久久激情亚洲精品无码?V| 99操99| 强上我不卡卡| 亚洲第一男人天堂| 五月丁香六月综合缴清无码 | 另类一区| 亚洲综合性感在线| 正宗无毛一线天嫩逼| av三级电影在线播放| 国产成人亚洲精品无码古代早漏男 | 欧美天天拍| 小草av不卡亚洲二区| 欧美日韩中文字幕人妻| 天天干人人干天天日97| 久久久久精| 97综合久第一页| 国产一区二区三区高清视频| 国产AV超爽| 97自拍一区| 午夜在线播放| 亚洲免费人妻在| 男人天堂久久日韩| 啊啊嗯嗯好爽| 日本三级韩三级99久久| 日本中文字幕一区| 国产欧美日本亚洲精品| 骚逼高潮久久精品| 啊啊啊操死我了| 欧美日产国产在线成人第一区| 黄色AV影视| 久久风骚城市人| 一区二区影院| 亚洲激情色片| 思思热在线视频在线| 激情小说五月天| 清纯唯美综合亚洲| 日韩性爱再线视频| 大香蕉青青9| 久久性生大片免费观看性| 99激情视频| 神马久久久久久久久| 口爆吞精在线观看| 日韩精品人妻中文字有码在线 | 60秒免费小视频| 国产精品一二三区18| 麻豆精品久久久久久久| 无码人妻一区二区三区免费九色| 99热免费| 久草加勒比一区在线| 欧美精品四区| 久久精品| 色第一页| 不卡av在线中文字幕| 你草精品在线视频| 国产乱色国产精品免费视| 台湾肥佬网一区二区三区| 国产又黄又粗又猛大片| 天天综合香 ld视频| 被窝影院午夜看片无码| 欧美三级免费伊人| 亚洲激情综合另类男同| 久久日本熟女精品一区| 极品五月天噜噜| 好涩综合| 97视频在线免费看| J?P?NESEHD熟女熟妇伦| 神马久久久久久久久久| 国产宅男宅女在线观看| 伊人久久亚洲色欲综合网站 | 国产一级内射无挡观看| 91AV天美在线视频| 久久老子无码午夜伦不卡| 69久久| 韩国久久97| 男人午夜天堂| 欧亚日韩三区| 美女自卫慰黄网站免费| 亚洲图片欧美| 色色综合97| 亚洲成A∨人影院在线欢看| 视频在线97| 99国内精品| 人人玩人人添人人澡免费| 99精品久久久久久| 97精品综合久久| 97在线免费| 91 亚洲情侣偷拍 久久| 亚洲精品久久久久久久蜜桃臀| 亚洲成人ab| 亚洲情色图片区| 欧美亚洲中文字幕| 国产精品内射婷婷一级二| 亚洲drav色图| 国语人妻精彩刺激| 艹少妇网站| 午夜精品久久久| 东京热熟女亚洲视频网站| 色婷婷基地| 少妇无码av专区线| rion磁力链接| 国产第二页| 国产少妇与亚洲av| 日本性爱少妇| 免费久久一级毛片大黄| 狠久久| 欧美日韩亚洲五月天婷婷| 婷婷五月天丁香| 狠狠中文字幕| 亚洲色狠| a啊啊啊啊啊啊啊啊一区二区| 色眯眯射| 日韩无码嘿咻黑热久| 在线可观看的黄色网址| 香蕉国产精品麻豆亚洲欧美日韩| 中文字幕第二页| 秋霞一区二区三区四区五区六区七区| 欧日韩不卡视.频| 青娱乐久久艹| 亚洲国产av中文字幕久久| 91爱剪切久久| 久久久久久无码人妻中文字幕| 欧美少妇第一页| 日韩天美| 99精品网| 中文字幕 国产 精品| 精品国产人成在线| 人人干黄色| 日韩在线观看三级电影| 中国和日本人色哪个不下载能放| 亚洲色图综合网| 亚州久久9| 亚洲情色一区综合| 欧美日韩国产传媒在线精品| 六月婷婷综合| 动漫爆乳3D奶水一区在线观看| 思思热久久成人| 超碰国产精品无码| 波多野结衣AV无码一区| 麻豆国产精品午夜视频| 蜜臀久久99精品久久久电影| 偷拍盗拍亚洲色图图片 | 九月婷婷| 亚洲综合色网| 亚洲天堂,男人| 嗯嗯啊在线视频| 亚洲.欧美.丝袜.中文.综合| 能看的AV| 中文字幕在线播放2中文字幕在线观看2| 久久丁香五月婷婷| 久久人妻精品| 六六久久日韩不卡| 骚货| 青青草吊丝| 天天夜夜久久| 噜噜噜亚洲精品| 大香蕉日亚洲日本亚大 | 免费看黄片现成| 国产精品ⅴ无码大片在线看.| A一区片| 国产亚洲精品农村妇女| 日韩一区二区高清在线观看的| 天堂中文日本在线观看| 日韩人妻一区二区精品| 99re在线观看| 清纯唯美激情四射| 青女在线| 国产一区二区在线看| 国产精品久久久久久久久久久久久久| 天天综合欧美| 色婷婷六月丁香七月婷婷| 久久黄色视频一区二区三区| 97国产高清视频在线观看| 啊v视频在线观看| 97中文超碰| 天天天天天天天天综合| 人妻人久久精品中文字幕| 国产精品一区二区三| 内射夫妻三片| 在线啊v一区| 99热色这里只有精品| 97天天操天天干| www.久久超碰| 97无码视频在线播放| 操操逼操操逼操操逼逼| 色婷婷狠狠| 欧美日本天堂| 国产sv美女内射| 国产强奸乱伦xd| 亚洲操人| 天天看高清麻豆| 精品传媒在线一区| 久久久999日本大片| 国产超碰在线一区| 加勒比aⅴ| 岛国视频一二三区| 色性欧美| 激情久久日韩精品中文字幕麻豆| 欧美日韩在线小说 | 久久只有精品| 日本 欧美 国产一区| 91色图片| 国产精品久久久久久久久久久久久久吹 | 日韩色图 一区二区| 日韩一级二级三级免费看完整版| 秋霞免费AV| 日韩一级二级在线| sewuyueav| 一级特级aaaa毛片免费观看| 亚洲熟女国产综合另类| 欧美日韩亚洲少妇寂寞影院正在播放| 乱抡国产91| 人人人人人人少妇| 国产精品久久久午夜夜伦鲁鲁| 欧美A片中文字幕| 视频二区美腿丝袜制服人妻欧美| 学生妹天天看| 黄色av网站在线播放| 欧美九九爱| 91性网| 九九aV| 少妇蹲下买菜露大唇0| 欧美91视频| 国产综合久久久鬼色| 九九九色| 亚洲天堂另类美腿| 国产传媒日韩| 东京热亚洲一区二区| 在线观看啊啊啊啊啊| 亚洲欧美日韩精品久| 香蕉免费一区二区三区不读| a片偷拍视频| 一区,二区,三区网站| 久久久无码视频| 日韩有码免费视频| 久久系列| 色老汉玖玖爱| 久久午夜色播影院免费高清| 伊人五月天| 91观看 国产白丝| 久热伊人| 日韩有码专区| 极品丝袜无码| 另类图片欧美激情综合| 精品免费一区二区三区在线亚洲人成| 国产熟妇 码视频户外直播| 国产女人高潮视频| 人人搞人人插人人操| 伊人久久亚洲中文字幕| 欧美人与动性人交a| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 欧美黄片欧美黄片xxx| 九热超碰| 色吧综合网| 啊啊啊啊好爽好舒服一区二区易域| 色婷婷久久| 夜色综合| 天天综和| 超碰人妻天天干| 久久9999 | 久草在| 人人考人人摸人人干| 中文字幕一区二区三区人妻不卡| 亚州国产精品乱| 亚洲熟伦熟妇AV无码春色| 亚洲综合图色在线| 中国亚洲呦女专区| 91天美| 亚洲激情天堂网| 丰满的三级少妇欧美久久久| 亚洲天天更新| 国产五码丝袜屁眼| 亚洲国产成人高清在线| 午夜操一操| 久草男人天堂| 97人人干| 日韩无码操逼片| 久久久免费高清中文视频| 亚洲色图久久成人| 天天躁日日躁xxxxx| 啪啪啪男女亚洲中文字幕99| 四虎AV无码| 国产精品无码av在线| 97se亚洲综合自| 亚洲精品天天影视综合网 | 日本99一区二区| 综合色色婷婷| 天天视频网站黄| 99日视频在线免费| 亚洲网自拍| www.色婷婷色综合| 欧美成人A√在线一区二区| 91插B网站| 男人干美女| 日本色婷婷| 国产女人和拘做爰视频| 男人天堂2030| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | www.一本大99| 97人人超| 岛国大片在线观看网站入口| 91综合熟女| 色香综合天天影视综合 | 91综合熟女| 男人天堂网手机版婷婷| 香蕉一区二区三区在线视频| 亚洲精品成人激情在线| 一级毛片久久久久久久女人18| 日夜精品| 婷婷激情五月综合| 欧美猛交黑寡妇中文字幕| 男人天堂2012| 中文字幕黄色片| 激情干在线| 欧美日韩色综合网| 日本孕妇一区二区视频操逼免费看 | 欧美综合网在线| 东京热伊久| 97精品97久久| 成人天天看站长推荐| 美国美女AV在线| 欧美另类色图片| 91丨九色丨43老版熟女| 秋霞无码av鲁丝片一区| 青草草免费网站av| av毛片aaaaa免费看| 夜夜嗨视频| 高清视频一区| 男女啊啊啊| 99这里只有精品| 呻吟 欧美 日本 中出| 精品无码人妻一区二区免费蜜桃| 欧美香蕉视xxx| 高树玛利亚无码流出| 亚洲日本韩国极品一区二区| 天天干,天天日| 久久五月丁香| www.婷婷五月天| 婷婷色导航| 九九亚洲视频| 91黑丝露脚| 2020视频1区2区3区| 亚州伊人色综台| 精品超碰中文在线| 男人亚洲91首页在线| 久久麻豆一区二区| 超碰97精品在线| 亚洲天堂综合AV| 91亚·色| 亚洲av总站| 97精品视频免费| 蜜桃色院一区久久 | 欧美色就是色| 国产一区二区三区高清视频| 1000部熟女视频在线观看| 蜜乳AV免费观看| 天天干天天燥| AV污污污污| 国产亚洲综合欧美一区| 五月婷婷六月激情| 蜜桃久久久久久久| 一级黄碟在线看| 天美传媒精品一区二区三区| JuliaAnnXXX888| 91亚洲色图| 亚洲天天做日日做天天谢日日| 亚洲天堂AV在线播放| 色欲日韩欧美在线一区| 黑丝少妇在线观看| 中文乱码99| 狠狠爱夜夜干| 青娱乐啪啪视频| 欧美中文字幕日韩在线| 十八禁成人网站在线观看| 激情五月丁香五月| 色鬼在线综合| 国产AV人人夜夜澡人人爽麻豆| 97在线公开视频| 网站A V在线| 国产小视频91| 亚洲最大黄网| 夜夜爽夜夜摸夜夜操免费视频| 国产馆| 日韩精品色呦呦| 99久久综合网| 国产福利夜| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 日本一级婬片试看三分钟| 蜜乳av首页| 欧美无圣光在线| 91痴汉| 日韩欧美午夜一区二区| 天天插天天操| 97久久精品国产| 超碰久超碰久| 久久黄色性爱视频| 97精品国产97久久久| 亚洲啪啪啪啪视香蕉| 欧美91精品国产自产| 日韩,欧美,中文在线| 淫色网综合| 日日干日日摸| 夜夜天天噜狠狠爱2021| 97天天爽| 国产一区二区在线看| 少妇高潮流水av免费| 无码99| 欧美精品,四区。五区| 欧美精品二区视频在线| 中国亚洲呦女专区| 少妇内射www在线观看视频 | 炮色五月| 操一对老熟妇爽上天视频| 最新国内自拍av免费| 天天综合91在线| 九草九九九| 午夜无遮挡男女啪啪视频| 美国美女AV在线| 97这里有精品| 日韩黄色成人性爱| 美女91色黄18| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 亚洲综合影片| 乱伦强奸区日韩| 99热精品在线| 亚州黄站| 日本日皮视频逼| 嗯嗯啊啊的视频| 日韩av不卡在线看| 五十路熟女工口 | 黄色激情电影在线观看| 色鬼在线综合| 亚洲麻豆av一区二区| 插入综合网| 中文字幕在线免费观看| a网站免费观看| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 日本黄 R色 成 人网站| 91精品少妇搡搡搡| 熟女人妇一区二区三区| 亚洲宗合网| 国产日韩欧美亚洲精品95 | 成人精品在线免费视频| 人妻碰碰碰碰碰碰| 99久久久无码国产精品性啊聊| 久久人妻办公室视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚洲情色综合网| 成人免费福利在线观看| 操少妞在线视频| 日韩亚洲Av人人夜夜澡人人爽| 在线五区| 中文字幕在线高清男人的天堂| 又黄又硬又粗又长国产视频| 色丁香久久| 久久久四区| 日本天堂网| 日韩免费高清大片在线| 欧美 亚洲 另类 综合| 国产av又色又爽又黄| 丝袜狠狠草尤物 91| 8050午夜少妇无码| 一区二区视频在看| 日本人妻一区二区| 亚洲密乳AV| 午夜精品久久久久久久| www久| 97精品视频| 91中文精品日韩欧美在线| 成人亚欧免费视频| 欧美综合综合| 97人妻色| 狼狼色丁香久久婷婷综合五月| 日本性一区| 婷婷久久五月天| 超碰97人妻免费在线| 欧美综合网1| 日本狠狠干| 国产丝袜美女在线一区| 国产人人干| 日本三级久| 乱伦a片视频| 高清无码学生妹高潮| 江都AV在线| 人人操人人操草草| 欧亚日韩中文在线| 伊人玖玖网| 开心五月婷婷激情| 摸奶性爱视频网站在线免费播放| 2019午夜福利视频| 男人的天堂网免费| 最新岛国大片| 亚洲成人ab| 影音先锋一区二区在线资源| 国产97色在线| 乱伦一二三区| 有码专区最新中文字幕有码| 中文字幕在线观看网页| 免费看久久久性性| 天天干天天舔| 成人AV在线网站| 青青操在线亚洲视频观看欧美在线 | 欧苏综合色综合| 午夜福利精品| 亚洲中字幕日本一区二区三区| 骚货 中文字幕 av| 成人日韩中文字幕| 天天综合精品| 日韩国产在线观看av| 国产一国产一级毛片古装| 色99视频| 91蜜臀在线久久久久| 最新三级网址| 大香蕉78| 色一区二区三区综合| 久久久久久久久九九久孕交| 日本人妻A片成人免费看片| 97在线精品观看视频| 九九九免费视频| 淫纸中9区| 天美传媒av在线| 欧美激情片一区二区| 骚逼高潮久久精品| 国内自拍 日韩激情 99| 久久黄色视频一区二区三区| 2019天天干| 欧美激情内射| 99热线麻豆 | 欧美色老汉| 少妇色综合| 亚州色图欧美| 成人日韩中文字幕| 日韩美女久久一区二区三区| 五月天色色色| 人妻熟女av国产网站| 中文字幕一区二区韩| 亚洲好看强奸乱伦| 国产一区二区免费福利片| 综合另类| 91色拍| 超碰色97| 91欧美经典| 亚洲图片欧美偷拍| 亚洲成人在线乱码色午夜| 97欧美色| 亚欧美无遮挡| 超碰天天去日穴| 欧美性第1页| 亚州欧美在线| 国产精品久久久久久久久久久久久久| 成人区人妻精品一| 97视频一区| 熟女熟妇一区二区三四区| 97综合激情| 色五月AV| 国产乱伦视频污| 人人看黄色视频| 亚洲色图尤物视频| 免费公开人人操| 欧美人妻一区| 麻豆这里只有精品| 婷婷五月天av| 日本天天吊| 欧美精品 - 91爱爱| 青青草字幕AV| 99最新日韩偷拍视频|