[{"data":1,"prerenderedAt":3191},["ShallowReactive",2],{"content-/ai/quality-assurance":3,"related-ai":3161},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"keywords":10,"author":11,"date":12,"category":13,"image":14,"body":15,"_type":3155,"_id":3156,"_source":3157,"_file":3158,"_stem":3159,"_extension":3160},"/ai/quality-assurance","ai",false,"","智能质量保证体系","构建全方位的 AI 页面生成质量控制与自动化测试框架","质量保证, 自动化测试, 视觉回归, 性能监控, HTMLPAGE","HTMLPAGE","2025-11-27","AI 技术","/content-images/ai/ai.jpg",{"type":16,"children":17,"toc":3128},"root",[18,26,33,39,44,157,162,171,1011,1017,1022,1027,1035,1514,1519,1524,1583,1589,1594,1599,2046,2051,2056,2089,2095,2101,2106,2114,2668,2674,2680,2685,2787,2792,2797,2845,2851,2856,2864,2955,2961,2966,2971,3004,3009,3014,3063,3069,3109,3113,3122],{"type":19,"tag":20,"props":21,"children":22},"element","p",{},[23],{"type":24,"value":25},"text","HTMLPAGE 的智能质量保证体系（Intelligent QA System）不仅仅是一个简单的检查清单，而是一个深度集成在生成链路中的自动化闭环系统。它结合了静态代码分析、动态运行时检测、视觉回归测试和 AI 辅助审查，确保生成的每一个页面都达到企业级交付标准。",{"type":19,"tag":27,"props":28,"children":30},"h2",{"id":29},"️-多层级质量防护架构",[31],{"type":24,"value":32},"🛡️ 多层级质量防护架构",{"type":19,"tag":34,"props":35,"children":37},"h3",{"id":36},"质量控制流水线",[38],{"type":24,"value":36},{"type":19,"tag":20,"props":40,"children":41},{},[42],{"type":24,"value":43},"我们的质量保证系统采用\"漏斗式\"防护策略，从代码生成的那一刻起就开始介入，层层过滤潜在问题。",{"type":19,"tag":45,"props":46,"children":50},"pre",{"className":47,"code":48,"language":49,"meta":7,"style":7},"language-mermaid shiki shiki-themes github-dark github-dark","graph TD\n    A[代码生成] --> B{静态分析层}\n    B -->|通过| C{结构验证层}\n    B -->|失败| A\n    C -->|通过| D{视觉渲染层}\n    C -->|失败| A\n    D -->|通过| E{交互测试层}\n    D -->|失败| A\n    E -->|通过| F{性能审计层}\n    E -->|失败| A\n    F -->|通过| G[最终交付]\n","mermaid",[51],{"type":19,"tag":52,"props":53,"children":54},"code",{"__ignoreMap":7},[55,67,76,85,94,103,112,121,130,139,148],{"type":19,"tag":56,"props":57,"children":60},"span",{"class":58,"line":59},"line",1,[61],{"type":19,"tag":56,"props":62,"children":64},{"style":63},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8",[65],{"type":24,"value":66},"graph TD\n",{"type":19,"tag":56,"props":68,"children":70},{"class":58,"line":69},2,[71],{"type":19,"tag":56,"props":72,"children":73},{"style":63},[74],{"type":24,"value":75},"    A[代码生成] --> B{静态分析层}\n",{"type":19,"tag":56,"props":77,"children":79},{"class":58,"line":78},3,[80],{"type":19,"tag":56,"props":81,"children":82},{"style":63},[83],{"type":24,"value":84},"    B -->|通过| C{结构验证层}\n",{"type":19,"tag":56,"props":86,"children":88},{"class":58,"line":87},4,[89],{"type":19,"tag":56,"props":90,"children":91},{"style":63},[92],{"type":24,"value":93},"    B -->|失败| A\n",{"type":19,"tag":56,"props":95,"children":97},{"class":58,"line":96},5,[98],{"type":19,"tag":56,"props":99,"children":100},{"style":63},[101],{"type":24,"value":102},"    C -->|通过| D{视觉渲染层}\n",{"type":19,"tag":56,"props":104,"children":106},{"class":58,"line":105},6,[107],{"type":19,"tag":56,"props":108,"children":109},{"style":63},[110],{"type":24,"value":111},"    C -->|失败| A\n",{"type":19,"tag":56,"props":113,"children":115},{"class":58,"line":114},7,[116],{"type":19,"tag":56,"props":117,"children":118},{"style":63},[119],{"type":24,"value":120},"    D -->|通过| E{交互测试层}\n",{"type":19,"tag":56,"props":122,"children":124},{"class":58,"line":123},8,[125],{"type":19,"tag":56,"props":126,"children":127},{"style":63},[128],{"type":24,"value":129},"    D -->|失败| A\n",{"type":19,"tag":56,"props":131,"children":133},{"class":58,"line":132},9,[134],{"type":19,"tag":56,"props":135,"children":136},{"style":63},[137],{"type":24,"value":138},"    E -->|通过| F{性能审计层}\n",{"type":19,"tag":56,"props":140,"children":142},{"class":58,"line":141},10,[143],{"type":19,"tag":56,"props":144,"children":145},{"style":63},[146],{"type":24,"value":147},"    E -->|失败| A\n",{"type":19,"tag":56,"props":149,"children":151},{"class":58,"line":150},11,[152],{"type":19,"tag":56,"props":153,"children":154},{"style":63},[155],{"type":24,"value":156},"    F -->|通过| G[最终交付]\n",{"type":19,"tag":34,"props":158,"children":160},{"id":159},"核心验证引擎",[161],{"type":24,"value":159},{"type":19,"tag":20,"props":163,"children":164},{},[165],{"type":19,"tag":166,"props":167,"children":168},"strong",{},[169],{"type":24,"value":170},"自动化验证控制器",{"type":19,"tag":45,"props":172,"children":176},{"className":173,"code":174,"language":175,"meta":7,"style":7},"language-typescript shiki shiki-themes github-dark github-dark","class QualityAssuranceController {\n  constructor() {\n    this.staticAnalyzer = new StaticCodeAnalyzer();\n    this.structureValidator = new DOMStructureValidator();\n    this.visualTester = new VisualRegressionTester();\n    this.accessibilityAuditor = new AccessibilityAuditor();\n    this.performanceProfiler = new PerformanceProfiler();\n  }\n\n  async validatePage(pageContext: PageContext): Promise\u003CValidationResult> {\n    const report = new ValidationReport();\n\n    // 1. 静态代码分析 (Linter & Type Check)\n    const codeIssues = await this.staticAnalyzer.scan(pageContext.code);\n    if (codeIssues.hasCriticalErrors()) {\n      return report.fail('Static Analysis Failed', codeIssues);\n    }\n\n    // 2. DOM 结构完整性验证\n    const structureValid = await this.structureValidator.validate(pageContext.dom);\n    if (!structureValid) {\n      return report.fail('Invalid DOM Structure');\n    }\n\n    // 3. 视觉一致性检查\n    const visualScore = await this.visualTester.compare(\n      pageContext.render(), \n      pageContext.designMockup\n    );\n    \n    // 4. 无障碍访问性审计 (WCAG 2.1)\n    const a11yScore = await this.accessibilityAuditor.audit(pageContext.url);\n    \n    // 5. 性能基准测试 (Lighthouse)\n    const perfMetrics = await this.performanceProfiler.measure(pageContext.url);\n\n    return report.finalize({\n      visualScore,\n      a11yScore,\n      perfMetrics\n    });\n  }\n}\n","typescript",[177],{"type":19,"tag":52,"props":178,"children":179},{"__ignoreMap":7},[180,200,213,247,276,305,334,363,371,380,443,474,482,492,534,558,592,601,609,618,658,681,711,719,727,736,776,795,804,813,822,831,871,879,888,927,935,958,967,976,985,994,1002],{"type":19,"tag":56,"props":181,"children":182},{"class":58,"line":59},[183,189,195],{"type":19,"tag":56,"props":184,"children":186},{"style":185},"--shiki-default:#F97583;--shiki-dark:#F97583",[187],{"type":24,"value":188},"class",{"type":19,"tag":56,"props":190,"children":192},{"style":191},"--shiki-default:#B392F0;--shiki-dark:#B392F0",[193],{"type":24,"value":194}," QualityAssuranceController",{"type":19,"tag":56,"props":196,"children":197},{"style":63},[198],{"type":24,"value":199}," {\n",{"type":19,"tag":56,"props":201,"children":202},{"class":58,"line":69},[203,208],{"type":19,"tag":56,"props":204,"children":205},{"style":185},[206],{"type":24,"value":207},"  constructor",{"type":19,"tag":56,"props":209,"children":210},{"style":63},[211],{"type":24,"value":212},"() {\n",{"type":19,"tag":56,"props":214,"children":215},{"class":58,"line":78},[216,222,227,232,237,242],{"type":19,"tag":56,"props":217,"children":219},{"style":218},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF",[220],{"type":24,"value":221},"    this",{"type":19,"tag":56,"props":223,"children":224},{"style":63},[225],{"type":24,"value":226},".staticAnalyzer ",{"type":19,"tag":56,"props":228,"children":229},{"style":185},[230],{"type":24,"value":231},"=",{"type":19,"tag":56,"props":233,"children":234},{"style":185},[235],{"type":24,"value":236}," new",{"type":19,"tag":56,"props":238,"children":239},{"style":191},[240],{"type":24,"value":241}," StaticCodeAnalyzer",{"type":19,"tag":56,"props":243,"children":244},{"style":63},[245],{"type":24,"value":246},"();\n",{"type":19,"tag":56,"props":248,"children":249},{"class":58,"line":87},[250,254,259,263,267,272],{"type":19,"tag":56,"props":251,"children":252},{"style":218},[253],{"type":24,"value":221},{"type":19,"tag":56,"props":255,"children":256},{"style":63},[257],{"type":24,"value":258},".structureValidator ",{"type":19,"tag":56,"props":260,"children":261},{"style":185},[262],{"type":24,"value":231},{"type":19,"tag":56,"props":264,"children":265},{"style":185},[266],{"type":24,"value":236},{"type":19,"tag":56,"props":268,"children":269},{"style":191},[270],{"type":24,"value":271}," DOMStructureValidator",{"type":19,"tag":56,"props":273,"children":274},{"style":63},[275],{"type":24,"value":246},{"type":19,"tag":56,"props":277,"children":278},{"class":58,"line":96},[279,283,288,292,296,301],{"type":19,"tag":56,"props":280,"children":281},{"style":218},[282],{"type":24,"value":221},{"type":19,"tag":56,"props":284,"children":285},{"style":63},[286],{"type":24,"value":287},".visualTester ",{"type":19,"tag":56,"props":289,"children":290},{"style":185},[291],{"type":24,"value":231},{"type":19,"tag":56,"props":293,"children":294},{"style":185},[295],{"type":24,"value":236},{"type":19,"tag":56,"props":297,"children":298},{"style":191},[299],{"type":24,"value":300}," VisualRegressionTester",{"type":19,"tag":56,"props":302,"children":303},{"style":63},[304],{"type":24,"value":246},{"type":19,"tag":56,"props":306,"children":307},{"class":58,"line":105},[308,312,317,321,325,330],{"type":19,"tag":56,"props":309,"children":310},{"style":218},[311],{"type":24,"value":221},{"type":19,"tag":56,"props":313,"children":314},{"style":63},[315],{"type":24,"value":316},".accessibilityAuditor ",{"type":19,"tag":56,"props":318,"children":319},{"style":185},[320],{"type":24,"value":231},{"type":19,"tag":56,"props":322,"children":323},{"style":185},[324],{"type":24,"value":236},{"type":19,"tag":56,"props":326,"children":327},{"style":191},[328],{"type":24,"value":329}," AccessibilityAuditor",{"type":19,"tag":56,"props":331,"children":332},{"style":63},[333],{"type":24,"value":246},{"type":19,"tag":56,"props":335,"children":336},{"class":58,"line":114},[337,341,346,350,354,359],{"type":19,"tag":56,"props":338,"children":339},{"style":218},[340],{"type":24,"value":221},{"type":19,"tag":56,"props":342,"children":343},{"style":63},[344],{"type":24,"value":345},".performanceProfiler ",{"type":19,"tag":56,"props":347,"children":348},{"style":185},[349],{"type":24,"value":231},{"type":19,"tag":56,"props":351,"children":352},{"style":185},[353],{"type":24,"value":236},{"type":19,"tag":56,"props":355,"children":356},{"style":191},[357],{"type":24,"value":358}," PerformanceProfiler",{"type":19,"tag":56,"props":360,"children":361},{"style":63},[362],{"type":24,"value":246},{"type":19,"tag":56,"props":364,"children":365},{"class":58,"line":123},[366],{"type":19,"tag":56,"props":367,"children":368},{"style":63},[369],{"type":24,"value":370},"  }\n",{"type":19,"tag":56,"props":372,"children":373},{"class":58,"line":132},[374],{"type":19,"tag":56,"props":375,"children":377},{"emptyLinePlaceholder":376},true,[378],{"type":24,"value":379},"\n",{"type":19,"tag":56,"props":381,"children":382},{"class":58,"line":141},[383,388,393,398,404,409,414,419,423,428,433,438],{"type":19,"tag":56,"props":384,"children":385},{"style":185},[386],{"type":24,"value":387},"  async",{"type":19,"tag":56,"props":389,"children":390},{"style":191},[391],{"type":24,"value":392}," validatePage",{"type":19,"tag":56,"props":394,"children":395},{"style":63},[396],{"type":24,"value":397},"(",{"type":19,"tag":56,"props":399,"children":401},{"style":400},"--shiki-default:#FFAB70;--shiki-dark:#FFAB70",[402],{"type":24,"value":403},"pageContext",{"type":19,"tag":56,"props":405,"children":406},{"style":185},[407],{"type":24,"value":408},":",{"type":19,"tag":56,"props":410,"children":411},{"style":191},[412],{"type":24,"value":413}," PageContext",{"type":19,"tag":56,"props":415,"children":416},{"style":63},[417],{"type":24,"value":418},")",{"type":19,"tag":56,"props":420,"children":421},{"style":185},[422],{"type":24,"value":408},{"type":19,"tag":56,"props":424,"children":425},{"style":191},[426],{"type":24,"value":427}," Promise",{"type":19,"tag":56,"props":429,"children":430},{"style":63},[431],{"type":24,"value":432},"\u003C",{"type":19,"tag":56,"props":434,"children":435},{"style":191},[436],{"type":24,"value":437},"ValidationResult",{"type":19,"tag":56,"props":439,"children":440},{"style":63},[441],{"type":24,"value":442},"> {\n",{"type":19,"tag":56,"props":444,"children":445},{"class":58,"line":150},[446,451,456,461,465,470],{"type":19,"tag":56,"props":447,"children":448},{"style":185},[449],{"type":24,"value":450},"    const",{"type":19,"tag":56,"props":452,"children":453},{"style":218},[454],{"type":24,"value":455}," report",{"type":19,"tag":56,"props":457,"children":458},{"style":185},[459],{"type":24,"value":460}," =",{"type":19,"tag":56,"props":462,"children":463},{"style":185},[464],{"type":24,"value":236},{"type":19,"tag":56,"props":466,"children":467},{"style":191},[468],{"type":24,"value":469}," ValidationReport",{"type":19,"tag":56,"props":471,"children":472},{"style":63},[473],{"type":24,"value":246},{"type":19,"tag":56,"props":475,"children":477},{"class":58,"line":476},12,[478],{"type":19,"tag":56,"props":479,"children":480},{"emptyLinePlaceholder":376},[481],{"type":24,"value":379},{"type":19,"tag":56,"props":483,"children":485},{"class":58,"line":484},13,[486],{"type":19,"tag":56,"props":487,"children":489},{"style":488},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[490],{"type":24,"value":491},"    // 1. 静态代码分析 (Linter & Type Check)\n",{"type":19,"tag":56,"props":493,"children":495},{"class":58,"line":494},14,[496,500,505,509,514,519,524,529],{"type":19,"tag":56,"props":497,"children":498},{"style":185},[499],{"type":24,"value":450},{"type":19,"tag":56,"props":501,"children":502},{"style":218},[503],{"type":24,"value":504}," codeIssues",{"type":19,"tag":56,"props":506,"children":507},{"style":185},[508],{"type":24,"value":460},{"type":19,"tag":56,"props":510,"children":511},{"style":185},[512],{"type":24,"value":513}," await",{"type":19,"tag":56,"props":515,"children":516},{"style":218},[517],{"type":24,"value":518}," this",{"type":19,"tag":56,"props":520,"children":521},{"style":63},[522],{"type":24,"value":523},".staticAnalyzer.",{"type":19,"tag":56,"props":525,"children":526},{"style":191},[527],{"type":24,"value":528},"scan",{"type":19,"tag":56,"props":530,"children":531},{"style":63},[532],{"type":24,"value":533},"(pageContext.code);\n",{"type":19,"tag":56,"props":535,"children":537},{"class":58,"line":536},15,[538,543,548,553],{"type":19,"tag":56,"props":539,"children":540},{"style":185},[541],{"type":24,"value":542},"    if",{"type":19,"tag":56,"props":544,"children":545},{"style":63},[546],{"type":24,"value":547}," (codeIssues.",{"type":19,"tag":56,"props":549,"children":550},{"style":191},[551],{"type":24,"value":552},"hasCriticalErrors",{"type":19,"tag":56,"props":554,"children":555},{"style":63},[556],{"type":24,"value":557},"()) {\n",{"type":19,"tag":56,"props":559,"children":561},{"class":58,"line":560},16,[562,567,572,577,581,587],{"type":19,"tag":56,"props":563,"children":564},{"style":185},[565],{"type":24,"value":566},"      return",{"type":19,"tag":56,"props":568,"children":569},{"style":63},[570],{"type":24,"value":571}," report.",{"type":19,"tag":56,"props":573,"children":574},{"style":191},[575],{"type":24,"value":576},"fail",{"type":19,"tag":56,"props":578,"children":579},{"style":63},[580],{"type":24,"value":397},{"type":19,"tag":56,"props":582,"children":584},{"style":583},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF",[585],{"type":24,"value":586},"'Static Analysis Failed'",{"type":19,"tag":56,"props":588,"children":589},{"style":63},[590],{"type":24,"value":591},", codeIssues);\n",{"type":19,"tag":56,"props":593,"children":595},{"class":58,"line":594},17,[596],{"type":19,"tag":56,"props":597,"children":598},{"style":63},[599],{"type":24,"value":600},"    }\n",{"type":19,"tag":56,"props":602,"children":604},{"class":58,"line":603},18,[605],{"type":19,"tag":56,"props":606,"children":607},{"emptyLinePlaceholder":376},[608],{"type":24,"value":379},{"type":19,"tag":56,"props":610,"children":612},{"class":58,"line":611},19,[613],{"type":19,"tag":56,"props":614,"children":615},{"style":488},[616],{"type":24,"value":617},"    // 2. DOM 结构完整性验证\n",{"type":19,"tag":56,"props":619,"children":621},{"class":58,"line":620},20,[622,626,631,635,639,643,648,653],{"type":19,"tag":56,"props":623,"children":624},{"style":185},[625],{"type":24,"value":450},{"type":19,"tag":56,"props":627,"children":628},{"style":218},[629],{"type":24,"value":630}," structureValid",{"type":19,"tag":56,"props":632,"children":633},{"style":185},[634],{"type":24,"value":460},{"type":19,"tag":56,"props":636,"children":637},{"style":185},[638],{"type":24,"value":513},{"type":19,"tag":56,"props":640,"children":641},{"style":218},[642],{"type":24,"value":518},{"type":19,"tag":56,"props":644,"children":645},{"style":63},[646],{"type":24,"value":647},".structureValidator.",{"type":19,"tag":56,"props":649,"children":650},{"style":191},[651],{"type":24,"value":652},"validate",{"type":19,"tag":56,"props":654,"children":655},{"style":63},[656],{"type":24,"value":657},"(pageContext.dom);\n",{"type":19,"tag":56,"props":659,"children":661},{"class":58,"line":660},21,[662,666,671,676],{"type":19,"tag":56,"props":663,"children":664},{"style":185},[665],{"type":24,"value":542},{"type":19,"tag":56,"props":667,"children":668},{"style":63},[669],{"type":24,"value":670}," (",{"type":19,"tag":56,"props":672,"children":673},{"style":185},[674],{"type":24,"value":675},"!",{"type":19,"tag":56,"props":677,"children":678},{"style":63},[679],{"type":24,"value":680},"structureValid) {\n",{"type":19,"tag":56,"props":682,"children":684},{"class":58,"line":683},22,[685,689,693,697,701,706],{"type":19,"tag":56,"props":686,"children":687},{"style":185},[688],{"type":24,"value":566},{"type":19,"tag":56,"props":690,"children":691},{"style":63},[692],{"type":24,"value":571},{"type":19,"tag":56,"props":694,"children":695},{"style":191},[696],{"type":24,"value":576},{"type":19,"tag":56,"props":698,"children":699},{"style":63},[700],{"type":24,"value":397},{"type":19,"tag":56,"props":702,"children":703},{"style":583},[704],{"type":24,"value":705},"'Invalid DOM Structure'",{"type":19,"tag":56,"props":707,"children":708},{"style":63},[709],{"type":24,"value":710},");\n",{"type":19,"tag":56,"props":712,"children":714},{"class":58,"line":713},23,[715],{"type":19,"tag":56,"props":716,"children":717},{"style":63},[718],{"type":24,"value":600},{"type":19,"tag":56,"props":720,"children":722},{"class":58,"line":721},24,[723],{"type":19,"tag":56,"props":724,"children":725},{"emptyLinePlaceholder":376},[726],{"type":24,"value":379},{"type":19,"tag":56,"props":728,"children":730},{"class":58,"line":729},25,[731],{"type":19,"tag":56,"props":732,"children":733},{"style":488},[734],{"type":24,"value":735},"    // 3. 视觉一致性检查\n",{"type":19,"tag":56,"props":737,"children":739},{"class":58,"line":738},26,[740,744,749,753,757,761,766,771],{"type":19,"tag":56,"props":741,"children":742},{"style":185},[743],{"type":24,"value":450},{"type":19,"tag":56,"props":745,"children":746},{"style":218},[747],{"type":24,"value":748}," visualScore",{"type":19,"tag":56,"props":750,"children":751},{"style":185},[752],{"type":24,"value":460},{"type":19,"tag":56,"props":754,"children":755},{"style":185},[756],{"type":24,"value":513},{"type":19,"tag":56,"props":758,"children":759},{"style":218},[760],{"type":24,"value":518},{"type":19,"tag":56,"props":762,"children":763},{"style":63},[764],{"type":24,"value":765},".visualTester.",{"type":19,"tag":56,"props":767,"children":768},{"style":191},[769],{"type":24,"value":770},"compare",{"type":19,"tag":56,"props":772,"children":773},{"style":63},[774],{"type":24,"value":775},"(\n",{"type":19,"tag":56,"props":777,"children":779},{"class":58,"line":778},27,[780,785,790],{"type":19,"tag":56,"props":781,"children":782},{"style":63},[783],{"type":24,"value":784},"      pageContext.",{"type":19,"tag":56,"props":786,"children":787},{"style":191},[788],{"type":24,"value":789},"render",{"type":19,"tag":56,"props":791,"children":792},{"style":63},[793],{"type":24,"value":794},"(), \n",{"type":19,"tag":56,"props":796,"children":798},{"class":58,"line":797},28,[799],{"type":19,"tag":56,"props":800,"children":801},{"style":63},[802],{"type":24,"value":803},"      pageContext.designMockup\n",{"type":19,"tag":56,"props":805,"children":807},{"class":58,"line":806},29,[808],{"type":19,"tag":56,"props":809,"children":810},{"style":63},[811],{"type":24,"value":812},"    );\n",{"type":19,"tag":56,"props":814,"children":816},{"class":58,"line":815},30,[817],{"type":19,"tag":56,"props":818,"children":819},{"style":63},[820],{"type":24,"value":821},"    \n",{"type":19,"tag":56,"props":823,"children":825},{"class":58,"line":824},31,[826],{"type":19,"tag":56,"props":827,"children":828},{"style":488},[829],{"type":24,"value":830},"    // 4. 无障碍访问性审计 (WCAG 2.1)\n",{"type":19,"tag":56,"props":832,"children":834},{"class":58,"line":833},32,[835,839,844,848,852,856,861,866],{"type":19,"tag":56,"props":836,"children":837},{"style":185},[838],{"type":24,"value":450},{"type":19,"tag":56,"props":840,"children":841},{"style":218},[842],{"type":24,"value":843}," a11yScore",{"type":19,"tag":56,"props":845,"children":846},{"style":185},[847],{"type":24,"value":460},{"type":19,"tag":56,"props":849,"children":850},{"style":185},[851],{"type":24,"value":513},{"type":19,"tag":56,"props":853,"children":854},{"style":218},[855],{"type":24,"value":518},{"type":19,"tag":56,"props":857,"children":858},{"style":63},[859],{"type":24,"value":860},".accessibilityAuditor.",{"type":19,"tag":56,"props":862,"children":863},{"style":191},[864],{"type":24,"value":865},"audit",{"type":19,"tag":56,"props":867,"children":868},{"style":63},[869],{"type":24,"value":870},"(pageContext.url);\n",{"type":19,"tag":56,"props":872,"children":874},{"class":58,"line":873},33,[875],{"type":19,"tag":56,"props":876,"children":877},{"style":63},[878],{"type":24,"value":821},{"type":19,"tag":56,"props":880,"children":882},{"class":58,"line":881},34,[883],{"type":19,"tag":56,"props":884,"children":885},{"style":488},[886],{"type":24,"value":887},"    // 5. 性能基准测试 (Lighthouse)\n",{"type":19,"tag":56,"props":889,"children":891},{"class":58,"line":890},35,[892,896,901,905,909,913,918,923],{"type":19,"tag":56,"props":893,"children":894},{"style":185},[895],{"type":24,"value":450},{"type":19,"tag":56,"props":897,"children":898},{"style":218},[899],{"type":24,"value":900}," perfMetrics",{"type":19,"tag":56,"props":902,"children":903},{"style":185},[904],{"type":24,"value":460},{"type":19,"tag":56,"props":906,"children":907},{"style":185},[908],{"type":24,"value":513},{"type":19,"tag":56,"props":910,"children":911},{"style":218},[912],{"type":24,"value":518},{"type":19,"tag":56,"props":914,"children":915},{"style":63},[916],{"type":24,"value":917},".performanceProfiler.",{"type":19,"tag":56,"props":919,"children":920},{"style":191},[921],{"type":24,"value":922},"measure",{"type":19,"tag":56,"props":924,"children":925},{"style":63},[926],{"type":24,"value":870},{"type":19,"tag":56,"props":928,"children":930},{"class":58,"line":929},36,[931],{"type":19,"tag":56,"props":932,"children":933},{"emptyLinePlaceholder":376},[934],{"type":24,"value":379},{"type":19,"tag":56,"props":936,"children":938},{"class":58,"line":937},37,[939,944,948,953],{"type":19,"tag":56,"props":940,"children":941},{"style":185},[942],{"type":24,"value":943},"    return",{"type":19,"tag":56,"props":945,"children":946},{"style":63},[947],{"type":24,"value":571},{"type":19,"tag":56,"props":949,"children":950},{"style":191},[951],{"type":24,"value":952},"finalize",{"type":19,"tag":56,"props":954,"children":955},{"style":63},[956],{"type":24,"value":957},"({\n",{"type":19,"tag":56,"props":959,"children":961},{"class":58,"line":960},38,[962],{"type":19,"tag":56,"props":963,"children":964},{"style":63},[965],{"type":24,"value":966},"      visualScore,\n",{"type":19,"tag":56,"props":968,"children":970},{"class":58,"line":969},39,[971],{"type":19,"tag":56,"props":972,"children":973},{"style":63},[974],{"type":24,"value":975},"      a11yScore,\n",{"type":19,"tag":56,"props":977,"children":979},{"class":58,"line":978},40,[980],{"type":19,"tag":56,"props":981,"children":982},{"style":63},[983],{"type":24,"value":984},"      perfMetrics\n",{"type":19,"tag":56,"props":986,"children":988},{"class":58,"line":987},41,[989],{"type":19,"tag":56,"props":990,"children":991},{"style":63},[992],{"type":24,"value":993},"    });\n",{"type":19,"tag":56,"props":995,"children":997},{"class":58,"line":996},42,[998],{"type":19,"tag":56,"props":999,"children":1000},{"style":63},[1001],{"type":24,"value":370},{"type":19,"tag":56,"props":1003,"children":1005},{"class":58,"line":1004},43,[1006],{"type":19,"tag":56,"props":1007,"children":1008},{"style":63},[1009],{"type":24,"value":1010},"}\n",{"type":19,"tag":27,"props":1012,"children":1014},{"id":1013},"深度代码质量分析",[1015],{"type":24,"value":1016},"🔍 深度代码质量分析",{"type":19,"tag":34,"props":1018,"children":1020},{"id":1019},"智能语法与逻辑检查",[1021],{"type":24,"value":1019},{"type":19,"tag":20,"props":1023,"children":1024},{},[1025],{"type":24,"value":1026},"不仅仅是 ESLint，我们引入了基于 AST（抽象语法树）的深度语义分析，能够识别逻辑漏洞和潜在的运行时错误。",{"type":19,"tag":20,"props":1028,"children":1029},{},[1030],{"type":19,"tag":166,"props":1031,"children":1032},{},[1033],{"type":24,"value":1034},"AST 分析器实现示例",{"type":19,"tag":45,"props":1036,"children":1040},{"className":1037,"code":1038,"language":1039,"meta":7,"style":7},"language-javascript shiki shiki-themes github-dark github-dark","const astAnalyzer = {\n  analyzeComponentLogic(code) {\n    const ast = parser.parse(code, { sourceType: 'module' });\n    const issues = [];\n\n    traverse(ast, {\n      // 检测未处理的 Promise\n      CallExpression(path) {\n        if (this.isAsyncCall(path) && !this.isAwaitedOrCaught(path)) {\n          issues.push({\n            type: 'UnhandledPromise',\n            line: path.node.loc.start.line,\n            message: 'Async operation detected without await or catch block'\n          });\n        }\n      },\n      \n      // 检测响应式状态的直接修改 (Vue Specific)\n      AssignmentExpression(path) {\n        if (this.isPropMutation(path)) {\n          issues.push({\n            type: 'PropMutation',\n            line: path.node.loc.start.line,\n            message: 'Direct mutation of props is anti-pattern'\n          });\n        }\n      }\n    });\n\n    return issues;\n  }\n};\n","javascript",[1041],{"type":19,"tag":52,"props":1042,"children":1043},{"__ignoreMap":7},[1044,1065,1086,1127,1148,1155,1168,1176,1197,1257,1274,1292,1300,1313,1321,1329,1337,1345,1353,1373,1401,1416,1432,1439,1451,1458,1465,1473,1480,1487,1499,1506],{"type":19,"tag":56,"props":1045,"children":1046},{"class":58,"line":59},[1047,1052,1057,1061],{"type":19,"tag":56,"props":1048,"children":1049},{"style":185},[1050],{"type":24,"value":1051},"const",{"type":19,"tag":56,"props":1053,"children":1054},{"style":218},[1055],{"type":24,"value":1056}," astAnalyzer",{"type":19,"tag":56,"props":1058,"children":1059},{"style":185},[1060],{"type":24,"value":460},{"type":19,"tag":56,"props":1062,"children":1063},{"style":63},[1064],{"type":24,"value":199},{"type":19,"tag":56,"props":1066,"children":1067},{"class":58,"line":69},[1068,1073,1077,1081],{"type":19,"tag":56,"props":1069,"children":1070},{"style":191},[1071],{"type":24,"value":1072},"  analyzeComponentLogic",{"type":19,"tag":56,"props":1074,"children":1075},{"style":63},[1076],{"type":24,"value":397},{"type":19,"tag":56,"props":1078,"children":1079},{"style":400},[1080],{"type":24,"value":52},{"type":19,"tag":56,"props":1082,"children":1083},{"style":63},[1084],{"type":24,"value":1085},") {\n",{"type":19,"tag":56,"props":1087,"children":1088},{"class":58,"line":78},[1089,1093,1098,1102,1107,1112,1117,1122],{"type":19,"tag":56,"props":1090,"children":1091},{"style":185},[1092],{"type":24,"value":450},{"type":19,"tag":56,"props":1094,"children":1095},{"style":218},[1096],{"type":24,"value":1097}," ast",{"type":19,"tag":56,"props":1099,"children":1100},{"style":185},[1101],{"type":24,"value":460},{"type":19,"tag":56,"props":1103,"children":1104},{"style":63},[1105],{"type":24,"value":1106}," parser.",{"type":19,"tag":56,"props":1108,"children":1109},{"style":191},[1110],{"type":24,"value":1111},"parse",{"type":19,"tag":56,"props":1113,"children":1114},{"style":63},[1115],{"type":24,"value":1116},"(code, { sourceType: ",{"type":19,"tag":56,"props":1118,"children":1119},{"style":583},[1120],{"type":24,"value":1121},"'module'",{"type":19,"tag":56,"props":1123,"children":1124},{"style":63},[1125],{"type":24,"value":1126}," });\n",{"type":19,"tag":56,"props":1128,"children":1129},{"class":58,"line":87},[1130,1134,1139,1143],{"type":19,"tag":56,"props":1131,"children":1132},{"style":185},[1133],{"type":24,"value":450},{"type":19,"tag":56,"props":1135,"children":1136},{"style":218},[1137],{"type":24,"value":1138}," issues",{"type":19,"tag":56,"props":1140,"children":1141},{"style":185},[1142],{"type":24,"value":460},{"type":19,"tag":56,"props":1144,"children":1145},{"style":63},[1146],{"type":24,"value":1147}," [];\n",{"type":19,"tag":56,"props":1149,"children":1150},{"class":58,"line":96},[1151],{"type":19,"tag":56,"props":1152,"children":1153},{"emptyLinePlaceholder":376},[1154],{"type":24,"value":379},{"type":19,"tag":56,"props":1156,"children":1157},{"class":58,"line":105},[1158,1163],{"type":19,"tag":56,"props":1159,"children":1160},{"style":191},[1161],{"type":24,"value":1162},"    traverse",{"type":19,"tag":56,"props":1164,"children":1165},{"style":63},[1166],{"type":24,"value":1167},"(ast, {\n",{"type":19,"tag":56,"props":1169,"children":1170},{"class":58,"line":114},[1171],{"type":19,"tag":56,"props":1172,"children":1173},{"style":488},[1174],{"type":24,"value":1175},"      // 检测未处理的 Promise\n",{"type":19,"tag":56,"props":1177,"children":1178},{"class":58,"line":123},[1179,1184,1188,1193],{"type":19,"tag":56,"props":1180,"children":1181},{"style":191},[1182],{"type":24,"value":1183},"      CallExpression",{"type":19,"tag":56,"props":1185,"children":1186},{"style":63},[1187],{"type":24,"value":397},{"type":19,"tag":56,"props":1189,"children":1190},{"style":400},[1191],{"type":24,"value":1192},"path",{"type":19,"tag":56,"props":1194,"children":1195},{"style":63},[1196],{"type":24,"value":1085},{"type":19,"tag":56,"props":1198,"children":1199},{"class":58,"line":132},[1200,1205,1209,1214,1219,1224,1229,1234,1239,1243,1247,1252],{"type":19,"tag":56,"props":1201,"children":1202},{"style":185},[1203],{"type":24,"value":1204},"        if",{"type":19,"tag":56,"props":1206,"children":1207},{"style":63},[1208],{"type":24,"value":670},{"type":19,"tag":56,"props":1210,"children":1211},{"style":218},[1212],{"type":24,"value":1213},"this",{"type":19,"tag":56,"props":1215,"children":1216},{"style":63},[1217],{"type":24,"value":1218},".",{"type":19,"tag":56,"props":1220,"children":1221},{"style":191},[1222],{"type":24,"value":1223},"isAsyncCall",{"type":19,"tag":56,"props":1225,"children":1226},{"style":63},[1227],{"type":24,"value":1228},"(path) ",{"type":19,"tag":56,"props":1230,"children":1231},{"style":185},[1232],{"type":24,"value":1233},"&&",{"type":19,"tag":56,"props":1235,"children":1236},{"style":185},[1237],{"type":24,"value":1238}," !",{"type":19,"tag":56,"props":1240,"children":1241},{"style":218},[1242],{"type":24,"value":1213},{"type":19,"tag":56,"props":1244,"children":1245},{"style":63},[1246],{"type":24,"value":1218},{"type":19,"tag":56,"props":1248,"children":1249},{"style":191},[1250],{"type":24,"value":1251},"isAwaitedOrCaught",{"type":19,"tag":56,"props":1253,"children":1254},{"style":63},[1255],{"type":24,"value":1256},"(path)) {\n",{"type":19,"tag":56,"props":1258,"children":1259},{"class":58,"line":141},[1260,1265,1270],{"type":19,"tag":56,"props":1261,"children":1262},{"style":63},[1263],{"type":24,"value":1264},"          issues.",{"type":19,"tag":56,"props":1266,"children":1267},{"style":191},[1268],{"type":24,"value":1269},"push",{"type":19,"tag":56,"props":1271,"children":1272},{"style":63},[1273],{"type":24,"value":957},{"type":19,"tag":56,"props":1275,"children":1276},{"class":58,"line":150},[1277,1282,1287],{"type":19,"tag":56,"props":1278,"children":1279},{"style":63},[1280],{"type":24,"value":1281},"            type: ",{"type":19,"tag":56,"props":1283,"children":1284},{"style":583},[1285],{"type":24,"value":1286},"'UnhandledPromise'",{"type":19,"tag":56,"props":1288,"children":1289},{"style":63},[1290],{"type":24,"value":1291},",\n",{"type":19,"tag":56,"props":1293,"children":1294},{"class":58,"line":476},[1295],{"type":19,"tag":56,"props":1296,"children":1297},{"style":63},[1298],{"type":24,"value":1299},"            line: path.node.loc.start.line,\n",{"type":19,"tag":56,"props":1301,"children":1302},{"class":58,"line":484},[1303,1308],{"type":19,"tag":56,"props":1304,"children":1305},{"style":63},[1306],{"type":24,"value":1307},"            message: ",{"type":19,"tag":56,"props":1309,"children":1310},{"style":583},[1311],{"type":24,"value":1312},"'Async operation detected without await or catch block'\n",{"type":19,"tag":56,"props":1314,"children":1315},{"class":58,"line":494},[1316],{"type":19,"tag":56,"props":1317,"children":1318},{"style":63},[1319],{"type":24,"value":1320},"          });\n",{"type":19,"tag":56,"props":1322,"children":1323},{"class":58,"line":536},[1324],{"type":19,"tag":56,"props":1325,"children":1326},{"style":63},[1327],{"type":24,"value":1328},"        }\n",{"type":19,"tag":56,"props":1330,"children":1331},{"class":58,"line":560},[1332],{"type":19,"tag":56,"props":1333,"children":1334},{"style":63},[1335],{"type":24,"value":1336},"      },\n",{"type":19,"tag":56,"props":1338,"children":1339},{"class":58,"line":594},[1340],{"type":19,"tag":56,"props":1341,"children":1342},{"style":63},[1343],{"type":24,"value":1344},"      \n",{"type":19,"tag":56,"props":1346,"children":1347},{"class":58,"line":603},[1348],{"type":19,"tag":56,"props":1349,"children":1350},{"style":488},[1351],{"type":24,"value":1352},"      // 检测响应式状态的直接修改 (Vue Specific)\n",{"type":19,"tag":56,"props":1354,"children":1355},{"class":58,"line":611},[1356,1361,1365,1369],{"type":19,"tag":56,"props":1357,"children":1358},{"style":191},[1359],{"type":24,"value":1360},"      AssignmentExpression",{"type":19,"tag":56,"props":1362,"children":1363},{"style":63},[1364],{"type":24,"value":397},{"type":19,"tag":56,"props":1366,"children":1367},{"style":400},[1368],{"type":24,"value":1192},{"type":19,"tag":56,"props":1370,"children":1371},{"style":63},[1372],{"type":24,"value":1085},{"type":19,"tag":56,"props":1374,"children":1375},{"class":58,"line":620},[1376,1380,1384,1388,1392,1397],{"type":19,"tag":56,"props":1377,"children":1378},{"style":185},[1379],{"type":24,"value":1204},{"type":19,"tag":56,"props":1381,"children":1382},{"style":63},[1383],{"type":24,"value":670},{"type":19,"tag":56,"props":1385,"children":1386},{"style":218},[1387],{"type":24,"value":1213},{"type":19,"tag":56,"props":1389,"children":1390},{"style":63},[1391],{"type":24,"value":1218},{"type":19,"tag":56,"props":1393,"children":1394},{"style":191},[1395],{"type":24,"value":1396},"isPropMutation",{"type":19,"tag":56,"props":1398,"children":1399},{"style":63},[1400],{"type":24,"value":1256},{"type":19,"tag":56,"props":1402,"children":1403},{"class":58,"line":660},[1404,1408,1412],{"type":19,"tag":56,"props":1405,"children":1406},{"style":63},[1407],{"type":24,"value":1264},{"type":19,"tag":56,"props":1409,"children":1410},{"style":191},[1411],{"type":24,"value":1269},{"type":19,"tag":56,"props":1413,"children":1414},{"style":63},[1415],{"type":24,"value":957},{"type":19,"tag":56,"props":1417,"children":1418},{"class":58,"line":683},[1419,1423,1428],{"type":19,"tag":56,"props":1420,"children":1421},{"style":63},[1422],{"type":24,"value":1281},{"type":19,"tag":56,"props":1424,"children":1425},{"style":583},[1426],{"type":24,"value":1427},"'PropMutation'",{"type":19,"tag":56,"props":1429,"children":1430},{"style":63},[1431],{"type":24,"value":1291},{"type":19,"tag":56,"props":1433,"children":1434},{"class":58,"line":713},[1435],{"type":19,"tag":56,"props":1436,"children":1437},{"style":63},[1438],{"type":24,"value":1299},{"type":19,"tag":56,"props":1440,"children":1441},{"class":58,"line":721},[1442,1446],{"type":19,"tag":56,"props":1443,"children":1444},{"style":63},[1445],{"type":24,"value":1307},{"type":19,"tag":56,"props":1447,"children":1448},{"style":583},[1449],{"type":24,"value":1450},"'Direct mutation of props is anti-pattern'\n",{"type":19,"tag":56,"props":1452,"children":1453},{"class":58,"line":729},[1454],{"type":19,"tag":56,"props":1455,"children":1456},{"style":63},[1457],{"type":24,"value":1320},{"type":19,"tag":56,"props":1459,"children":1460},{"class":58,"line":738},[1461],{"type":19,"tag":56,"props":1462,"children":1463},{"style":63},[1464],{"type":24,"value":1328},{"type":19,"tag":56,"props":1466,"children":1467},{"class":58,"line":778},[1468],{"type":19,"tag":56,"props":1469,"children":1470},{"style":63},[1471],{"type":24,"value":1472},"      }\n",{"type":19,"tag":56,"props":1474,"children":1475},{"class":58,"line":797},[1476],{"type":19,"tag":56,"props":1477,"children":1478},{"style":63},[1479],{"type":24,"value":993},{"type":19,"tag":56,"props":1481,"children":1482},{"class":58,"line":806},[1483],{"type":19,"tag":56,"props":1484,"children":1485},{"emptyLinePlaceholder":376},[1486],{"type":24,"value":379},{"type":19,"tag":56,"props":1488,"children":1489},{"class":58,"line":815},[1490,1494],{"type":19,"tag":56,"props":1491,"children":1492},{"style":185},[1493],{"type":24,"value":943},{"type":19,"tag":56,"props":1495,"children":1496},{"style":63},[1497],{"type":24,"value":1498}," issues;\n",{"type":19,"tag":56,"props":1500,"children":1501},{"class":58,"line":824},[1502],{"type":19,"tag":56,"props":1503,"children":1504},{"style":63},[1505],{"type":24,"value":370},{"type":19,"tag":56,"props":1507,"children":1508},{"class":58,"line":833},[1509],{"type":19,"tag":56,"props":1510,"children":1511},{"style":63},[1512],{"type":24,"value":1513},"};\n",{"type":19,"tag":34,"props":1515,"children":1517},{"id":1516},"安全性扫描",[1518],{"type":24,"value":1516},{"type":19,"tag":20,"props":1520,"children":1521},{},[1522],{"type":24,"value":1523},"自动检测常见的 Web 安全漏洞，如 XSS 注入风险、不安全的链接目标等。",{"type":19,"tag":1525,"props":1526,"children":1527},"ul",{},[1528,1547,1557],{"type":19,"tag":1529,"props":1530,"children":1531},"li",{},[1532,1537,1539,1545],{"type":19,"tag":166,"props":1533,"children":1534},{},[1535],{"type":24,"value":1536},"XSS 防护",{"type":24,"value":1538},"：检查所有 ",{"type":19,"tag":52,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":24,"value":1544},"v-html",{"type":24,"value":1546}," 指令和动态内容插入点。",{"type":19,"tag":1529,"props":1548,"children":1549},{},[1550,1555],{"type":19,"tag":166,"props":1551,"children":1552},{},[1553],{"type":24,"value":1554},"依赖安全",{"type":24,"value":1556},"：扫描引入的第三方库版本，比对 CVE 数据库。",{"type":19,"tag":1529,"props":1558,"children":1559},{},[1560,1565,1567,1573,1575,1581],{"type":19,"tag":166,"props":1561,"children":1562},{},[1563],{"type":24,"value":1564},"链接安全",{"type":24,"value":1566},"：强制检查 ",{"type":19,"tag":52,"props":1568,"children":1570},{"className":1569},[],[1571],{"type":24,"value":1572},"target=\"_blank\"",{"type":24,"value":1574}," 链接的 ",{"type":19,"tag":52,"props":1576,"children":1578},{"className":1577},[],[1579],{"type":24,"value":1580},"rel=\"noopener noreferrer\"",{"type":24,"value":1582}," 属性。",{"type":19,"tag":27,"props":1584,"children":1586},{"id":1585},"️-视觉回归与ui测试",[1587],{"type":24,"value":1588},"👁️ 视觉回归与UI测试",{"type":19,"tag":34,"props":1590,"children":1592},{"id":1591},"像素级视觉比对",[1593],{"type":24,"value":1591},{"type":19,"tag":20,"props":1595,"children":1596},{},[1597],{"type":24,"value":1598},"使用 AI 驱动的视觉差异检测算法，能够区分\"可接受的渲染差异\"（如抗锯齿差异）和\"真正的视觉缺陷\"（如布局错位）。",{"type":19,"tag":45,"props":1600,"children":1604},{"className":1601,"code":1602,"language":1603,"meta":7,"style":7},"language-python shiki shiki-themes github-dark github-dark","class VisualRegressionEngine:\n    def __init__(self):\n        self.baseline_manager = BaselineManager()\n        self.diff_calculator = SSIMDiffCalculator() # Structural Similarity Index\n    \n    def compare_screenshots(self, current_img, baseline_img):\n        # 1. 图像预处理 (去噪、归一化)\n        processed_current = self.preprocess(current_img)\n        processed_baseline = self.preprocess(baseline_img)\n        \n        # 2. 结构相似度计算\n        score, diff_map = self.diff_calculator.compute(\n            processed_current, \n            processed_baseline\n        )\n        \n        # 3. 智能区域忽略 (忽略动态内容区域)\n        masked_diff = self.apply_dynamic_masks(diff_map)\n        \n        # 4. 缺陷分类\n        defects = self.classify_defects(masked_diff)\n        \n        return {\n            'similarity_score': score,\n            'critical_defects': [d for d in defects if d.severity > 0.8],\n            'minor_defects': [d for d in defects if d.severity \u003C= 0.8]\n        }\n","python",[1605],{"type":19,"tag":52,"props":1606,"children":1607},{"__ignoreMap":7},[1608,1625,1643,1665,1691,1698,1715,1723,1745,1766,1774,1782,1803,1811,1819,1827,1834,1842,1863,1870,1878,1899,1906,1918,1931,1989,2039],{"type":19,"tag":56,"props":1609,"children":1610},{"class":58,"line":59},[1611,1615,1620],{"type":19,"tag":56,"props":1612,"children":1613},{"style":185},[1614],{"type":24,"value":188},{"type":19,"tag":56,"props":1616,"children":1617},{"style":191},[1618],{"type":24,"value":1619}," VisualRegressionEngine",{"type":19,"tag":56,"props":1621,"children":1622},{"style":63},[1623],{"type":24,"value":1624},":\n",{"type":19,"tag":56,"props":1626,"children":1627},{"class":58,"line":69},[1628,1633,1638],{"type":19,"tag":56,"props":1629,"children":1630},{"style":185},[1631],{"type":24,"value":1632},"    def",{"type":19,"tag":56,"props":1634,"children":1635},{"style":218},[1636],{"type":24,"value":1637}," __init__",{"type":19,"tag":56,"props":1639,"children":1640},{"style":63},[1641],{"type":24,"value":1642},"(self):\n",{"type":19,"tag":56,"props":1644,"children":1645},{"class":58,"line":78},[1646,1651,1656,1660],{"type":19,"tag":56,"props":1647,"children":1648},{"style":218},[1649],{"type":24,"value":1650},"        self",{"type":19,"tag":56,"props":1652,"children":1653},{"style":63},[1654],{"type":24,"value":1655},".baseline_manager ",{"type":19,"tag":56,"props":1657,"children":1658},{"style":185},[1659],{"type":24,"value":231},{"type":19,"tag":56,"props":1661,"children":1662},{"style":63},[1663],{"type":24,"value":1664}," BaselineManager()\n",{"type":19,"tag":56,"props":1666,"children":1667},{"class":58,"line":87},[1668,1672,1677,1681,1686],{"type":19,"tag":56,"props":1669,"children":1670},{"style":218},[1671],{"type":24,"value":1650},{"type":19,"tag":56,"props":1673,"children":1674},{"style":63},[1675],{"type":24,"value":1676},".diff_calculator ",{"type":19,"tag":56,"props":1678,"children":1679},{"style":185},[1680],{"type":24,"value":231},{"type":19,"tag":56,"props":1682,"children":1683},{"style":63},[1684],{"type":24,"value":1685}," SSIMDiffCalculator() ",{"type":19,"tag":56,"props":1687,"children":1688},{"style":488},[1689],{"type":24,"value":1690},"# Structural Similarity Index\n",{"type":19,"tag":56,"props":1692,"children":1693},{"class":58,"line":96},[1694],{"type":19,"tag":56,"props":1695,"children":1696},{"style":63},[1697],{"type":24,"value":821},{"type":19,"tag":56,"props":1699,"children":1700},{"class":58,"line":105},[1701,1705,1710],{"type":19,"tag":56,"props":1702,"children":1703},{"style":185},[1704],{"type":24,"value":1632},{"type":19,"tag":56,"props":1706,"children":1707},{"style":191},[1708],{"type":24,"value":1709}," compare_screenshots",{"type":19,"tag":56,"props":1711,"children":1712},{"style":63},[1713],{"type":24,"value":1714},"(self, current_img, baseline_img):\n",{"type":19,"tag":56,"props":1716,"children":1717},{"class":58,"line":114},[1718],{"type":19,"tag":56,"props":1719,"children":1720},{"style":488},[1721],{"type":24,"value":1722},"        # 1. 图像预处理 (去噪、归一化)\n",{"type":19,"tag":56,"props":1724,"children":1725},{"class":58,"line":123},[1726,1731,1735,1740],{"type":19,"tag":56,"props":1727,"children":1728},{"style":63},[1729],{"type":24,"value":1730},"        processed_current ",{"type":19,"tag":56,"props":1732,"children":1733},{"style":185},[1734],{"type":24,"value":231},{"type":19,"tag":56,"props":1736,"children":1737},{"style":218},[1738],{"type":24,"value":1739}," self",{"type":19,"tag":56,"props":1741,"children":1742},{"style":63},[1743],{"type":24,"value":1744},".preprocess(current_img)\n",{"type":19,"tag":56,"props":1746,"children":1747},{"class":58,"line":132},[1748,1753,1757,1761],{"type":19,"tag":56,"props":1749,"children":1750},{"style":63},[1751],{"type":24,"value":1752},"        processed_baseline ",{"type":19,"tag":56,"props":1754,"children":1755},{"style":185},[1756],{"type":24,"value":231},{"type":19,"tag":56,"props":1758,"children":1759},{"style":218},[1760],{"type":24,"value":1739},{"type":19,"tag":56,"props":1762,"children":1763},{"style":63},[1764],{"type":24,"value":1765},".preprocess(baseline_img)\n",{"type":19,"tag":56,"props":1767,"children":1768},{"class":58,"line":141},[1769],{"type":19,"tag":56,"props":1770,"children":1771},{"style":63},[1772],{"type":24,"value":1773},"        \n",{"type":19,"tag":56,"props":1775,"children":1776},{"class":58,"line":150},[1777],{"type":19,"tag":56,"props":1778,"children":1779},{"style":488},[1780],{"type":24,"value":1781},"        # 2. 结构相似度计算\n",{"type":19,"tag":56,"props":1783,"children":1784},{"class":58,"line":476},[1785,1790,1794,1798],{"type":19,"tag":56,"props":1786,"children":1787},{"style":63},[1788],{"type":24,"value":1789},"        score, diff_map ",{"type":19,"tag":56,"props":1791,"children":1792},{"style":185},[1793],{"type":24,"value":231},{"type":19,"tag":56,"props":1795,"children":1796},{"style":218},[1797],{"type":24,"value":1739},{"type":19,"tag":56,"props":1799,"children":1800},{"style":63},[1801],{"type":24,"value":1802},".diff_calculator.compute(\n",{"type":19,"tag":56,"props":1804,"children":1805},{"class":58,"line":484},[1806],{"type":19,"tag":56,"props":1807,"children":1808},{"style":63},[1809],{"type":24,"value":1810},"            processed_current, \n",{"type":19,"tag":56,"props":1812,"children":1813},{"class":58,"line":494},[1814],{"type":19,"tag":56,"props":1815,"children":1816},{"style":63},[1817],{"type":24,"value":1818},"            processed_baseline\n",{"type":19,"tag":56,"props":1820,"children":1821},{"class":58,"line":536},[1822],{"type":19,"tag":56,"props":1823,"children":1824},{"style":63},[1825],{"type":24,"value":1826},"        )\n",{"type":19,"tag":56,"props":1828,"children":1829},{"class":58,"line":560},[1830],{"type":19,"tag":56,"props":1831,"children":1832},{"style":63},[1833],{"type":24,"value":1773},{"type":19,"tag":56,"props":1835,"children":1836},{"class":58,"line":594},[1837],{"type":19,"tag":56,"props":1838,"children":1839},{"style":488},[1840],{"type":24,"value":1841},"        # 3. 智能区域忽略 (忽略动态内容区域)\n",{"type":19,"tag":56,"props":1843,"children":1844},{"class":58,"line":603},[1845,1850,1854,1858],{"type":19,"tag":56,"props":1846,"children":1847},{"style":63},[1848],{"type":24,"value":1849},"        masked_diff ",{"type":19,"tag":56,"props":1851,"children":1852},{"style":185},[1853],{"type":24,"value":231},{"type":19,"tag":56,"props":1855,"children":1856},{"style":218},[1857],{"type":24,"value":1739},{"type":19,"tag":56,"props":1859,"children":1860},{"style":63},[1861],{"type":24,"value":1862},".apply_dynamic_masks(diff_map)\n",{"type":19,"tag":56,"props":1864,"children":1865},{"class":58,"line":611},[1866],{"type":19,"tag":56,"props":1867,"children":1868},{"style":63},[1869],{"type":24,"value":1773},{"type":19,"tag":56,"props":1871,"children":1872},{"class":58,"line":620},[1873],{"type":19,"tag":56,"props":1874,"children":1875},{"style":488},[1876],{"type":24,"value":1877},"        # 4. 缺陷分类\n",{"type":19,"tag":56,"props":1879,"children":1880},{"class":58,"line":660},[1881,1886,1890,1894],{"type":19,"tag":56,"props":1882,"children":1883},{"style":63},[1884],{"type":24,"value":1885},"        defects ",{"type":19,"tag":56,"props":1887,"children":1888},{"style":185},[1889],{"type":24,"value":231},{"type":19,"tag":56,"props":1891,"children":1892},{"style":218},[1893],{"type":24,"value":1739},{"type":19,"tag":56,"props":1895,"children":1896},{"style":63},[1897],{"type":24,"value":1898},".classify_defects(masked_diff)\n",{"type":19,"tag":56,"props":1900,"children":1901},{"class":58,"line":683},[1902],{"type":19,"tag":56,"props":1903,"children":1904},{"style":63},[1905],{"type":24,"value":1773},{"type":19,"tag":56,"props":1907,"children":1908},{"class":58,"line":713},[1909,1914],{"type":19,"tag":56,"props":1910,"children":1911},{"style":185},[1912],{"type":24,"value":1913},"        return",{"type":19,"tag":56,"props":1915,"children":1916},{"style":63},[1917],{"type":24,"value":199},{"type":19,"tag":56,"props":1919,"children":1920},{"class":58,"line":721},[1921,1926],{"type":19,"tag":56,"props":1922,"children":1923},{"style":583},[1924],{"type":24,"value":1925},"            'similarity_score'",{"type":19,"tag":56,"props":1927,"children":1928},{"style":63},[1929],{"type":24,"value":1930},": score,\n",{"type":19,"tag":56,"props":1932,"children":1933},{"class":58,"line":729},[1934,1939,1944,1949,1954,1959,1964,1969,1974,1979,1984],{"type":19,"tag":56,"props":1935,"children":1936},{"style":583},[1937],{"type":24,"value":1938},"            'critical_defects'",{"type":19,"tag":56,"props":1940,"children":1941},{"style":63},[1942],{"type":24,"value":1943},": [d ",{"type":19,"tag":56,"props":1945,"children":1946},{"style":185},[1947],{"type":24,"value":1948},"for",{"type":19,"tag":56,"props":1950,"children":1951},{"style":63},[1952],{"type":24,"value":1953}," d ",{"type":19,"tag":56,"props":1955,"children":1956},{"style":185},[1957],{"type":24,"value":1958},"in",{"type":19,"tag":56,"props":1960,"children":1961},{"style":63},[1962],{"type":24,"value":1963}," defects ",{"type":19,"tag":56,"props":1965,"children":1966},{"style":185},[1967],{"type":24,"value":1968},"if",{"type":19,"tag":56,"props":1970,"children":1971},{"style":63},[1972],{"type":24,"value":1973}," d.severity ",{"type":19,"tag":56,"props":1975,"children":1976},{"style":185},[1977],{"type":24,"value":1978},">",{"type":19,"tag":56,"props":1980,"children":1981},{"style":218},[1982],{"type":24,"value":1983}," 0.8",{"type":19,"tag":56,"props":1985,"children":1986},{"style":63},[1987],{"type":24,"value":1988},"],\n",{"type":19,"tag":56,"props":1990,"children":1991},{"class":58,"line":738},[1992,1997,2001,2005,2009,2013,2017,2021,2025,2030,2034],{"type":19,"tag":56,"props":1993,"children":1994},{"style":583},[1995],{"type":24,"value":1996},"            'minor_defects'",{"type":19,"tag":56,"props":1998,"children":1999},{"style":63},[2000],{"type":24,"value":1943},{"type":19,"tag":56,"props":2002,"children":2003},{"style":185},[2004],{"type":24,"value":1948},{"type":19,"tag":56,"props":2006,"children":2007},{"style":63},[2008],{"type":24,"value":1953},{"type":19,"tag":56,"props":2010,"children":2011},{"style":185},[2012],{"type":24,"value":1958},{"type":19,"tag":56,"props":2014,"children":2015},{"style":63},[2016],{"type":24,"value":1963},{"type":19,"tag":56,"props":2018,"children":2019},{"style":185},[2020],{"type":24,"value":1968},{"type":19,"tag":56,"props":2022,"children":2023},{"style":63},[2024],{"type":24,"value":1973},{"type":19,"tag":56,"props":2026,"children":2027},{"style":185},[2028],{"type":24,"value":2029},"\u003C=",{"type":19,"tag":56,"props":2031,"children":2032},{"style":218},[2033],{"type":24,"value":1983},{"type":19,"tag":56,"props":2035,"children":2036},{"style":63},[2037],{"type":24,"value":2038},"]\n",{"type":19,"tag":56,"props":2040,"children":2041},{"class":58,"line":778},[2042],{"type":19,"tag":56,"props":2043,"children":2044},{"style":63},[2045],{"type":24,"value":1328},{"type":19,"tag":34,"props":2047,"children":2049},{"id":2048},"响应式布局验证",[2050],{"type":24,"value":2048},{"type":19,"tag":20,"props":2052,"children":2053},{},[2054],{"type":24,"value":2055},"自动化测试系统会在多个视口尺寸下渲染页面，检测布局断裂和重叠问题。",{"type":19,"tag":1525,"props":2057,"children":2058},{},[2059,2069,2079],{"type":19,"tag":1529,"props":2060,"children":2061},{},[2062,2067],{"type":19,"tag":166,"props":2063,"children":2064},{},[2065],{"type":24,"value":2066},"断点测试",{"type":24,"value":2068},"：Mobile (375px), Tablet (768px), Desktop (1440px), Wide (1920px)。",{"type":19,"tag":1529,"props":2070,"children":2071},{},[2072,2077],{"type":19,"tag":166,"props":2073,"children":2074},{},[2075],{"type":24,"value":2076},"溢出检测",{"type":24,"value":2078},"：自动检测水平滚动条是否意外出现。",{"type":19,"tag":1529,"props":2080,"children":2081},{},[2082,2087],{"type":19,"tag":166,"props":2083,"children":2084},{},[2085],{"type":24,"value":2086},"重叠检测",{"type":24,"value":2088},"：识别文本与容器、文本与文本之间的非预期重叠。",{"type":19,"tag":27,"props":2090,"children":2092},{"id":2091},"无障碍访问性-accessibility",[2093],{"type":24,"value":2094},"♿ 无障碍访问性 (Accessibility)",{"type":19,"tag":34,"props":2096,"children":2098},{"id":2097},"wcag-21-标准合规",[2099],{"type":24,"value":2100},"WCAG 2.1 标准合规",{"type":19,"tag":20,"props":2102,"children":2103},{},[2104],{"type":24,"value":2105},"系统内置 Axe-core 引擎，确保生成的页面符合 WCAG 2.1 AA 级标准，让所有人都能平等访问。",{"type":19,"tag":20,"props":2107,"children":2108},{},[2109],{"type":19,"tag":166,"props":2110,"children":2111},{},[2112],{"type":24,"value":2113},"自动化 A11y 审计流程",{"type":19,"tag":45,"props":2115,"children":2117},{"className":1037,"code":2116,"language":1039,"meta":7,"style":7},"async function runAccessibilityAudit(pageUrl) {\n  const browser = await puppeteer.launch();\n  const page = await browser.newPage();\n  await page.goto(pageUrl);\n\n  // 注入 axe-core\n  await page.addScriptTag({ path: require.resolve('axe-core') });\n\n  // 执行分析\n  const results = await page.evaluate(async () => {\n    return await axe.run();\n  });\n\n  // 分类处理违规项\n  const violations = results.violations.map(v => ({\n    id: v.id,\n    impact: v.impact,\n    description: v.description,\n    nodes: v.nodes.map(n => n.html) // 记录违规的 HTML 片段\n  }));\n\n  await browser.close();\n  \n  return {\n    score: calculateA11yScore(violations),\n    critical_issues: violations.filter(v => v.impact === 'critical'),\n    report: generateReport(violations)\n  };\n}\n",[2118],{"type":19,"tag":52,"props":2119,"children":2120},{"__ignoreMap":7},[2121,2152,2187,2221,2244,2251,2259,2299,2306,2314,2365,2390,2398,2405,2413,2458,2466,2474,2482,2517,2525,2532,2552,2560,2572,2590,2635,2653,2661],{"type":19,"tag":56,"props":2122,"children":2123},{"class":58,"line":59},[2124,2129,2134,2139,2143,2148],{"type":19,"tag":56,"props":2125,"children":2126},{"style":185},[2127],{"type":24,"value":2128},"async",{"type":19,"tag":56,"props":2130,"children":2131},{"style":185},[2132],{"type":24,"value":2133}," function",{"type":19,"tag":56,"props":2135,"children":2136},{"style":191},[2137],{"type":24,"value":2138}," runAccessibilityAudit",{"type":19,"tag":56,"props":2140,"children":2141},{"style":63},[2142],{"type":24,"value":397},{"type":19,"tag":56,"props":2144,"children":2145},{"style":400},[2146],{"type":24,"value":2147},"pageUrl",{"type":19,"tag":56,"props":2149,"children":2150},{"style":63},[2151],{"type":24,"value":1085},{"type":19,"tag":56,"props":2153,"children":2154},{"class":58,"line":69},[2155,2160,2165,2169,2173,2178,2183],{"type":19,"tag":56,"props":2156,"children":2157},{"style":185},[2158],{"type":24,"value":2159},"  const",{"type":19,"tag":56,"props":2161,"children":2162},{"style":218},[2163],{"type":24,"value":2164}," browser",{"type":19,"tag":56,"props":2166,"children":2167},{"style":185},[2168],{"type":24,"value":460},{"type":19,"tag":56,"props":2170,"children":2171},{"style":185},[2172],{"type":24,"value":513},{"type":19,"tag":56,"props":2174,"children":2175},{"style":63},[2176],{"type":24,"value":2177}," puppeteer.",{"type":19,"tag":56,"props":2179,"children":2180},{"style":191},[2181],{"type":24,"value":2182},"launch",{"type":19,"tag":56,"props":2184,"children":2185},{"style":63},[2186],{"type":24,"value":246},{"type":19,"tag":56,"props":2188,"children":2189},{"class":58,"line":78},[2190,2194,2199,2203,2207,2212,2217],{"type":19,"tag":56,"props":2191,"children":2192},{"style":185},[2193],{"type":24,"value":2159},{"type":19,"tag":56,"props":2195,"children":2196},{"style":218},[2197],{"type":24,"value":2198}," page",{"type":19,"tag":56,"props":2200,"children":2201},{"style":185},[2202],{"type":24,"value":460},{"type":19,"tag":56,"props":2204,"children":2205},{"style":185},[2206],{"type":24,"value":513},{"type":19,"tag":56,"props":2208,"children":2209},{"style":63},[2210],{"type":24,"value":2211}," browser.",{"type":19,"tag":56,"props":2213,"children":2214},{"style":191},[2215],{"type":24,"value":2216},"newPage",{"type":19,"tag":56,"props":2218,"children":2219},{"style":63},[2220],{"type":24,"value":246},{"type":19,"tag":56,"props":2222,"children":2223},{"class":58,"line":87},[2224,2229,2234,2239],{"type":19,"tag":56,"props":2225,"children":2226},{"style":185},[2227],{"type":24,"value":2228},"  await",{"type":19,"tag":56,"props":2230,"children":2231},{"style":63},[2232],{"type":24,"value":2233}," page.",{"type":19,"tag":56,"props":2235,"children":2236},{"style":191},[2237],{"type":24,"value":2238},"goto",{"type":19,"tag":56,"props":2240,"children":2241},{"style":63},[2242],{"type":24,"value":2243},"(pageUrl);\n",{"type":19,"tag":56,"props":2245,"children":2246},{"class":58,"line":96},[2247],{"type":19,"tag":56,"props":2248,"children":2249},{"emptyLinePlaceholder":376},[2250],{"type":24,"value":379},{"type":19,"tag":56,"props":2252,"children":2253},{"class":58,"line":105},[2254],{"type":19,"tag":56,"props":2255,"children":2256},{"style":488},[2257],{"type":24,"value":2258},"  // 注入 axe-core\n",{"type":19,"tag":56,"props":2260,"children":2261},{"class":58,"line":114},[2262,2266,2270,2275,2280,2285,2289,2294],{"type":19,"tag":56,"props":2263,"children":2264},{"style":185},[2265],{"type":24,"value":2228},{"type":19,"tag":56,"props":2267,"children":2268},{"style":63},[2269],{"type":24,"value":2233},{"type":19,"tag":56,"props":2271,"children":2272},{"style":191},[2273],{"type":24,"value":2274},"addScriptTag",{"type":19,"tag":56,"props":2276,"children":2277},{"style":63},[2278],{"type":24,"value":2279},"({ path: require.",{"type":19,"tag":56,"props":2281,"children":2282},{"style":191},[2283],{"type":24,"value":2284},"resolve",{"type":19,"tag":56,"props":2286,"children":2287},{"style":63},[2288],{"type":24,"value":397},{"type":19,"tag":56,"props":2290,"children":2291},{"style":583},[2292],{"type":24,"value":2293},"'axe-core'",{"type":19,"tag":56,"props":2295,"children":2296},{"style":63},[2297],{"type":24,"value":2298},") });\n",{"type":19,"tag":56,"props":2300,"children":2301},{"class":58,"line":123},[2302],{"type":19,"tag":56,"props":2303,"children":2304},{"emptyLinePlaceholder":376},[2305],{"type":24,"value":379},{"type":19,"tag":56,"props":2307,"children":2308},{"class":58,"line":132},[2309],{"type":19,"tag":56,"props":2310,"children":2311},{"style":488},[2312],{"type":24,"value":2313},"  // 执行分析\n",{"type":19,"tag":56,"props":2315,"children":2316},{"class":58,"line":141},[2317,2321,2326,2330,2334,2338,2343,2347,2351,2356,2361],{"type":19,"tag":56,"props":2318,"children":2319},{"style":185},[2320],{"type":24,"value":2159},{"type":19,"tag":56,"props":2322,"children":2323},{"style":218},[2324],{"type":24,"value":2325}," results",{"type":19,"tag":56,"props":2327,"children":2328},{"style":185},[2329],{"type":24,"value":460},{"type":19,"tag":56,"props":2331,"children":2332},{"style":185},[2333],{"type":24,"value":513},{"type":19,"tag":56,"props":2335,"children":2336},{"style":63},[2337],{"type":24,"value":2233},{"type":19,"tag":56,"props":2339,"children":2340},{"style":191},[2341],{"type":24,"value":2342},"evaluate",{"type":19,"tag":56,"props":2344,"children":2345},{"style":63},[2346],{"type":24,"value":397},{"type":19,"tag":56,"props":2348,"children":2349},{"style":185},[2350],{"type":24,"value":2128},{"type":19,"tag":56,"props":2352,"children":2353},{"style":63},[2354],{"type":24,"value":2355}," () ",{"type":19,"tag":56,"props":2357,"children":2358},{"style":185},[2359],{"type":24,"value":2360},"=>",{"type":19,"tag":56,"props":2362,"children":2363},{"style":63},[2364],{"type":24,"value":199},{"type":19,"tag":56,"props":2366,"children":2367},{"class":58,"line":150},[2368,2372,2376,2381,2386],{"type":19,"tag":56,"props":2369,"children":2370},{"style":185},[2371],{"type":24,"value":943},{"type":19,"tag":56,"props":2373,"children":2374},{"style":185},[2375],{"type":24,"value":513},{"type":19,"tag":56,"props":2377,"children":2378},{"style":63},[2379],{"type":24,"value":2380}," axe.",{"type":19,"tag":56,"props":2382,"children":2383},{"style":191},[2384],{"type":24,"value":2385},"run",{"type":19,"tag":56,"props":2387,"children":2388},{"style":63},[2389],{"type":24,"value":246},{"type":19,"tag":56,"props":2391,"children":2392},{"class":58,"line":476},[2393],{"type":19,"tag":56,"props":2394,"children":2395},{"style":63},[2396],{"type":24,"value":2397},"  });\n",{"type":19,"tag":56,"props":2399,"children":2400},{"class":58,"line":484},[2401],{"type":19,"tag":56,"props":2402,"children":2403},{"emptyLinePlaceholder":376},[2404],{"type":24,"value":379},{"type":19,"tag":56,"props":2406,"children":2407},{"class":58,"line":494},[2408],{"type":19,"tag":56,"props":2409,"children":2410},{"style":488},[2411],{"type":24,"value":2412},"  // 分类处理违规项\n",{"type":19,"tag":56,"props":2414,"children":2415},{"class":58,"line":536},[2416,2420,2425,2429,2434,2439,2443,2448,2453],{"type":19,"tag":56,"props":2417,"children":2418},{"style":185},[2419],{"type":24,"value":2159},{"type":19,"tag":56,"props":2421,"children":2422},{"style":218},[2423],{"type":24,"value":2424}," violations",{"type":19,"tag":56,"props":2426,"children":2427},{"style":185},[2428],{"type":24,"value":460},{"type":19,"tag":56,"props":2430,"children":2431},{"style":63},[2432],{"type":24,"value":2433}," results.violations.",{"type":19,"tag":56,"props":2435,"children":2436},{"style":191},[2437],{"type":24,"value":2438},"map",{"type":19,"tag":56,"props":2440,"children":2441},{"style":63},[2442],{"type":24,"value":397},{"type":19,"tag":56,"props":2444,"children":2445},{"style":400},[2446],{"type":24,"value":2447},"v",{"type":19,"tag":56,"props":2449,"children":2450},{"style":185},[2451],{"type":24,"value":2452}," =>",{"type":19,"tag":56,"props":2454,"children":2455},{"style":63},[2456],{"type":24,"value":2457}," ({\n",{"type":19,"tag":56,"props":2459,"children":2460},{"class":58,"line":560},[2461],{"type":19,"tag":56,"props":2462,"children":2463},{"style":63},[2464],{"type":24,"value":2465},"    id: v.id,\n",{"type":19,"tag":56,"props":2467,"children":2468},{"class":58,"line":594},[2469],{"type":19,"tag":56,"props":2470,"children":2471},{"style":63},[2472],{"type":24,"value":2473},"    impact: v.impact,\n",{"type":19,"tag":56,"props":2475,"children":2476},{"class":58,"line":603},[2477],{"type":19,"tag":56,"props":2478,"children":2479},{"style":63},[2480],{"type":24,"value":2481},"    description: v.description,\n",{"type":19,"tag":56,"props":2483,"children":2484},{"class":58,"line":611},[2485,2490,2494,2498,2503,2507,2512],{"type":19,"tag":56,"props":2486,"children":2487},{"style":63},[2488],{"type":24,"value":2489},"    nodes: v.nodes.",{"type":19,"tag":56,"props":2491,"children":2492},{"style":191},[2493],{"type":24,"value":2438},{"type":19,"tag":56,"props":2495,"children":2496},{"style":63},[2497],{"type":24,"value":397},{"type":19,"tag":56,"props":2499,"children":2500},{"style":400},[2501],{"type":24,"value":2502},"n",{"type":19,"tag":56,"props":2504,"children":2505},{"style":185},[2506],{"type":24,"value":2452},{"type":19,"tag":56,"props":2508,"children":2509},{"style":63},[2510],{"type":24,"value":2511}," n.html) ",{"type":19,"tag":56,"props":2513,"children":2514},{"style":488},[2515],{"type":24,"value":2516},"// 记录违规的 HTML 片段\n",{"type":19,"tag":56,"props":2518,"children":2519},{"class":58,"line":620},[2520],{"type":19,"tag":56,"props":2521,"children":2522},{"style":63},[2523],{"type":24,"value":2524},"  }));\n",{"type":19,"tag":56,"props":2526,"children":2527},{"class":58,"line":660},[2528],{"type":19,"tag":56,"props":2529,"children":2530},{"emptyLinePlaceholder":376},[2531],{"type":24,"value":379},{"type":19,"tag":56,"props":2533,"children":2534},{"class":58,"line":683},[2535,2539,2543,2548],{"type":19,"tag":56,"props":2536,"children":2537},{"style":185},[2538],{"type":24,"value":2228},{"type":19,"tag":56,"props":2540,"children":2541},{"style":63},[2542],{"type":24,"value":2211},{"type":19,"tag":56,"props":2544,"children":2545},{"style":191},[2546],{"type":24,"value":2547},"close",{"type":19,"tag":56,"props":2549,"children":2550},{"style":63},[2551],{"type":24,"value":246},{"type":19,"tag":56,"props":2553,"children":2554},{"class":58,"line":713},[2555],{"type":19,"tag":56,"props":2556,"children":2557},{"style":63},[2558],{"type":24,"value":2559},"  \n",{"type":19,"tag":56,"props":2561,"children":2562},{"class":58,"line":721},[2563,2568],{"type":19,"tag":56,"props":2564,"children":2565},{"style":185},[2566],{"type":24,"value":2567},"  return",{"type":19,"tag":56,"props":2569,"children":2570},{"style":63},[2571],{"type":24,"value":199},{"type":19,"tag":56,"props":2573,"children":2574},{"class":58,"line":729},[2575,2580,2585],{"type":19,"tag":56,"props":2576,"children":2577},{"style":63},[2578],{"type":24,"value":2579},"    score: ",{"type":19,"tag":56,"props":2581,"children":2582},{"style":191},[2583],{"type":24,"value":2584},"calculateA11yScore",{"type":19,"tag":56,"props":2586,"children":2587},{"style":63},[2588],{"type":24,"value":2589},"(violations),\n",{"type":19,"tag":56,"props":2591,"children":2592},{"class":58,"line":738},[2593,2598,2603,2607,2611,2615,2620,2625,2630],{"type":19,"tag":56,"props":2594,"children":2595},{"style":63},[2596],{"type":24,"value":2597},"    critical_issues: violations.",{"type":19,"tag":56,"props":2599,"children":2600},{"style":191},[2601],{"type":24,"value":2602},"filter",{"type":19,"tag":56,"props":2604,"children":2605},{"style":63},[2606],{"type":24,"value":397},{"type":19,"tag":56,"props":2608,"children":2609},{"style":400},[2610],{"type":24,"value":2447},{"type":19,"tag":56,"props":2612,"children":2613},{"style":185},[2614],{"type":24,"value":2452},{"type":19,"tag":56,"props":2616,"children":2617},{"style":63},[2618],{"type":24,"value":2619}," v.impact ",{"type":19,"tag":56,"props":2621,"children":2622},{"style":185},[2623],{"type":24,"value":2624},"===",{"type":19,"tag":56,"props":2626,"children":2627},{"style":583},[2628],{"type":24,"value":2629}," 'critical'",{"type":19,"tag":56,"props":2631,"children":2632},{"style":63},[2633],{"type":24,"value":2634},"),\n",{"type":19,"tag":56,"props":2636,"children":2637},{"class":58,"line":778},[2638,2643,2648],{"type":19,"tag":56,"props":2639,"children":2640},{"style":63},[2641],{"type":24,"value":2642},"    report: ",{"type":19,"tag":56,"props":2644,"children":2645},{"style":191},[2646],{"type":24,"value":2647},"generateReport",{"type":19,"tag":56,"props":2649,"children":2650},{"style":63},[2651],{"type":24,"value":2652},"(violations)\n",{"type":19,"tag":56,"props":2654,"children":2655},{"class":58,"line":797},[2656],{"type":19,"tag":56,"props":2657,"children":2658},{"style":63},[2659],{"type":24,"value":2660},"  };\n",{"type":19,"tag":56,"props":2662,"children":2663},{"class":58,"line":806},[2664],{"type":19,"tag":56,"props":2665,"children":2666},{"style":63},[2667],{"type":24,"value":1010},{"type":19,"tag":27,"props":2669,"children":2671},{"id":2670},"性能基准与优化",[2672],{"type":24,"value":2673},"🚀 性能基准与优化",{"type":19,"tag":34,"props":2675,"children":2677},{"id":2676},"core-web-vitals-监控",[2678],{"type":24,"value":2679},"Core Web Vitals 监控",{"type":19,"tag":20,"props":2681,"children":2682},{},[2683],{"type":24,"value":2684},"不仅关注加载速度，更关注用户体验的核心指标。",{"type":19,"tag":2686,"props":2687,"children":2688},"table",{},[2689,2713],{"type":19,"tag":2690,"props":2691,"children":2692},"thead",{},[2693],{"type":19,"tag":2694,"props":2695,"children":2696},"tr",{},[2697,2703,2708],{"type":19,"tag":2698,"props":2699,"children":2700},"th",{},[2701],{"type":24,"value":2702},"指标",{"type":19,"tag":2698,"props":2704,"children":2705},{},[2706],{"type":24,"value":2707},"目标值",{"type":19,"tag":2698,"props":2709,"children":2710},{},[2711],{"type":24,"value":2712},"优化策略",{"type":19,"tag":2714,"props":2715,"children":2716},"tbody",{},[2717,2741,2764],{"type":19,"tag":2694,"props":2718,"children":2719},{},[2720,2731,2736],{"type":19,"tag":2721,"props":2722,"children":2723},"td",{},[2724,2729],{"type":19,"tag":166,"props":2725,"children":2726},{},[2727],{"type":24,"value":2728},"LCP",{"type":24,"value":2730}," (最大内容绘制)",{"type":19,"tag":2721,"props":2732,"children":2733},{},[2734],{"type":24,"value":2735},"\u003C 2.5s",{"type":19,"tag":2721,"props":2737,"children":2738},{},[2739],{"type":24,"value":2740},"图像懒加载、关键 CSS 内联、CDN 加速",{"type":19,"tag":2694,"props":2742,"children":2743},{},[2744,2754,2759],{"type":19,"tag":2721,"props":2745,"children":2746},{},[2747,2752],{"type":19,"tag":166,"props":2748,"children":2749},{},[2750],{"type":24,"value":2751},"FID",{"type":24,"value":2753}," (首次输入延迟)",{"type":19,"tag":2721,"props":2755,"children":2756},{},[2757],{"type":24,"value":2758},"\u003C 100ms",{"type":19,"tag":2721,"props":2760,"children":2761},{},[2762],{"type":24,"value":2763},"减少主线程阻塞、代码分割、Web Worker",{"type":19,"tag":2694,"props":2765,"children":2766},{},[2767,2777,2782],{"type":19,"tag":2721,"props":2768,"children":2769},{},[2770,2775],{"type":19,"tag":166,"props":2771,"children":2772},{},[2773],{"type":24,"value":2774},"CLS",{"type":24,"value":2776}," (累积布局偏移)",{"type":19,"tag":2721,"props":2778,"children":2779},{},[2780],{"type":24,"value":2781},"\u003C 0.1",{"type":19,"tag":2721,"props":2783,"children":2784},{},[2785],{"type":24,"value":2786},"预留图片空间、字体加载策略、避免动态插入",{"type":19,"tag":34,"props":2788,"children":2790},{"id":2789},"资源加载优化",[2791],{"type":24,"value":2789},{"type":19,"tag":20,"props":2793,"children":2794},{},[2795],{"type":24,"value":2796},"自动分析生成的资源依赖图，应用最佳优化策略。",{"type":19,"tag":1525,"props":2798,"children":2799},{},[2800,2810,2828],{"type":19,"tag":1529,"props":2801,"children":2802},{},[2803,2808],{"type":19,"tag":166,"props":2804,"children":2805},{},[2806],{"type":24,"value":2807},"智能分包",{"type":24,"value":2809},"：基于路由和组件使用频率自动拆分 JS bundle。",{"type":19,"tag":1529,"props":2811,"children":2812},{},[2813,2818,2820,2826],{"type":19,"tag":166,"props":2814,"children":2815},{},[2816],{"type":24,"value":2817},"图像优化",{"type":24,"value":2819},"：自动生成 WebP/AVIF 格式，并提供响应式 ",{"type":19,"tag":52,"props":2821,"children":2823},{"className":2822},[],[2824],{"type":24,"value":2825},"srcset",{"type":24,"value":2827},"。",{"type":19,"tag":1529,"props":2829,"children":2830},{},[2831,2836,2838,2844],{"type":19,"tag":166,"props":2832,"children":2833},{},[2834],{"type":24,"value":2835},"预加载策略",{"type":24,"value":2837},"：自动识别关键资源并添加 ",{"type":19,"tag":52,"props":2839,"children":2841},{"className":2840},[],[2842],{"type":24,"value":2843},"\u003Clink rel=\"preload\">",{"type":24,"value":2827},{"type":19,"tag":27,"props":2846,"children":2848},{"id":2847},"ai-辅助人工审查",[2849],{"type":24,"value":2850},"🤖 AI 辅助人工审查",{"type":19,"tag":20,"props":2852,"children":2853},{},[2854],{"type":24,"value":2855},"虽然自动化测试能覆盖 90% 的问题，但人类的主观审美和体验仍不可替代。我们引入了 \"AI 预审员\" 机制，辅助人工进行最后把关。",{"type":19,"tag":20,"props":2857,"children":2858},{},[2859],{"type":19,"tag":166,"props":2860,"children":2861},{},[2862],{"type":24,"value":2863},"AI 审查报告示例",{"type":19,"tag":2865,"props":2866,"children":2867},"blockquote",{},[2868,2885,2894,2912,2921],{"type":19,"tag":20,"props":2869,"children":2870},{},[2871,2876,2878,2883],{"type":19,"tag":166,"props":2872,"children":2873},{},[2874],{"type":24,"value":2875},"审查对象",{"type":24,"value":2877},": 营销落地页 v2\n",{"type":19,"tag":166,"props":2879,"children":2880},{},[2881],{"type":24,"value":2882},"AI 评分",{"type":24,"value":2884},": 88/100",{"type":19,"tag":20,"props":2886,"children":2887},{},[2888,2893],{"type":19,"tag":166,"props":2889,"children":2890},{},[2891],{"type":24,"value":2892},"👍 优点",{"type":24,"value":408},{"type":19,"tag":1525,"props":2895,"children":2896},{},[2897,2902,2907],{"type":19,"tag":1529,"props":2898,"children":2899},{},[2900],{"type":24,"value":2901},"色彩搭配符合品牌调性 (Brand Consistency: 95%)",{"type":19,"tag":1529,"props":2903,"children":2904},{},[2905],{"type":24,"value":2906},"移动端适配完美，无布局错乱",{"type":19,"tag":1529,"props":2908,"children":2909},{},[2910],{"type":24,"value":2911},"关键 CTA 按钮对比度极佳",{"type":19,"tag":20,"props":2913,"children":2914},{},[2915,2920],{"type":19,"tag":166,"props":2916,"children":2917},{},[2918],{"type":24,"value":2919},"⚠️ 待确认项",{"type":24,"value":408},{"type":19,"tag":2922,"props":2923,"children":2924},"ol",{},[2925,2935,2945],{"type":19,"tag":1529,"props":2926,"children":2927},{},[2928,2933],{"type":19,"tag":166,"props":2929,"children":2930},{},[2931],{"type":24,"value":2932},"情感一致性",{"type":24,"value":2934},": 第二屏的文案语气略显生硬，建议更亲和一些。",{"type":19,"tag":1529,"props":2936,"children":2937},{},[2938,2943],{"type":19,"tag":166,"props":2939,"children":2940},{},[2941],{"type":24,"value":2942},"视觉焦点",{"type":24,"value":2944},": 英雄区域的背景图过于复杂，可能干扰文字阅读。",{"type":19,"tag":1529,"props":2946,"children":2947},{},[2948,2953],{"type":19,"tag":166,"props":2949,"children":2950},{},[2951],{"type":24,"value":2952},"逻辑连贯",{"type":24,"value":2954},": \"产品优势\"板块与\"客户案例\"板块之间的过渡略显突兀。",{"type":19,"tag":27,"props":2956,"children":2958},{"id":2957},"质量度量与持续改进",[2959],{"type":24,"value":2960},"📊 质量度量与持续改进",{"type":19,"tag":34,"props":2962,"children":2964},{"id":2963},"质量仪表盘",[2965],{"type":24,"value":2963},{"type":19,"tag":20,"props":2967,"children":2968},{},[2969],{"type":24,"value":2970},"实时监控所有生成项目的质量指标，形成闭环反馈。",{"type":19,"tag":1525,"props":2972,"children":2973},{},[2974,2984,2994],{"type":19,"tag":1529,"props":2975,"children":2976},{},[2977,2982],{"type":19,"tag":166,"props":2978,"children":2979},{},[2980],{"type":24,"value":2981},"缺陷密度趋势",{"type":24,"value":2983},"：每千行代码的 Bug 数量变化。",{"type":19,"tag":1529,"props":2985,"children":2986},{},[2987,2992],{"type":19,"tag":166,"props":2988,"children":2989},{},[2990],{"type":24,"value":2991},"测试覆盖率",{"type":24,"value":2993},"：自动化测试覆盖的功能点比例。",{"type":19,"tag":1529,"props":2995,"children":2996},{},[2997,3002],{"type":19,"tag":166,"props":2998,"children":2999},{},[3000],{"type":24,"value":3001},"用户反馈相关性",{"type":24,"value":3003},"：用户修改率与自动评分的相关性分析。",{"type":19,"tag":34,"props":3005,"children":3007},{"id":3006},"自愈合机制",[3008],{"type":24,"value":3006},{"type":19,"tag":20,"props":3010,"children":3011},{},[3012],{"type":24,"value":3013},"当检测到特定类型的错误时，系统具备自动修复能力。",{"type":19,"tag":1525,"props":3015,"children":3016},{},[3017,3035,3053],{"type":19,"tag":1529,"props":3018,"children":3019},{},[3020,3025,3027,3033],{"type":19,"tag":166,"props":3021,"children":3022},{},[3023],{"type":24,"value":3024},"自动修复 Lint 错误",{"type":24,"value":3026},"：利用 ",{"type":19,"tag":52,"props":3028,"children":3030},{"className":3029},[],[3031],{"type":24,"value":3032},"eslint --fix",{"type":24,"value":3034}," 自动格式化代码。",{"type":19,"tag":1529,"props":3036,"children":3037},{},[3038,3043,3045,3051],{"type":19,"tag":166,"props":3039,"children":3040},{},[3041],{"type":24,"value":3042},"自动补全属性",{"type":24,"value":3044},"：如缺失的 ",{"type":19,"tag":52,"props":3046,"children":3048},{"className":3047},[],[3049],{"type":24,"value":3050},"alt",{"type":24,"value":3052}," 标签，AI 可根据图片内容自动生成。",{"type":19,"tag":1529,"props":3054,"children":3055},{},[3056,3061],{"type":19,"tag":166,"props":3057,"children":3058},{},[3059],{"type":24,"value":3060},"自动降级处理",{"type":24,"value":3062},"：当检测到浏览器兼容性问题时，自动应用 Polyfill 或降级方案。",{"type":19,"tag":27,"props":3064,"children":3066},{"id":3065},"相关技术文档",[3067],{"type":24,"value":3068},"🔗 相关技术文档",{"type":19,"tag":1525,"props":3070,"children":3071},{},[3072,3082,3091,3100],{"type":19,"tag":1529,"props":3073,"children":3074},{},[3075],{"type":19,"tag":3076,"props":3077,"children":3079},"a",{"href":3078},"/ai/content-generation-engine.md",[3080],{"type":24,"value":3081},"代码生成引擎",{"type":19,"tag":1529,"props":3083,"children":3084},{},[3085],{"type":19,"tag":3076,"props":3086,"children":3088},{"href":3087},"/ai/semantic-understanding.md",[3089],{"type":24,"value":3090},"语义理解系统",{"type":19,"tag":1529,"props":3092,"children":3093},{},[3094],{"type":19,"tag":3076,"props":3095,"children":3097},{"href":3096},"/guide/performance-optimization.md",[3098],{"type":24,"value":3099},"性能优化指南",{"type":19,"tag":1529,"props":3101,"children":3102},{},[3103],{"type":19,"tag":3076,"props":3104,"children":3106},{"href":3105},"/guide/semantic-html.md",[3107],{"type":24,"value":3108},"无障碍开发规范",{"type":19,"tag":3110,"props":3111,"children":3112},"hr",{},[],{"type":19,"tag":20,"props":3114,"children":3115},{},[3116],{"type":19,"tag":3117,"props":3118,"children":3119},"em",{},[3120],{"type":24,"value":3121},"质量不是检验出来的，而是设计和构建出来的。HTMLPAGE 通过全链路的智能质量保证体系，让每一次生成都值得信赖。",{"type":19,"tag":3123,"props":3124,"children":3125},"style",{},[3126],{"type":24,"value":3127},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":78,"depth":78,"links":3129},[3130,3134,3138,3142,3145,3149,3150,3154],{"id":29,"depth":69,"text":32,"children":3131},[3132,3133],{"id":36,"depth":78,"text":36},{"id":159,"depth":78,"text":159},{"id":1013,"depth":69,"text":1016,"children":3135},[3136,3137],{"id":1019,"depth":78,"text":1019},{"id":1516,"depth":78,"text":1516},{"id":1585,"depth":69,"text":1588,"children":3139},[3140,3141],{"id":1591,"depth":78,"text":1591},{"id":2048,"depth":78,"text":2048},{"id":2091,"depth":69,"text":2094,"children":3143},[3144],{"id":2097,"depth":78,"text":2100},{"id":2670,"depth":69,"text":2673,"children":3146},[3147,3148],{"id":2676,"depth":78,"text":2679},{"id":2789,"depth":78,"text":2789},{"id":2847,"depth":69,"text":2850},{"id":2957,"depth":69,"text":2960,"children":3151},[3152,3153],{"id":2963,"depth":78,"text":2963},{"id":3006,"depth":78,"text":3006},{"id":3065,"depth":69,"text":3068},"markdown","content:ai:quality-assurance.md","content","ai/quality-assurance.md","ai/quality-assurance","md",[3162,3173,3182],{"_path":3163,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3164,"description":3165,"keywords":3166,"schemaType":3167,"author":11,"date":3168,"image":3169,"_type":3155,"_id":3170,"_source":3157,"_file":3171,"_stem":3172,"_extension":3160},"/ai/architecture-overview","AI架构概述 - HTMLPAGE智能网页生成系统","HTMLPAGE AI系统架构深度解析，了解多智能体协作、实时流式生成、模块化组装等核心技术，探索AI如何革新网页设计流程。","AI网页生成, 多智能体系统, 实时流式AI, 智能网页设计, AI架构, 机器学习","TechArticle","2025-11-24","/content-images/ai/architecture-overview.jpg","content:ai:architecture-overview.md","ai/architecture-overview.md","ai/architecture-overview",{"_path":3174,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3175,"description":3176,"keywords":3177,"author":11,"date":12,"category":3178,"image":14,"_type":3155,"_id":3179,"_source":3157,"_file":3180,"_stem":3181,"_extension":3160},"/ai/batch-creation","批量页面创建","模板 + 提示词模式组合进行多页面高效率生成","批量页面创建, 批量生成, 提示词模板, HTMLPAGE","应用场景","content:ai:batch-creation.md","ai/batch-creation.md","ai/batch-creation",{"_path":3183,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3184,"description":3185,"keywords":3186,"author":11,"date":12,"category":3187,"image":14,"_type":3155,"_id":3188,"_source":3157,"_file":3189,"_stem":3190,"_extension":3160},"/ai/case-studies","AI 案例研究","HTMLPAGE AI 在不同行业和场景中的成功应用案例","AI 案例研究, 成功案例, 页面生成, HTMLPAGE","案例研究","content:ai:case-studies.md","ai/case-studies.md","ai/case-studies",1774945280320]