当前位置: 首页 > article >正文

前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读

在这里插入图片描述
按照加载阶段渲染阶段交互阶段三个维度进行系统性阐述:


在现代 Web 开发中,性能不再是锦上添花,而是决定用户体验与业务成败的关键因素。为了全面监控与优化网页性能,我们可以将性能指标划分为加载阶段渲染阶段、和交互阶段三个维度。本文将详尽解析这些指标的定义、意义、测量方式及其优化手段,帮助你建立一套完整的性能优化思维体系。


一、加载阶段(网络层)

计网(一)计网(二)

加载阶段关注的是从用户发起请求到页面开始显示之间的网络传输与资源处理效率,主要包括以下指标:

1. TTFB(Time to First Byte)首字节时间

  • 定义:用户请求网页后,从浏览器发送请求到接收到服务器返回的第一个字节所花的时间。

  • 意义:反映服务器响应速度与网络延迟

  • 优化手段

    • 使用 CDN 缓存资源,靠近用户加速传输。
    • 减少 HTTP 重定向次数
    • 后端性能优化(数据库查询效率、代码逻辑优化等)。
    • 启用压缩(如 Gzip 或 Brotli)减少响应体大小

2. FP(First Paint)首次绘制

浏览器原理
在这里插入图片描述

  • 定义:浏览器首次将任何可见内容绘制到屏幕上的时间(如背景色、边框)。

  • 意义:标志着页面开始“有动静”,提升用户感知速度。

  • 优化手段

    • 优化关键路径资源,减少阻塞渲染的 CSS 和 JS
    • 减少 DOM 树复杂度,加快解析速度。
    • 利用懒加载减少首屏资源压力。

3. FCP(First Contentful Paint)首次内容绘制

  • 定义:页面渲染出第一个“内容”元素(如文本、图片、SVG)所需的时间。

  • 意义:比 FP 更真实地反映页面初始内容是否快速可见。

  • 优化手段

    • 确保首屏资源优先加载
    • 减少 render-blocking 脚本。
    • 使用预加载(<link rel="preload">加快关键资源获取

二、渲染阶段(视觉层)

渲染阶段衡量页面结构与布局在视觉上的完整性和稳定性,是决定页面可视体验好坏的关键:

1. LCP(Largest Contentful Paint)最大内容绘制

  • 定义:页面中最大可见内容元素(如大图、主标题)渲染完成的时间。

  • 意义:反映用户看到主内容所需的时间,是衡量加载体验的核心指标之一。

  • 优化手段

    • 优先加载最大内容元素资源
    • 压缩图片并使用现代格式(WebP、AVIF)
    • 推迟第三方脚本加载,避免阻塞渲染。
    • 使用 font-display: swap 避免 FOIT(字体不可见现象)。

2. CLS(Cumulative Layout Shift)累计布局偏移

  • 定义:页面在加载过程中布局发生变化的总偏移量。

  • 意义:反映页面视觉稳定性,避免“跳动式”体验

  • 优化手段

    • 为所有图片和媒体指定明确的尺寸(width / heightaspect-ratio)。
    • 避免延迟注入 DOM 内容,尤其是广告、异步内容等。
    • 使用 CSS transform 而不是 top/left 改变位置。

三、交互阶段(用户层)

交互阶段关注的是用户在页面加载完成后与其交互时的响应能力是判断页面是否“流畅”、“好用”的关键

1. TBT(Total Blocking Time)总阻塞时间

  • 定义:FCP 和 TTI(Time to Interactive)之间,主线程被长任务(>50ms)阻塞的总时间

  • 意义:反映页面在加载后到可交互之间的响应延迟

  • 优化手段

    • 拆分长任务:将耗时 JS 拆成多个小任务。
    • 利用 Web Worker 处理计算密集型任务。
    • 减少不必要的第三方脚本
    • 使用异步或延迟加载(async / defer)脚本。

2. INP(Interaction to Next Paint)交互到下次绘制

  • 定义:用户与页面交互(点击、输入等)后,到页面有响应绘制的时间(新版取代 FID)。

  • 意义:衡量页面在真实用户交互下的响应能力。

  • 优化手段

    • 保持主线程空闲:确保交互后能尽快处理事件
    • 减少事件处理逻辑中的阻塞(如同步 DOM 操作)。
    • 避免动画引起帧率降低
    • 通过 requestIdleCallbackrequestAnimationFrame 安排非关键任务。

四、性能指标总结图谱

阶段指标全称关注点优化重点
加载阶段TTFBTime to First Byte网络响应后端性能、CDN、压缩
FPFirst Paint初始绘制渲染优化、关键资源、懒加载
FCPFirst Contentful Paint内容可见性预加载、压缩资源、减 JS 阻塞
渲染阶段LCPLargest Contentful Paint主内容呈现图片优化、字体策略、第三方脚本优化
CLSCumulative Layout Shift页面稳定性固定尺寸、延迟加载控制、动画优化
交互阶段TBTTotal Blocking Time主线程阻塞拆分任务、Web Worker、async 脚本
INPInteraction to Next Paint交互响应空闲时间调度、事件处理优化

五、实践建议

  1. 使用工具进行性能分析

    • Chrome DevTools(Performance 面板)
    • Lighthouse(生成详细性能报告)
    • Web Vitals 扩展
    • Real User Monitoring(如 Google Analytics、Sentry)
  2. 性能优化是一个持续过程

    • 初期重点关注 LCP、CLS、INP 三个 Core Web Vitals。
    • 建立 CI/CD 中的性能预算,防止上线新代码带来性能回退。
    • 在真实用户环境中监控指标,避免仅依赖实验室数据。
  3. 关注移动端性能

    • 移动网络与设备性能差异显著,需优先优化移动端体验。
    • 使用响应式图片、渐进增强策略应对不同环境。

结语

网页性能优化是一场用户体验的修行之路。通过系统性地理解并掌握加载、渲染、交互三个阶段的关键指标,不仅能够精准诊断瓶颈问题,更能在不断迭代中稳步提升整体体验。希望本文能为你在构建高性能网页的旅程中提供实用指南与灵感。


Webpack + Vue 项目的性能分析

在使用 Webpack 构建 Vue 项目时,合理的配置和优化策略可以显著提升页面的加载速度和用户体验。以下是针对 Webpack + Vue 项目的性能分析与优化建议:
Webpack优化前端性能


一、性能指标与优化目标

在 Web 性能优化中,常关注以下关键指标:

  • TTFB(Time to First Byte):首字节到达时间,反映服务器响应速度。
  • FCP(First Contentful Paint):首次内容绘制时间,影响用户对页面加载速度的感知。
  • LCP(Largest Contentful Paint):最大内容绘制时间,衡量主要内容的加载速度。
  • CLS(Cumulative Layout Shift):累计布局偏移,评估页面视觉稳定性。
  • INP(Interaction to Next Paint):交互到下一次绘制的时间,衡量页面的交互响应能力。

优化这些指标的目标是提升页面加载速度、提高用户体验,并减少资源消耗。


二、Webpack 配置优化策略

1. 使用 externals 提取第三方库

将如 Vue、Vue Router、Axios 等第三方库通过 CDN 引入,避免打包进主文件,减小 bundle 体积。(哔哔哔)

配置示例(vue.config.js):

module.exports = {configureWebpack: {externals: {vue: 'Vue','vue-router': 'VueRouter',axios: 'axios'}}
};

HTML 引入示例:

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-router@3.5.1/dist/vue-router.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js"></script>

此策略可显著减小主包体积,提升加载速度。(Vue.js)

2. 使用 SplitChunksPlugin 拆分代码

通过 Webpack 的 SplitChunksPlugin 将公共模块和第三方库拆分,优化缓存利用率。(CSDN博客)

配置示例:

module.exports = {optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'},common: {name: 'common',minChunks: 2,chunks: 'all',priority: 10}}}}
};

此配置将第三方库和公共模块分别打包,提升缓存命中率,减少重复加载。

3. 使用 webpack-bundle-analyzer 分析包体积

利用 webpack-bundle-analyzer 插件可视化分析打包结果,识别体积较大的模块。(CSDN博客)

安装:

npm install --save-dev webpack-bundle-analyzer

配置(vue.config.js):

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;module.exports = {configureWebpack: {plugins: [new BundleAnalyzerPlugin()]}
};

运行打包命令后,将自动打开分析报告,帮助定位优化点。

4. 使用 image-webpack-loader 压缩图片

通过 image-webpack-loader 对图片进行压缩,减小资源体积,提升加载速度。(博客园)

安装:

npm install --save-dev image-webpack-loader

配置(webpack.config.js):

module: {rules: [{test: /\.(png|jpe?g|gif|svg)$/i,use: [{loader: 'url-loader',options: {limit: 8192,name: 'img/[name].[hash:7].[ext]'}},{loader: 'image-webpack-loader',options: {mozjpeg: { progressive: true },optipng: { enabled: true },pngquant: { quality: [0.65, 0.90], speed: 4 },gifsicle: { interlaced: false }}}]}]
}

此配置可自动压缩图片资源,减小加载体积。

5. 使用 babel-plugin-transform-runtime 减少冗余代码

通过 babel-plugin-transform-runtime 插件避免 Babel 转译过程中生成的重复辅助函数,减小代码体积。(博客园)

安装:

npm install --save-dev babel-plugin-transform-runtime
npm install --save @babel/runtime

配置(.babelrc):

{"plugins": ["@babel/plugin-transform-runtime"]
}

此配置可减少重复代码,优化包体积。


三、构建后效果分析

通过上述优化措施,构建后的 Vue 项目将具有以下优势:

  • 减小主包体积:通过 externals 和代码拆分,主包体积显著减小,提升加载速度。
  • 优化缓存利用:公共模块和第三方库拆分后,浏览器可更有效地缓存资源,减少重复加载。
  • 提升构建速度:并行压缩和避免冗余代码减少了构建时间,提高开发效率。
  • 增强用户体验:页面加载更快,交互更流畅,提升用户满意度。(Vue.js, Hangge)

例如,通过 externals 提取 Vue、Vue Router 和 Axios 后,主包体积可减少数百 KB,首次加载时间明显缩短。(哔哔哔)


通过合理配置 Webpack 和优化策略,可以显著提升 Vue 项目的性能。如果您需要进一步的帮助,如配置示例或优化建议,欢迎继续提问。


城市灾害应急管理系统配置

压缩(压缩比率小于0.8)

在面试中,向面试官介绍 CompressionWebpackPlugin 的配置及其在 Webpack 构建 Vue 项目中的作用,体现了您对前端性能优化的深入理解。以下是对该插件配置的详细解读及其影响:


CompressionWebpackPlugin 配置详解
new CompressionPlugin({cache: false,                   // 不启用文件缓存test: /\.(js|css|html)?$/i,     // 匹配要压缩的文件类型filename: '[path].gz[query]',   // 压缩后的文件名格式algorithm: 'gzip',              // 使用 gzip 压缩算法minRatio: 0.8                   // 压缩率小于 0.8 才会压缩
})
配置项说明
  • cache: false:禁用文件缓存,确保每次构建都重新压缩资源,适用于频繁变更的项目。

  • test: /\.(js|css|html)?$/i:指定匹配的文件类型,包括 JavaScript、CSS 和 HTML 文件,确保这些资源被压缩。

  • filename: '[path].gz[query]':定义压缩后文件的命名规则,保持原始路径和查询参数,添加 .gz 后缀,便于服务器识别和处理。

  • algorithm: 'gzip':使用 gzip 算法进行压缩,这是目前广泛支持的压缩格式,兼容性良好。

  • minRatio: 0.8:仅当压缩后的文件大小与原始文件大小的比率小于 0.8 时才进行压缩,避免对压缩效果不明显的文件进行无效操作。


构建后的影响
  1. 生成 .gz 压缩文件:构建过程中,会为匹配的资源生成对应的 .gz 文件,例如 app.js 会生成 app.js.gz

  2. 减小资源体积:压缩后的文件体积显著减小,通常可减少 70% 以上,提升页面加载速度。(jecyu.github.io)

  3. 提升首屏加载性能:减小的资源体积减少了网络传输时间,尤其在网络状况不佳时效果更为明显。

  4. 服务器配置要求:需要服务器(如 Nginx)配置支持 gzip 压缩,优先提供 .gz 文件给支持的客户端。


示例:Nginx 配置支持 gzip
gzip on;
gzip_static on;
gzip_types text/plain application/javascript text/css text/html;

上述配置启用 Nginx 的 gzip 压缩功能,并指定压缩的 MIME 类型,确保客户端请求时能获取到压缩后的资源。
在这里插入图片描述


总结

通过在 Webpack 构建过程中使用 CompressionWebpackPlugin 进行 gzip 压缩,可以显著减小资源体积,提升页面加载性能。在面试中,展示您对该插件配置的理解,以及如何与服务器配置协同工作,体现了您在前端性能优化方面的专业能力。(CSDN博客)

分割

在面试中,向面试官清晰地解释 Webpack 的代码分割(Code Splitting)配置,尤其是 optimization.splitChunks 的使用,能够展示您对前端性能优化的深入理解。以下是对您提供的配置的详细解读:


📌 代码分割的目的

Webpack 的代码分割主要有以下几个目的:

  1. 提升加载性能:将代码拆分为多个小模块,按需加载,减少初始加载时间。
  2. 优化缓存策略:将不常变动的库(如第三方依赖)与业务代码分离,利用浏览器缓存机制,减少重复加载。
  3. 降低资源冗余:避免多个入口文件加载相同的模块,减少重复代码。

⚙️ 配置详解
optimization: {splitChunks: {chunks: 'all',cacheGroups: {libs: {name: 'chunk-libs',test: /[\\/]node_modules[\\/]/,priority: 10,chunks: 'initial'},elementUI: {name: 'chunk-elementUI',priority: 20,test: /[\\/]node_modules[\\/]_?element-ui(.*)/},commons: {name: 'chunk-commons',test: resolve('src/components'),minChunks: 3,priority: 5,reuseExistingChunk: true}}}
}
1. chunks: 'all'

此配置表示对所有类型的代码(同步和异步)进行分割。相比于默认的 async,它能更全面地优化代码结构,提升加载效率。

2. cacheGroups

cacheGroups 用于定义如何将模块分组到不同的 chunk 中。每个分组都有自己的规则和优先级。(Rspack)

a. libs 分组
  • name: 'chunk-libs':生成的 chunk 名称为 chunk-libs
  • test: /[\\/]node_modules[\\/]/:匹配所有在 node_modules 目录下的模块。
  • priority: 10:优先级为 10,确保在默认分组前处理。
  • chunks: 'initial':仅处理初始加载的模块,避免将异步模块打包进来。

此配置将第三方库(如 Vue、Axios 等)打包到一个独立的 chunk 中,便于缓存和管理。

b. elementUI 分组
  • name: 'chunk-elementUI':生成的 chunk 名称为 chunk-elementUI
  • test: /[\\/]node_modules[\\/]_?element-ui(.*)/:匹配 element-ui 相关的模块,兼容不同的包管理方式(如 cnpm)。
  • priority: 20:优先级高于 libs,确保 element-ui 单独打包。

element-ui 单独打包,有助于更好地利用缓存,避免频繁更新导致的缓存失效。

c. commons 分组
  • name: 'chunk-commons':生成的 chunk 名称为 chunk-commons
  • test: resolve('src/components'):匹配 src/components 目录下的模块。
  • minChunks: 3:当一个模块被至少三个 chunk 引用时,才会被提取到 chunk-commons 中。
  • priority: 5:优先级为 5,低于 libselementUI
  • reuseExistingChunk: true:如果当前 chunk 包含已被提取的模块,则复用已有的 chunk,避免重复打包。

此配置有助于提取项目中重复使用的组件,减少代码冗余。


🎯 面试官可能提出的问题及回答
Q1: 为什么要将 element-ui 单独打包?

Aelement-ui 是一个体积较大的 UI 组件库,且更新频率较低。将其单独打包可以利用浏览器的缓存机制,减少用户重复下载,提高加载速度。此外,单独打包还便于在需要时进行按需加载,优化首屏加载性能。

Q2: minChunks: 3 的作用是什么?

AminChunks: 3 表示当一个模块被至少三个 chunk 引用时,才会被提取到公共的 chunk-commons 中。这样可以避免将只被少数页面使用的模块提取出来,导致额外的 HTTP 请求,影响加载性能。

Q3: 如何设置 priority,它的作用是什么?

Apriority 用于设置各个 cacheGroups 的处理优先级。当一个模块符合多个分组的条件时,优先级高的分组会先处理。例如,elementUI 的优先级为 20,高于 libs 的 10,因此 element-ui 模块会被打包到 chunk-elementUI 中,而不是 chunk-libs

Q4: reuseExistingChunk: true 有什么作用?

AreuseExistingChunk: true 表示如果当前 chunk 包含的模块已经被提取到其他 chunk 中,则直接复用已有的 chunk,避免重复打包。这有助于减少最终生成的文件体积,提升加载效率。


✅ 总结

通过合理配置 Webpack 的 splitChunks,可以有效地优化项目的加载性能和缓存策略。在面试中,清晰地解释各个配置项的作用,以及它们如何协同工作,能够展示您对前端构建工具的深入理解和实际应用能力。

如需进一步了解 Webpack 的其他优化策略,欢迎继续提问。


要提升页面首屏加载时间,可以从懒加载、代码分割和缓存策略三方面入手,协同优化资源加载和渲染流程,从而显著改善用户体验。以下是具体的优化建议:


懒加载、代码分割、缓存、压缩和网络优化

要全面提升 Vue + Webpack 项目的首屏加载性能,可以从以下五个方面进行优化:懒加载、代码分割、缓存策略、资源压缩和网络优化。下面将逐一详解,并提供相应的配置示例。


1. 懒加载(Lazy Loading)

懒加载可以延迟加载非首屏必需的资源,减少初始加载体积。

Vue 组件懒加载

使用 Vue 的异步组件功能,结合 Webpack 的动态导入,实现组件的按需加载:(极客日志)

import { defineAsyncComponent } from 'vue';const AsyncComponent = defineAsyncComponent(() => import('./components/AsyncComponent.vue'));

在 Vue Router 中,也可以通过动态导入实现路由组件的懒加载:

const routes = [{path: '/about',component: () => import('./views/About.vue'),},
];
图片懒加载

对于图片资源,可以使用 v-lazy 指令(需引入相应插件)或原生的 loading="lazy" 属性实现懒加载:

<img v-lazy="imageSrc" alt="Lazy Loaded Image" />
<!-- 或 -->
<img src="image.jpg" loading="lazy" alt="Lazy Loaded Image" />

2. 代码分割(Code Splitting)

代码分割可以将应用拆分为多个小块,实现按需加载,提升加载效率。

Webpack 配置示例

vue.config.js 中配置 splitChunks:(xiaocuo.wang)

module.exports = {configureWebpack: {optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'chunk-vendors',priority: -10,chunks: 'initial',},common: {name: 'chunk-common',minChunks: 2,priority: -20,chunks: 'initial',reuseExistingChunk: true,},},},},},
};

此配置将第三方库和公共模块分别打包,减少主包体积。(Oryoy)


3. 缓存策略(Caching Strategy)

合理的缓存策略可以减少重复加载,提高加载速度。

文件命名带 Hash

在 Webpack 的输出配置中,使用 [contenthash]

output: {filename: '[name].[contenthash].js',chunkFilename: '[name].[contenthash].js',
},

这样可以在文件内容变化时生成新的文件名,确保浏览器加载最新资源。

使用 Service Worker

引入 Service Worker 实现离线缓存和资源预缓存,提升加载性能。


4. 资源压缩(Compression)

压缩资源可以减少文件体积,加快传输速度。

Gzip 压缩

使用 compression-webpack-plugin 插件进行 Gzip 压缩:(Oryoy)

const CompressionWebpackPlugin = require('compression-webpack-plugin');module.exports = {configureWebpack: config => {if (process.env.NODE_ENV === 'production') {config.plugins.push(new CompressionWebpackPlugin({algorithm: 'gzip',test: /\.(js|css|html)$/,threshold: 10240,minRatio: 0.8,}));}},
};
图片压缩

使用 image-webpack-loader 对图片进行压缩:(Oryoy)

module.exports = {chainWebpack: config => {config.module.rule('images').use('image-webpack-loader').loader('image-webpack-loader').options({mozjpeg: { progressive: true, quality: 65 },optipng: { enabled: true },pngquant: { quality: [0.65, 0.90], speed: 4 },gifsicle: { interlaced: false },});},
};

5. 网络优化(Network Optimization)

优化网络请求可以进一步提升加载性能。

使用 CDN

将第三方库通过 CDN 引入,减少主包体积:(Oryoy)

module.exports = {configureWebpack: {externals: {vue: 'Vue','vue-router': 'VueRouter',axios: 'axios',},},
};

index.html 中引入 CDN 链接:(思否)

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-router@3.5.1/dist/vue-router.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js"></script>
启用 HTTP/2

在服务器配置中启用 HTTP/2,利用其多路复用特性,加快资源加载速度。(Oryoy)


通过以上优化策略的综合应用,可以显著提升 Vue + Webpack 项目的首屏加载性能,改善用户体验。

相关文章:

前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读

按照加载阶段、渲染阶段和交互阶段三个维度进行系统性阐述&#xff1a; 在现代 Web 开发中&#xff0c;性能不再是锦上添花&#xff0c;而是决定用户体验与业务成败的关键因素。为了全面监控与优化网页性能&#xff0c;我们可以将性能指标划分为加载阶段、渲染阶段、和交互阶段…...

RDD实现单词计数

Scala&#xff08;Spark Shell&#xff09;方法 如果你在 spark-shell&#xff08;Scala 环境&#xff09;中运行&#xff1a; 1. 启动 Spark Shell spark-shell &#xff08;确保 Spark 已安装&#xff0c;PATH 配置正确&#xff09; 2. 执行单词统计 // 1. 读取文件&am…...

Java快速上手之实验七

1&#xff0e;编写鼠标事件响应程序MouseEventDemo.java&#xff0c;当鼠标进入和离开窗口时给出相应显示&#xff0c;当按下、弹起时显示当前鼠标的坐标值。 2&#xff0e;编写鼠标事件响应程序MouseMotionEventDemo.java&#xff0c;当鼠标在窗口内移动时显示鼠标的坐标值。 …...

C++八股——函数对象

文章目录 一、仿函数二、Lambda表达式三、bind四、function 一、仿函数 仿函数&#xff1a;重载了操作符()的类&#xff0c;也叫函数对象 特征&#xff1a;可以有状态&#xff0c;通过类的成员变量来存储&#xff1b;&#xff08;有状态的函数对象称之为闭包&#xff09; 样…...

可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)

1. 题目 描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树&#xff0c;不对序列化之后的字符串进行约束&#xff0c;但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉树的序列化(Serialize)是指&#xff1a;把一棵二叉树按照某种遍…...

Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录

注&#xff1a;本文为 “Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录” 相关文章合辑。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 Vivado 开发流程&#xff08;手把手教学实例&#xff09;&#xff08;FPGA&#xff09; 不完美先生 于 2018-04-…...

每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)

5.LC 零矩阵(中等) 面试题 01.08. 零矩阵 - 力扣&#xff08;LeetCode&#xff09; 思想: 法一: 利用两个集合分别储存要清0的行和列索引 另外两种原地优化空间的做法暂时不是目前刷题目标&#xff0c;故不考虑 代码 c: class Solution { public:void setZeroes(vector&l…...

Javascript:数组和函数

数组 创建数组 使用new创建 let arrnew array(数组大小); 直接赋值创建 let Arr2[];let Arr3[1,A,"HELLLO"]; 这里JS的数组里面的元素属性可以各不相同 演示代码 <script>let Arr1new Array(5);let Arr2[];let Arr3[1,A,"HELLLO"];console.…...

无锁秒杀系统设计:基于Java的高效实现

引言 在电商促销活动中&#xff0c;秒杀场景是非常常见的。为了确保高并发下的数据一致性、性能以及用户体验&#xff0c;本文将介绍几种不依赖 Redis 实现的无锁秒杀方案&#xff0c;并提供简化后的 Java 代码示例和架构图。 一、基于数据库乐观锁机制 ✅ 实现思路&#xf…...

NCCL N卡通信机制

转自我的博客&#xff1a;https://shar-pen.github.io/2025/05/05/torch-distributed-series/nccl_communication/ from IPython.display import Image import logging import torch import torch.distributed as distpytorch 分布式相关api torch.distributed.init_process_…...

Alpha3DCS公差分析系统_国产替代的3D精度管控方案-SNK施努卡

随着智能制造发展规划的深入推进&#xff0c;工业软件国产化替代已上升为国家战略。在公差分析这一细分领域&#xff0c;长期被国外软件垄断的局面正被打破。 苏州施努卡自主研发的Alpha3DCS&#xff0c;凭借完全自主知识产权和军工级安全标准&#xff0c;成为国内实现三维公差…...

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中&#xff0c;设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议&#xff0c;分别应用于不同的场景。为了实现这两种协议的相互转换&#xff0c;Profibus …...

深入理解 Java 适配器模式:架构设计中的接口转换艺术

一、适配器模式的核心概念与设计思想 在软件开发的演进过程中&#xff0c;我们经常会遇到这样的场景&#xff1a;系统需要整合一个现有的类&#xff0c;但其接口与系统所需的接口不兼容。此时&#xff0c;适配器模式&#xff08;Adapter Pattern&#xff09;就成为解决接口不匹…...

skopeo工具详解

Skopeo 是一个功能强大的命令行工具&#xff0c;用于操作容器镜像及镜像仓库&#xff0c;支持多种容器镜像格式&#xff08;如 Docker、OCI&#xff09;&#xff0c;能够在不下载完整镜像的情况下直接与远程仓库交互。以下是其主要功能、使用场景及操作指南&#xff1a; 一、核…...

vue 中的ref

vue 中的ref vue 中的ref 1. ​​ref​​ ** 的基本作用** 在 Vue 中&#xff0c;ref 是用来获取 DOM 元素或者组件实例的一种方式。对于 <el-form> 组件&#xff0c;通过 ref 可以获取到该表单组件的实例&#xff0c;进而调用表单组件提供的各种方法和访问其属性。 …...

什么是静态住宅IP?为什么静态住宅IP能提高注册通过率?

在全球最大的电商平台亚马逊上&#xff0c;竞争异常激烈&#xff0c;每一位卖家都渴望顺利通过平台的审核并成功开设店铺。在这个过程中&#xff0c;选择合适的IP地址成为了一个容易被忽视但至关重要的因素。静态住宅IP作为一种特殊的网络地址类型&#xff0c;对于提升亚马逊卖…...

数据库审计如何维护数据完整性:7 种工具和技术

在当今的数字环境中&#xff0c;数据库审计是维护数据完整性的一个重要方面。本文探讨了专业人员用来确保数据库系统安全性和可靠性的基本工具和技术。通过专家的独到见解&#xff0c;读者将发现用于监控活动、实施访问控制以及利用区块链等尖端技术进行防篡改审计的行之有效的…...

langchain 接入国内搜索api——百度AI搜索

为什么使用百度AI搜索 学习langchain的过程中&#xff0c;遇到使用search api的时候&#xff0c;发现langchain官方文档中支持的搜索工具大多是国外的&#xff0c;例如google search或bing search&#xff0c;收费不说&#xff0c;很多还连接不上&#xff08;工具 | LangChain…...

0基础 | L298N电机驱动模块 | 使用指南

引言 在嵌入式系统开发中&#xff0c;电机驱动是一个常见且重要的功能。L298N是一款高电压、大电流电机驱动芯片&#xff0c;广泛应用于各种电机控制场景&#xff0c;如直流电机的正反转、调速&#xff0c;以及步进电机的驱动等。本文将详细介绍如何使用51单片机来控制L298N电…...

【金仓数据库征文】金仓数据库:创新驱动,引领数据库行业新未来

一、引言 在数字化转型的时代洪流中&#xff0c;数据已跃升为企业的核心资产&#xff0c;宛如企业运营与发展的 “数字命脉”。从企业日常运营的精细化管理&#xff0c;到战略决策的高瞻远瞩制定&#xff1b;从客户关系管理的深度耕耘&#xff0c;到供应链优化的全面协同&…...

大模型系列(五)--- GPT3: Language Models are Few-Shot Learners

论文链接&#xff1a; Language Models are Few-Shot Learners 点评&#xff1a; GPT3把参数规模扩大到1750亿&#xff0c;且在少样本场景下性能优异。对于所有任务&#xff0c;GPT-3均未进行任何梯度更新或微调&#xff0c;仅通过纯文本交互形式接收任务描述和少量示例。然而&…...

Qt QCheckBox 使用

1.开发背景 Qt QCheckBox 是勾选组件&#xff0c;具体使用方法可以参考 Qt 官方文档&#xff0c;这里只是记录使用过程中常用的方法示例和遇到的一些问题。 2.开发需求 QCheckBox 使用和踩坑 3.开发环境 Window10 Qt5.12.2 QtCreator4.8.2 4.功能简介 4.1 简单接口 QChec…...

Java SolonMCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解

一、MCP简介 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是由Anthropic公司于2024年推出的开放标准&#xff0c;旨在统一AI模型与外部数据源、工具之间的通信方式。MCP提供了一套规范化的接口&#xff0c;使大语言模型&#xff08;LLM&…...

系统架构-面向服务架构(SOA)

概述 服务指的是系统对外提供的功能集 从应用的角度定义&#xff0c;可以认为SOA是一种应用框架&#xff0c;将日常业务划分为单独的业务功能和流程&#xff08;即服务&#xff09;&#xff0c;SOA使用户可以构建、部署和整合这些服务。 从软件的基本原理定义&#xff0c;SO…...

AJAX原理

AJAX使用XHR 对象和服务器进行数据交互 XHR <p class"my-p"></p><script>const xhr new XMLHttpRequest()xhr.open(GET,http://hmajax.itheima.net/api/province)xhr.addEventListener(loadend,()>{// console.log(xhr.response)const data …...

Paddle Serving|部署一个自己的OCR识别服务器

前言 之前使用C部署了自己的OCR识别服务器&#xff0c;Socket网络传输部分是自己写的&#xff0c;回过头来一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本来就有自己的OCR服务器项目&#xff0c;叫PaddleServing&#xff0c;这里记录一下部署过程。 1 下载依赖环境 1.1 …...

Web开发—Vue工程化

文章目录 前言 Vue工程化 一、介绍 二、环境准备 1.介绍create-vue 2.NodeJS安装 3.npm介绍 三&#xff0c;Vue项目创建 四&#xff0c;项目结构 五&#xff0c;启动项目 六&#xff0c;Vue项目开发流程 七&#xff0c;API风格 前言 Vue工程化 前面我们在介绍Vue的时候&#…...

Word如何制作三线表格

1.需求 将像这样的表格整理成论文中需要的三线表格。 2.直观流程 选中表格 --> 表格属性中的边框与底纹B --> 在设置中选择无&#xff08;重置表格&#xff09;–> 确定 --> 选择第一行&#xff08;其实是将第一行看成独立表格了&#xff0c;为了设置中线&…...

毫米波雷达点云SLAM系统

毫米波雷达点云SLAM系统 基于毫米波雷达点云数据的三维SLAM(同步定位与建图)系统&#xff0c;用于狭窄环境如室内和地下隧道的三维建图。 项目概述 本项目实现了一个完整的SLAM系统&#xff0c;利用毫米波雷达采集的点云数据进行实时定位和环境三维重建。系统特别针对狭窄空…...

5 从众效应

引言 有一个成语叫做三人成虎&#xff0c;意思是说&#xff0c;有三个人谎报市上有老虎&#xff0c;听者就信以为真。这种人在社会群体中&#xff0c;容易不加分析地接受大多数人认同的观点或行为的心理倾向&#xff0c;被称为从众效应。 从众效应&#xff08;Bandwagon Effec…...