[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fteam-documents\u002F13":3,"knowledge-related-\u002Fknowledge\u002Fteam-documents\u002F13":1204,"knowledge-series-\u002Fknowledge\u002Fteam-documents\u002F13":1230},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":16,"pinned":17,"draft":17,"body":18,"seo":1200,"stem":1201,"id":1202,"extension":1203},"\u002Fknowledge\u002Fteam-documents\u002F13","新商家系统性能优化实践","商家系统新版本上线后，团队持续针对构建效率与用户体验做了一轮系统性优化。本文记录核心方案与落地结果，供后续版本复用。","团队文档",[12,13,14,15],"team","vue","performance","upload","2025-04-08",false,{"type":19,"value":20,"toc":1190},"minimark",[21,24,38,43,46,59,66,69,73,78,93,467,471,478,1077,1079,1083,1101,1103,1107,1110,1166,1168,1172,1186],[22,23,8],"h1",{"id":8},[25,26,27,37],"p",{},[28,29,33],"a",{"href":30,"rel":31},"https:\u002F\u002Ftm.anbangke.com",[32],"nofollow",[34,35,36],"code",{},"商家系统新版本","上线后，团队持续针对构建效率与用户体验做了一轮系统性优化。本文记录核心方案与落地结果，供后续版本复用。",[39,40,42],"h2",{"id":41},"_1-优化目标","1. 优化目标",[25,44,45],{},"本轮优化聚焦以下三个方向：",[47,48,49,53,56],"ul",{},[50,51,52],"li",{},"构建产物体积控制；",[50,54,55],{},"静态资源加载效率提升；",[50,57,58],{},"发布后更新体验优化（减少长时间等待刷新）。",[25,60,61,62,65],{},"项目技术栈：",[34,63,64],{},"Vite + Vue 3 + Element Plus + TypeScript + Sass + Pinia","。",[67,68],"hr",{},[39,70,72],{"id":71},"_2-构建产物优化","2. 构建产物优化",[74,75,77],"h3",{"id":76},"_21-压缩策略","2.1 压缩策略",[25,79,80,81,84,85,88,89,92],{},"使用 ",[34,82,83],{},"vite-plugin-compression"," 生成 ",[34,86,87],{},"gzip"," 或 ",[34,90,91],{},"brotli"," 产物，降低网络传输体积：",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import compressPlugin from \"vite-plugin-compression\";\n\nexport const createCompress = (compress: any) => {\n  if (compress === \"brotli\") {\n    return compressPlugin({\n      ext: \".br\",\n      algorithm: \"brotliCompress\",\n    });\n  }\n\n  if (compress === \"gzip\" || compress) {\n    return compressPlugin({\n      filter: \u002F\\.(js|mjs|json|css|html)$\u002Fi,\n      ext: \".gz\",\n      algorithm: \"gzip\",\n      threshold: 10240,\n      deleteOriginFile: false,\n    });\n  }\n\n  return [];\n};\n","ts","",[34,101,102,132,139,180,206,221,239,256,266,272,277,304,315,372,388,403,417,431,440,445,450,461],{"__ignoreMap":99},[103,104,107,111,115,118,122,125,128],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"sVHd0","import",[103,112,114],{"class":113},"su5hD"," compressPlugin ",[103,116,117],{"class":109},"from",[103,119,121],{"class":120},"sjJ54"," \"",[103,123,83],{"class":124},"s_sjI",[103,126,127],{"class":120},"\"",[103,129,131],{"class":130},"sP7_E",";\n",[103,133,135],{"class":105,"line":134},2,[103,136,138],{"emptyLinePlaceholder":137},true,"\n",[103,140,142,145,149,153,157,160,164,167,171,174,177],{"class":105,"line":141},3,[103,143,144],{"class":109},"export",[103,146,148],{"class":147},"sbsja"," const",[103,150,152],{"class":151},"sfCm-"," createCompress",[103,154,156],{"class":155},"smGrS"," =",[103,158,159],{"class":130}," (",[103,161,163],{"class":162},"s99_P","compress",[103,165,166],{"class":155},":",[103,168,170],{"class":169},"sZMiF"," any",[103,172,173],{"class":130},")",[103,175,176],{"class":147}," =>",[103,178,179],{"class":130}," {\n",[103,181,183,186,189,191,194,196,198,200,203],{"class":105,"line":182},4,[103,184,185],{"class":109},"  if",[103,187,159],{"class":188},"skxfh",[103,190,163],{"class":113},[103,192,193],{"class":155}," ===",[103,195,121],{"class":120},[103,197,91],{"class":124},[103,199,127],{"class":120},[103,201,202],{"class":188},") ",[103,204,205],{"class":130},"{\n",[103,207,209,212,216,219],{"class":105,"line":208},5,[103,210,211],{"class":109},"    return",[103,213,215],{"class":214},"sGLFI"," compressPlugin",[103,217,218],{"class":188},"(",[103,220,205],{"class":130},[103,222,224,227,229,231,234,236],{"class":105,"line":223},6,[103,225,226],{"class":188},"      ext",[103,228,166],{"class":130},[103,230,121],{"class":120},[103,232,233],{"class":124},".br",[103,235,127],{"class":120},[103,237,238],{"class":130},",\n",[103,240,242,245,247,249,252,254],{"class":105,"line":241},7,[103,243,244],{"class":188},"      algorithm",[103,246,166],{"class":130},[103,248,121],{"class":120},[103,250,251],{"class":124},"brotliCompress",[103,253,127],{"class":120},[103,255,238],{"class":130},[103,257,259,262,264],{"class":105,"line":258},8,[103,260,261],{"class":130},"    }",[103,263,173],{"class":188},[103,265,131],{"class":130},[103,267,269],{"class":105,"line":268},9,[103,270,271],{"class":130},"  }\n",[103,273,275],{"class":105,"line":274},10,[103,276,138],{"emptyLinePlaceholder":137},[103,278,280,282,284,286,288,290,292,294,297,300,302],{"class":105,"line":279},11,[103,281,185],{"class":109},[103,283,159],{"class":188},[103,285,163],{"class":113},[103,287,193],{"class":155},[103,289,121],{"class":120},[103,291,87],{"class":124},[103,293,127],{"class":120},[103,295,296],{"class":155}," ||",[103,298,299],{"class":113}," compress",[103,301,202],{"class":188},[103,303,205],{"class":130},[103,305,307,309,311,313],{"class":105,"line":306},12,[103,308,211],{"class":109},[103,310,215],{"class":214},[103,312,218],{"class":188},[103,314,205],{"class":130},[103,316,318,321,323,326,330,333,337,340,343,345,348,350,353,355,358,360,363,366,370],{"class":105,"line":317},13,[103,319,320],{"class":188},"      filter",[103,322,166],{"class":130},[103,324,325],{"class":120}," \u002F",[103,327,329],{"class":328},"sjYin","\\.",[103,331,218],{"class":332},"s-KJb",[103,334,336],{"class":335},"sQRbd","js",[103,338,339],{"class":155},"|",[103,341,342],{"class":335},"mjs",[103,344,339],{"class":155},[103,346,347],{"class":335},"json",[103,349,339],{"class":155},[103,351,352],{"class":335},"css",[103,354,339],{"class":155},[103,356,357],{"class":335},"html",[103,359,173],{"class":332},[103,361,362],{"class":109},"$",[103,364,365],{"class":120},"\u002F",[103,367,369],{"class":368},"sw1J6","i",[103,371,238],{"class":130},[103,373,375,377,379,381,384,386],{"class":105,"line":374},14,[103,376,226],{"class":188},[103,378,166],{"class":130},[103,380,121],{"class":120},[103,382,383],{"class":124},".gz",[103,385,127],{"class":120},[103,387,238],{"class":130},[103,389,391,393,395,397,399,401],{"class":105,"line":390},15,[103,392,244],{"class":188},[103,394,166],{"class":130},[103,396,121],{"class":120},[103,398,87],{"class":124},[103,400,127],{"class":120},[103,402,238],{"class":130},[103,404,406,409,411,415],{"class":105,"line":405},16,[103,407,408],{"class":188},"      threshold",[103,410,166],{"class":130},[103,412,414],{"class":413},"srdBf"," 10240",[103,416,238],{"class":130},[103,418,420,423,425,429],{"class":105,"line":419},17,[103,421,422],{"class":188},"      deleteOriginFile",[103,424,166],{"class":130},[103,426,428],{"class":427},"syTEX"," false",[103,430,238],{"class":130},[103,432,434,436,438],{"class":105,"line":433},18,[103,435,261],{"class":130},[103,437,173],{"class":188},[103,439,131],{"class":130},[103,441,443],{"class":105,"line":442},19,[103,444,271],{"class":130},[103,446,448],{"class":105,"line":447},20,[103,449,138],{"emptyLinePlaceholder":137},[103,451,453,456,459],{"class":105,"line":452},21,[103,454,455],{"class":109},"  return",[103,457,458],{"class":188}," []",[103,460,131],{"class":130},[103,462,464],{"class":105,"line":463},22,[103,465,466],{"class":130},"};\n",[74,468,470],{"id":469},"_22-分包与缓存策略","2.2 分包与缓存策略",[25,472,473,474,477],{},"通过 ",[34,475,476],{},"manualChunks"," 拆分公共依赖与大模块，并结合文件哈希策略提升缓存命中率：",[94,479,481],{"className":96,"code":480,"language":98,"meta":99,"style":99},"\u002F\u002F vite.config.ts\nexport default defineConfig({\n  build: {\n    chunkSizeWarningLimit: 10240,\n    cssCodeSplit: true,\n    reportCompressedSize: true,\n    rollupOptions: {\n      treeshake: true,\n      cache: true,\n      output: {\n        chunkFileNames: outputHash ? \"static\u002Fjs\u002F[name]-[hash].js\" : \"static\u002Fjs\u002F[name].js\",\n        entryFileNames: outputHash ? \"static\u002Fjs\u002F[name]-[hash].js\" : \"static\u002Fjs\u002F[name].js\",\n        assetFileNames: outputHash\n          ? \"static\u002F[ext]\u002F[name]-[hash].[ext]\"\n          : \"static\u002F[ext]\u002F[name].[ext]\",\n        manualChunks: {\n          vue: [\"vue\", \"vue-router\", \"pinia\", \"axios\"],\n          player: [\"xgplayer\", \"xgplayer-hls.js\"],\n          utils: [\"@vueuse\u002Fcore\", \"@vueuse\u002Fhead\"],\n          \u002F\u002F ...\n        },\n        minify: true,\n        sourcemap: false,\n        ...(minify === \"terser\"\n          ? {\n              terserOptions: {\n                compress: prod\n                  ? {\n                      defaults: true,\n                      drop_console: true,\n                      drop_debugger: true,\n                      pure_funcs: [\"console.log\", \"console.warn\"],\n                    }\n                  : false,\n                mangle: prod,\n                format: {\n                  comments: !prod,\n                  beautify: prod,\n                },\n              },\n            }\n          : {}),\n      },\n    },\n  },\n});\n",[34,482,483,489,503,512,523,535,546,555,566,577,586,618,645,655,668,682,691,740,769,798,803,808,819,831,850,857,867,878,886,898,910,922,952,958,968,981,991,1007,1019,1025,1031,1037,1049,1055,1061,1067],{"__ignoreMap":99},[103,484,485],{"class":105,"line":106},[103,486,488],{"class":487},"sutJx","\u002F\u002F vite.config.ts\n",[103,490,491,493,496,499,501],{"class":105,"line":134},[103,492,144],{"class":109},[103,494,495],{"class":109}," default",[103,497,498],{"class":214}," defineConfig",[103,500,218],{"class":113},[103,502,205],{"class":130},[103,504,505,508,510],{"class":105,"line":141},[103,506,507],{"class":188},"  build",[103,509,166],{"class":130},[103,511,179],{"class":130},[103,513,514,517,519,521],{"class":105,"line":182},[103,515,516],{"class":188},"    chunkSizeWarningLimit",[103,518,166],{"class":130},[103,520,414],{"class":413},[103,522,238],{"class":130},[103,524,525,528,530,533],{"class":105,"line":208},[103,526,527],{"class":188},"    cssCodeSplit",[103,529,166],{"class":130},[103,531,532],{"class":427}," true",[103,534,238],{"class":130},[103,536,537,540,542,544],{"class":105,"line":223},[103,538,539],{"class":188},"    reportCompressedSize",[103,541,166],{"class":130},[103,543,532],{"class":427},[103,545,238],{"class":130},[103,547,548,551,553],{"class":105,"line":241},[103,549,550],{"class":188},"    rollupOptions",[103,552,166],{"class":130},[103,554,179],{"class":130},[103,556,557,560,562,564],{"class":105,"line":258},[103,558,559],{"class":188},"      treeshake",[103,561,166],{"class":130},[103,563,532],{"class":427},[103,565,238],{"class":130},[103,567,568,571,573,575],{"class":105,"line":268},[103,569,570],{"class":188},"      cache",[103,572,166],{"class":130},[103,574,532],{"class":427},[103,576,238],{"class":130},[103,578,579,582,584],{"class":105,"line":274},[103,580,581],{"class":188},"      output",[103,583,166],{"class":130},[103,585,179],{"class":130},[103,587,588,591,593,596,599,601,604,606,609,611,614,616],{"class":105,"line":279},[103,589,590],{"class":188},"        chunkFileNames",[103,592,166],{"class":130},[103,594,595],{"class":113}," outputHash ",[103,597,598],{"class":155},"?",[103,600,121],{"class":120},[103,602,603],{"class":124},"static\u002Fjs\u002F[name]-[hash].js",[103,605,127],{"class":120},[103,607,608],{"class":155}," :",[103,610,121],{"class":120},[103,612,613],{"class":124},"static\u002Fjs\u002F[name].js",[103,615,127],{"class":120},[103,617,238],{"class":130},[103,619,620,623,625,627,629,631,633,635,637,639,641,643],{"class":105,"line":306},[103,621,622],{"class":188},"        entryFileNames",[103,624,166],{"class":130},[103,626,595],{"class":113},[103,628,598],{"class":155},[103,630,121],{"class":120},[103,632,603],{"class":124},[103,634,127],{"class":120},[103,636,608],{"class":155},[103,638,121],{"class":120},[103,640,613],{"class":124},[103,642,127],{"class":120},[103,644,238],{"class":130},[103,646,647,650,652],{"class":105,"line":317},[103,648,649],{"class":188},"        assetFileNames",[103,651,166],{"class":130},[103,653,654],{"class":113}," outputHash\n",[103,656,657,660,662,665],{"class":105,"line":374},[103,658,659],{"class":155},"          ?",[103,661,121],{"class":120},[103,663,664],{"class":124},"static\u002F[ext]\u002F[name]-[hash].[ext]",[103,666,667],{"class":120},"\"\n",[103,669,670,673,675,678,680],{"class":105,"line":390},[103,671,672],{"class":155},"          :",[103,674,121],{"class":120},[103,676,677],{"class":124},"static\u002F[ext]\u002F[name].[ext]",[103,679,127],{"class":120},[103,681,238],{"class":130},[103,683,684,687,689],{"class":105,"line":405},[103,685,686],{"class":188},"        manualChunks",[103,688,166],{"class":130},[103,690,179],{"class":130},[103,692,693,696,698,701,703,705,707,710,712,715,717,719,721,724,726,728,730,733,735,738],{"class":105,"line":419},[103,694,695],{"class":188},"          vue",[103,697,166],{"class":130},[103,699,700],{"class":113}," [",[103,702,127],{"class":120},[103,704,13],{"class":124},[103,706,127],{"class":120},[103,708,709],{"class":130},",",[103,711,121],{"class":120},[103,713,714],{"class":124},"vue-router",[103,716,127],{"class":120},[103,718,709],{"class":130},[103,720,121],{"class":120},[103,722,723],{"class":124},"pinia",[103,725,127],{"class":120},[103,727,709],{"class":130},[103,729,121],{"class":120},[103,731,732],{"class":124},"axios",[103,734,127],{"class":120},[103,736,737],{"class":113},"]",[103,739,238],{"class":130},[103,741,742,745,747,749,751,754,756,758,760,763,765,767],{"class":105,"line":433},[103,743,744],{"class":188},"          player",[103,746,166],{"class":130},[103,748,700],{"class":113},[103,750,127],{"class":120},[103,752,753],{"class":124},"xgplayer",[103,755,127],{"class":120},[103,757,709],{"class":130},[103,759,121],{"class":120},[103,761,762],{"class":124},"xgplayer-hls.js",[103,764,127],{"class":120},[103,766,737],{"class":113},[103,768,238],{"class":130},[103,770,771,774,776,778,780,783,785,787,789,792,794,796],{"class":105,"line":442},[103,772,773],{"class":188},"          utils",[103,775,166],{"class":130},[103,777,700],{"class":113},[103,779,127],{"class":120},[103,781,782],{"class":124},"@vueuse\u002Fcore",[103,784,127],{"class":120},[103,786,709],{"class":130},[103,788,121],{"class":120},[103,790,791],{"class":124},"@vueuse\u002Fhead",[103,793,127],{"class":120},[103,795,737],{"class":113},[103,797,238],{"class":130},[103,799,800],{"class":105,"line":447},[103,801,802],{"class":487},"          \u002F\u002F ...\n",[103,804,805],{"class":105,"line":452},[103,806,807],{"class":130},"        },\n",[103,809,810,813,815,817],{"class":105,"line":463},[103,811,812],{"class":188},"        minify",[103,814,166],{"class":130},[103,816,532],{"class":427},[103,818,238],{"class":130},[103,820,822,825,827,829],{"class":105,"line":821},23,[103,823,824],{"class":188},"        sourcemap",[103,826,166],{"class":130},[103,828,428],{"class":427},[103,830,238],{"class":130},[103,832,834,837,840,843,845,848],{"class":105,"line":833},24,[103,835,836],{"class":155},"        ...",[103,838,839],{"class":113},"(minify ",[103,841,842],{"class":155},"===",[103,844,121],{"class":120},[103,846,847],{"class":124},"terser",[103,849,667],{"class":120},[103,851,853,855],{"class":105,"line":852},25,[103,854,659],{"class":155},[103,856,179],{"class":130},[103,858,860,863,865],{"class":105,"line":859},26,[103,861,862],{"class":188},"              terserOptions",[103,864,166],{"class":130},[103,866,179],{"class":130},[103,868,870,873,875],{"class":105,"line":869},27,[103,871,872],{"class":188},"                compress",[103,874,166],{"class":130},[103,876,877],{"class":113}," prod\n",[103,879,881,884],{"class":105,"line":880},28,[103,882,883],{"class":155},"                  ?",[103,885,179],{"class":130},[103,887,889,892,894,896],{"class":105,"line":888},29,[103,890,891],{"class":188},"                      defaults",[103,893,166],{"class":130},[103,895,532],{"class":427},[103,897,238],{"class":130},[103,899,901,904,906,908],{"class":105,"line":900},30,[103,902,903],{"class":188},"                      drop_console",[103,905,166],{"class":130},[103,907,532],{"class":427},[103,909,238],{"class":130},[103,911,913,916,918,920],{"class":105,"line":912},31,[103,914,915],{"class":188},"                      drop_debugger",[103,917,166],{"class":130},[103,919,532],{"class":427},[103,921,238],{"class":130},[103,923,925,928,930,932,934,937,939,941,943,946,948,950],{"class":105,"line":924},32,[103,926,927],{"class":188},"                      pure_funcs",[103,929,166],{"class":130},[103,931,700],{"class":113},[103,933,127],{"class":120},[103,935,936],{"class":124},"console.log",[103,938,127],{"class":120},[103,940,709],{"class":130},[103,942,121],{"class":120},[103,944,945],{"class":124},"console.warn",[103,947,127],{"class":120},[103,949,737],{"class":113},[103,951,238],{"class":130},[103,953,955],{"class":105,"line":954},33,[103,956,957],{"class":130},"                    }\n",[103,959,961,964,966],{"class":105,"line":960},34,[103,962,963],{"class":155},"                  :",[103,965,428],{"class":427},[103,967,238],{"class":130},[103,969,971,974,976,979],{"class":105,"line":970},35,[103,972,973],{"class":188},"                mangle",[103,975,166],{"class":130},[103,977,978],{"class":113}," prod",[103,980,238],{"class":130},[103,982,984,987,989],{"class":105,"line":983},36,[103,985,986],{"class":188},"                format",[103,988,166],{"class":130},[103,990,179],{"class":130},[103,992,994,997,999,1002,1005],{"class":105,"line":993},37,[103,995,996],{"class":188},"                  comments",[103,998,166],{"class":130},[103,1000,1001],{"class":155}," !",[103,1003,1004],{"class":113},"prod",[103,1006,238],{"class":130},[103,1008,1010,1013,1015,1017],{"class":105,"line":1009},38,[103,1011,1012],{"class":188},"                  beautify",[103,1014,166],{"class":130},[103,1016,978],{"class":113},[103,1018,238],{"class":130},[103,1020,1022],{"class":105,"line":1021},39,[103,1023,1024],{"class":130},"                },\n",[103,1026,1028],{"class":105,"line":1027},40,[103,1029,1030],{"class":130},"              },\n",[103,1032,1034],{"class":105,"line":1033},41,[103,1035,1036],{"class":130},"            }\n",[103,1038,1040,1042,1045,1047],{"class":105,"line":1039},42,[103,1041,672],{"class":155},[103,1043,1044],{"class":130}," {}",[103,1046,173],{"class":113},[103,1048,238],{"class":130},[103,1050,1052],{"class":105,"line":1051},43,[103,1053,1054],{"class":130},"      },\n",[103,1056,1058],{"class":105,"line":1057},44,[103,1059,1060],{"class":130},"    },\n",[103,1062,1064],{"class":105,"line":1063},45,[103,1065,1066],{"class":130},"  },\n",[103,1068,1070,1073,1075],{"class":105,"line":1069},46,[103,1071,1072],{"class":130},"}",[103,1074,173],{"class":113},[103,1076,131],{"class":130},[67,1078],{},[39,1080,1082],{"id":1081},"_3-静态资源治理","3. 静态资源治理",[47,1084,1085,1088,1095,1098],{},[50,1086,1087],{},"图片资源进行压缩与分级管理；",[50,1089,1090,1091,1094],{},"大图优先上传 CDN，避免全部进入 ",[34,1092,1093],{},"dist","；",[50,1096,1097],{},"小体积资源可按需保留在本地打包产物中；",[50,1099,1100],{},"配合懒加载降低首屏资源压力。",[67,1102],{},[39,1104,1106],{"id":1105},"_4-优化结果阶段性","4. 优化结果（阶段性）",[25,1108,1109],{},"本次优化后，主要收益如下：",[1111,1112,1113,1127,1130,1141,1144,1151,1154,1157,1160,1163],"ol",{},[50,1114,1115,1116,1119,1120,1123,1124,65],{},"构建效率提升：Linux 环境构建约 ",[34,1117,1118],{},"40s","，完整部署约 ",[34,1121,1122],{},"1min","；Mac 环境构建约 ",[34,1125,1126],{},"20s",[50,1128,1129],{},"首屏加载体验改善：核心页面加载明显加快。",[50,1131,1132,1133,1136,1137,1140],{},"大体积文件拆分：约 ",[34,1134,1135],{},"3MB"," 文件拆分至约 ",[34,1138,1139],{},"700KB"," 级别，并启用压缩传输。",[50,1142,1143],{},"发布后等待刷新问题得到优化。",[50,1145,1146,1147,1150],{},"构建与语法兼容策略完善，兼容 ",[34,1148,1149],{},"ES6+"," 主流环境。",[50,1152,1153],{},"清理冗余文件与部分臃肿逻辑，降低维护成本。",[50,1155,1156],{},"修复外部链接跨域与访问异常问题。",[50,1158,1159],{},"控制台错误\u002F警告持续清理，稳定性提升。",[50,1161,1162],{},"图片懒加载与渐进式加载落地，进一步优化首屏表现。",[50,1164,1165],{},"完成部分 UI 细节优化，提升整体观感与可用性。",[67,1167],{},[39,1169,1171],{"id":1170},"_5-后续建议","5. 后续建议",[47,1173,1174,1177,1183],{},[50,1175,1176],{},"引入持续性能监控（如构建时长、包体积、LCP\u002FFCP）；",[50,1178,1179,1180,1182],{},"对 ",[34,1181,476],{}," 规则做版本化管理，避免分包策略回退；",[50,1184,1185],{},"将“压缩 + 分包 + 缓存”作为新项目默认基线配置。",[1187,1188,1189],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sfCm-, html code.shiki .sfCm-{--shiki-light:#90A4AE;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjYin, html code.shiki .sjYin{--shiki-light:#90A4AE;--shiki-light-font-weight:inherit;--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .s-KJb, html code.shiki .s-KJb{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sQRbd, html code.shiki .sQRbd{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":99,"searchDepth":134,"depth":134,"links":1191},[1192,1193,1197,1198,1199],{"id":41,"depth":134,"text":42},{"id":71,"depth":134,"text":72,"children":1194},[1195,1196],{"id":76,"depth":141,"text":77},{"id":469,"depth":141,"text":470},{"id":1081,"depth":134,"text":1082},{"id":1105,"depth":134,"text":1106},{"id":1170,"depth":134,"text":1171},{"title":8,"description":9},"knowledge\u002Fteam-documents\u002F13","knowledge\u002Fknowledge\u002Fteam-documents\u002F13.md","md",{"items":1205},[1206,1210,1214,1218,1222,1226],{"path":1207,"title":1208,"description":1209,"category":10,"score":390},"\u002Fknowledge\u002Fteam-documents\u002F04","老系统升级与兼容改造实践","公司原有业务系统采用 Node + jQuery 架构，长期运行后暴露出典型遗留系统问题：",{"path":1211,"title":1212,"description":1213,"category":10,"score":306},"\u002Fknowledge\u002Fteam-documents\u002F19","GridView 宫格加载渲染优化","系统首页 GridView 宫格模块接口耗时不高，但首次进入总耗时接近 22s。复盘耗时分层定位过程、代码层面的瓶颈（约 2000 行、100 个 tab 重复节点）、优化手段与最终指标对比。",{"path":1215,"title":1216,"description":1217,"category":10,"score":306},"\u002Fknowledge\u002Fteam-documents\u002F02","防篡改水印","在各类管理后台、SaaS 平台或内部系统中，页面水印已经是非常常见的能力：一方面在截图时携带账号、姓名、时间等信息，降低截图外传的风险；另一方面在上传图片或文档预览时，通过水印标记上传者与时间，满足审计和合规需求。",{"path":1219,"title":1220,"description":1221,"category":10,"score":306},"\u002Fknowledge\u002Fteam-documents\u002F22","企业微信 uni-app H5：OAuth 回退白屏与列表缓存","第三方 BI 报表项目，企业微信内嵌 H5，uni-app 编译，history 模式。主页面 BiLink 同时承担静默授权和列表展示，上线后碰到两个问题：授权完清掉 URL 参数，iOS 侧滑返回还是白屏；列表加了缓存以后，刷新行…",{"path":1223,"title":1224,"description":1225,"category":10,"score":306},"\u002Fknowledge\u002Fteam-documents\u002F05","内部插件 \u002F 工具库开发实践","在企业前端项目中，utils、hooks、libs 这类通用能力通常分散在多个仓库，常见问题包括：",{"path":1227,"title":1228,"description":1229,"category":10,"score":306},"\u002Fknowledge\u002Fteam-documents\u002F10","图片上传前的自定义水印实践","项目需要在图片上传前叠加动态水印。水印内容不是固定文案，而是由多个动态元素组成（如时间、地点、业务字段等）。",{"series":1231,"title":1232,"items":1233,"index":306,"prev":1307,"next":1308},"team-documents","team documents",[1234,1238,1240,1244,1246,1248,1252,1256,1260,1264,1266,1270,1274,1275,1279,1283,1287,1291,1295,1297,1301,1305],{"path":1235,"title":1236,"date":1237,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F01","执行价格弹窗：表头 \u002F 表体合并与可配置表格","2024-07-27",{"path":1215,"title":1216,"date":1239,"pinned":17},"2024-01-09",{"path":1241,"title":1242,"date":1243,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F03","键盘弹起导致底部被顶起问题（H5 适配）","2024-09-17",{"path":1207,"title":1208,"date":1245,"pinned":17},"2024-12-12",{"path":1223,"title":1224,"date":1247,"pinned":17},"2021-08-19",{"path":1249,"title":1250,"date":1251,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F06","企业微信与小程序工单问题","2025-10-01",{"path":1253,"title":1254,"date":1255,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F07","企业微信群工具打开缓慢原因分析","2020-04-12",{"path":1257,"title":1258,"date":1259,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F08","属性排序需求","2024-06-16",{"path":1261,"title":1262,"date":1263,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F09","同业主重复单提醒规则","2020-06-07",{"path":1227,"title":1228,"date":1265,"pinned":17},"2021-06-10",{"path":1267,"title":1268,"date":1269,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F11","系统下单（重复单提示框）异常复盘","2023-11-21",{"path":1271,"title":1272,"date":1273,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F12","系统自动更新说明","2025-05-26",{"path":7,"title":8,"date":16,"pinned":17},{"path":1276,"title":1277,"date":1278,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F14","选项卡切换与 Loading 状态封装","2019-11-03",{"path":1280,"title":1281,"date":1282,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F15","移动端返回事件触发两次问题复盘","2021-03-09",{"path":1284,"title":1285,"date":1286,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F16","在线协作表格接入实践","2023-10-27",{"path":1288,"title":1289,"date":1290,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F17","支付中转页面升级实践","2022-10-15",{"path":1292,"title":1293,"date":1294,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F18","中英文输入法下搜索触发冲突复盘","2024-09-01",{"path":1211,"title":1212,"date":1296,"pinned":17},"2026-03-17",{"path":1298,"title":1299,"date":1300,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F20","H5 GPS 定位问题说明","2023-08-31",{"path":1302,"title":1303,"date":1304,"pinned":17},"\u002Fknowledge\u002Fteam-documents\u002F21","vxe-table 行 Hover 联动高亮","2024-08-31",{"path":1219,"title":1220,"date":1306,"pinned":17},"2023-08-17",{"path":1271,"title":1272,"date":1273,"pinned":17},{"path":1276,"title":1277,"date":1278,"pinned":17}]