Vue 样式不一致问题全面分析与解决方案

在这里插入图片描述

文章目录

    • 1. 问题概述
      • 1.1 问题表现
      • 1.2 问题影响
    • 2. 根本原因分析
      • 2.1 Vue 的渲染机制与样式加载时机
      • 2.2 Scoped CSS 的工作原理
      • 2.3 CSS 模块化与作用域隔离
      • 2.4 样式加载顺序问题
      • 2.5 热重载(HMR)与样式更新
    • 3. 解决方案
      • 3.1 确保样式加载顺序
        • 3.1.1 预加载关键 CSS
        • 3.1.2 控制全局样式顺序
        • 3.1.3 使用 CSS 命名约定
      • 3.2 优化 Scoped CSS 使用
        • 3.2.1 谨慎使用深度选择器
        • 3.2.2 处理动态内容样式
      • 3.3 CSS 架构最佳实践
        • 3.3.1 分层 CSS 结构
        • 3.3.2 采用设计令牌系统
      • 3.4 构建工具配置优化
        • 3.4.1 Webpack 配置调整
        • 3.4.2 Vite 配置优化
      • 3.5 服务端渲染(SSR)特殊处理
      • 3.6 性能与缓存策略
    • 4. 高级解决方案
      • 4.1 CSS-in-JS 集成
        • 4.1.1 Vue 中使用 styled-components
        • 4.1.2 性能优化建议
      • 4.2 原子化 CSS 方案
        • 4.2.1 Tailwind CSS 集成
        • 4.2.2 性能优化
      • 4.3 微前端架构下的样式隔离
        • 4.3.1 Shadow DOM 方案
        • 4.3.2 CSS 命名空间策略
    • 5. 调试与测试策略
      • 5.1 样式调试技巧
        • 5.1.1 Chrome 开发者工具高级用法
        • 5.1.2 专用调试工具
      • 5.2 自动化视觉回归测试
        • 5.2.1 使用 Storybook 进行视觉测试
        • 5.2.2 集成 Percy 或 Applitools
    • 6. 性能优化专项
      • 6.1 CSS 性能关键指标
      • 6.2 关键 CSS 提取
        • 6.2.1 使用 critical 库提取关键 CSS
        • 6.2.2 预加载关键资源
      • 6.3 CSS 交付优化
        • 6.3.1 HTTP/2 服务器推送
        • 6.3.2 智能缓存策略
    • 7. 未来趋势与新兴方案
      • 7.1 CSS Houdini
      • 7.2 容器查询
      • 7.3 层叠分层
    • 8. 总结与最佳实践清单
      • 8.1 样式管理黄金法则
      • 8.2 Vue 项目样式检查清单
      • 8.3 推荐技术栈组合

在这里插入图片描述

1. 问题概述

在 Vue.js 开发过程中,开发者经常会遇到一个令人困扰的问题:页面样式需要刷新后才能正确显示,否则会出现样式混乱、布局错位等问题。这种现象不仅影响开发体验,更严重的是可能导致生产环境中的用户体验下降。本文将全面分析这一问题的根源,并提供系统的解决方案。

1.1 问题表现

Vue 样式不一致问题通常表现为以下几种形式:

  1. 初始加载样式错乱:页面首次加载时,某些组件样式不正确,但刷新后恢复正常
  2. 动态内容样式失效:通过 v-if、v-show 或动态绑定的内容样式不生效
  3. CSS 作用域混乱:scoped CSS 没有按预期工作,样式泄露或失效
  4. 第三方组件库样式问题:使用 UI 库时样式显示不正常
  5. 过渡动画异常:CSS 过渡或动画在首次渲染时表现异常

1.2 问题影响

  • 开发效率降低:开发者需要频繁刷新页面验证样式
  • 用户体验下降:用户可能看到短暂但明显的样式闪烁
  • 测试复杂性增加:难以捕捉和复现样式相关问题
  • 项目维护困难:样式问题可能随着项目规模扩大而加剧

2. 根本原因分析

在这里插入图片描述

2.1 Vue 的渲染机制与样式加载时机

Vue 应用的样式问题往往源于其独特的渲染机制:

Browser Vue DOM CSSOM 加载Vue应用 创建虚拟DOM 挂载真实DOM 请求样式计算 返回计算后样式 渲染页面 Browser Vue DOM CSSOM

在这个过程中,关键问题点在于:

  1. CSS 加载与 DOM 渲染的竞争条件:浏览器解析 HTML 时遇到 CSS 会暂停 DOM 构建去加载 CSS
  2. 异步组件与样式加载顺序:异步加载的组件可能导致其样式晚于 DOM 渲染
  3. Vue 的渐进式渲染特性:Vue 不是一次性渲染所有内容,可能导致样式计算不完整

2.2 Scoped CSS 的工作原理

Vue 的 scoped CSS 是通过 PostCSS 实现的,它会为组件模板和样式添加唯一属性:

<style scoped>
.example {color: red;
}
</style><template><div class="example">hi</div>
</template>

编译后:

<style>
.example[data-v-f3f3eg9] {color: red;
}
</style><template><div class="example" data-v-f3f3eg9>hi</div>
</template>

潜在问题:

  1. 属性选择器优先级[data-v-xxx] 选择器比类选择器优先级高,可能导致样式覆盖异常
  2. 动态内容处理:通过 v-html 或第三方库插入的内容可能无法获得 scoped 属性
  3. 性能影响:大量属性选择器会增加样式计算负担

2.3 CSS 模块化与作用域隔离

现代前端开发中常见的 CSS 模块化方案:

方案优点缺点Vue 支持情况
Scoped CSS简单易用,Vue 原生支持深度选择器语法特殊,性能一般内置支持
CSS Modules真正的局部作用域,可预测性强配置稍复杂,类名转换可能影响调试需要配置
CSS-in-JS极致灵活,动态样式强大运行时开销,学习曲线陡峭需集成库
Utility-First高度可复用,性能优秀需要记忆类名,设计系统耦合Tailwind 等

2.4 样式加载顺序问题

浏览器按照以下顺序处理样式:

  1. 解析 <link> 引入的外部样式表
  2. 解析 <style> 标签中的内部样式
  3. 解析内联样式
  4. 应用用户代理样式(浏览器默认样式)

Vue 应用中常见问题:

  • 单文件组件样式顺序:多个 SFC 的 <style> 标签最终合并顺序不确定
  • 异步加载样式:通过 import() 动态加载的组件样式可能晚于 DOM 渲染
  • 样式覆盖竞争:全局样式与局部样式加载顺序影响最终表现

2.5 热重载(HMR)与样式更新

Vue CLI 和 Vite 都支持热重载,但处理方式不同:

  • Vue CLI:使用 webpack 的 style-loader 注入样式,更新时添加新样式而非替换
  • Vite:原生 ESM 支持,样式文件作为独立模块更新

热重载可能导致的问题:

  1. 样式重复:多次修改后页面中积累多个样式标签
  2. 状态不一致:组件保持状态但样式更新导致视觉不一致
  3. 源映射错位:开发工具中样式定位不准

3. 解决方案

3.1 确保样式加载顺序

3.1.1 预加载关键 CSS

在 index.html 中提前加载关键 CSS:

<head><link rel="preload" href="/css/main.css" as="style"><link rel="stylesheet" href="/css/main.css">
</head>
3.1.2 控制全局样式顺序

在 main.js 中明确导入顺序:

// 先导入第三方样式
import 'normalize.css'
// 然后导入全局样式
import '@/styles/global.css'
// 最后导入Vue应用
import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')
3.1.3 使用 CSS 命名约定

采用 BEM 等命名约定避免冲突:

/* Block Element Modifier 约定 */
.user-card { /* 块 */ }
.user-card__header { /* 元素 */ }
.user-card--dark { /* 修饰符 */ }

3.2 优化 Scoped CSS 使用

3.2.1 谨慎使用深度选择器

避免过度使用 /deep/::v-deep

/* 不推荐 */
::v-deep .third-party-class {color: red;
}/* 推荐 - 添加自己的修饰类 */
.third-party-wrapper--custom .third-party-class {color: red;
}
3.2.2 处理动态内容样式

对于 v-html 或第三方组件的内容:

<template><div class="dynamic-content" v-html="htmlContent"></div>
</template><style scoped>
/* 使用全局样式配合scoped父容器 */
.dynamic-content ::v-deep p {margin: 1em 0;
}
</style><style>
/* 或者在全局样式中限定范围 */
.dynamic-content-container p {margin: 1em 0;
}
</style>

3.3 CSS 架构最佳实践

3.3.1 分层 CSS 结构

推荐的项目结构:

src/styles/base/       # 基础样式(重置、变量等)_reset.scss_variables.scsscomponents/ # 组件样式_buttons.scss_forms.scsslayouts/    # 布局样式_header.scss_footer.scssutilities/  # 工具类_spacing.scss_typography.scssmain.scss   # 主入口文件
3.3.2 采用设计令牌系统

定义统一的样式变量:

// _variables.scss
:root {--color-primary: #4fc08d;--color-secondary: #35495e;--spacing-unit: 8px;--border-radius: 4px;--font-size-base: 16px;
}// 组件中使用
.button {padding: calc(var(--spacing-unit) * 2);background-color: var(--color-primary);border-radius: var(--border-radius);
}

3.4 构建工具配置优化

3.4.1 Webpack 配置调整
// vue.config.js
module.exports = {css: {extract: process.env.NODE_ENV === 'production',sourceMap: true,loaderOptions: {scss: {additionalData: `@import "~@/styles/variables.scss";`}}},chainWebpack: config => {// 确保样式加载顺序config.module.rule('scss').oneOf('vue').use('css-loader').tap(options => ({...options,importLoaders: 2 // 确保@import的样式也经过预处理}))}
}
3.4.2 Vite 配置优化
// vite.config.js
export default defineConfig({css: {preprocessorOptions: {scss: {additionalData: `@import "@/styles/variables.scss";`}},postcss: {plugins: [require('autoprefixer'),// 生产环境压缩process.env.NODE_ENV === 'production' && require('cssnano')].filter(Boolean)}},build: {cssCodeSplit: true, // 启用CSS代码分割rollupOptions: {output: {assetFileNames: 'assets/[name]-[hash].[ext]'}}}
})

3.5 服务端渲染(SSR)特殊处理

对于 Nuxt.js 或自定义 SSR:

// nuxt.config.js
export default {build: {extractCSS: true, // 提取CSS为独立文件optimization: {splitChunks: {layouts: true,pages: true,commons: true}}},render: {bundleRenderer: {shouldPreload: (file, type) => {return ['script', 'style', 'font'].includes(type)}}}
}

3.6 性能与缓存策略

配置长期缓存同时确保样式更新:

// webpack.config.js
module.exports = {output: {filename: '[name].[contenthash:8].js',chunkFilename: '[name].[contenthash:8].chunk.js'},plugins: [new MiniCssExtractPlugin({filename: '[name].[contenthash:8].css',chunkFilename: '[name].[contenthash:8].chunk.css'})]
}

4. 高级解决方案

4.1 CSS-in-JS 集成

4.1.1 Vue 中使用 styled-components
npm install styled-components vue3-styled-components
import { createApp } from 'vue'
import styled from 'vue3-styled-components'const Button = styled.button`background: ${props => props.primary ? '#4fc08d' : 'white'};color: ${props => props.primary ? 'white' : '#4fc08d'};font-size: 1em;padding: 0.5em 1em;border: 2px solid #4fc08d;border-radius: 4px;
`const app = createApp({template: `<Button>Normal</Button><Button primary>Primary</Button>`
})app.component('Button', Button)
app.mount('#app')
4.1.2 性能优化建议
  1. 避免频繁样式更新:将动态样式提取为独立组件
  2. 使用 CSS 变量:减少运行时计算
  3. 代码分割:按需加载样式

4.2 原子化 CSS 方案

4.2.1 Tailwind CSS 集成
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
// tailwind.config.js
module.exports = {content: ['./index.html','./src/**/*.{vue,js,ts,jsx,tsx}'],theme: {extend: {},},plugins: [],
}
/* src/styles/main.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
4.2.2 性能优化
  1. PurgeCSS 配置:移除未使用的样式
  2. JIT 模式:即时生成所需样式
  3. 分层构建:将基础样式与组件样式分离

4.3 微前端架构下的样式隔离

4.3.1 Shadow DOM 方案
// 创建使用Shadow DOM的自定义元素
class MicroApp extends HTMLElement {constructor() {super()this.attachShadow({ mode: 'open' })}connectedCallback() {this.shadowRoot.innerHTML = `<style>/* 样式将被隔离在Shadow DOM内 */h1 { color: red; }</style><h1>Micro Frontend</h1>`}
}customElements.define('micro-app', MicroApp)
4.3.2 CSS 命名空间策略
// 为每个微前端应用定义唯一前缀
$ns: 'mf-app1-';.#{$ns}button {// 样式规则
}.#{$ns}form {// 样式规则
}

5. 调试与测试策略

5.1 样式调试技巧

5.1.1 Chrome 开发者工具高级用法
  1. 强制元素状态:hover, :active 等状态调试
  2. 跟踪样式计算:Computed 面板查看最终样式
  3. CSS 覆盖分析:Styles 面板中的覆盖标识
  4. 动画调试:Animations 面板检查 CSS 动画
5.1.2 专用调试工具
  1. CSS Stats:分析 CSS 复杂度
  2. PurgeCSS 在线检测:识别未使用的样式
  3. BrowserStack:跨浏览器样式测试

5.2 自动化视觉回归测试

5.2.1 使用 Storybook 进行视觉测试
npx sb init
npm install @storybook/addon-storyshots puppeteer --save-dev
// .storybook/preview.js
export const parameters = {actions: { argTypesRegex: "^on[A-Z].*" },controls: {matchers: {color: /(background|color)$/i,date: /Date$/,},},options: {storySort: {order: ['Introduction', 'Components', 'Pages'],},},
}
5.2.2 集成 Percy 或 Applitools
// percy.config.js
module.exports = {version: 2,snapshot: {widths: [1280, 375], // 桌面和移动端断点minHeight: 1024,percyCSS: `.v-toolbar { display: none; }` // 隐藏动态元素}
}

6. 性能优化专项

6.1 CSS 性能关键指标

指标优秀需要改进工具测量方法
CSS 文件大小<50KB>100KBWebpack Bundle Analyzer
CSS 规则数量<5,000>10,000Chrome Coverage
未使用CSS比例<20%>40%PurgeCSS 分析
样式重计算时间<1ms>3msChrome Performance 面板
关键CSS比例>70%<50%Critical CSS 工具

6.2 关键 CSS 提取

6.2.1 使用 critical 库提取关键 CSS
npm install critical --save-dev
// postbuild.js
const critical = require('critical')critical.generate({base: 'dist/',src: 'index.html',target: 'index.html',width: 1300,height: 900,inline: true,extract: true,ignore: {atrule: ['@font-face'],rule: [/some-selector/]}
})
6.2.2 预加载关键资源
<head><link rel="preload" href="/css/critical.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/css/critical.css"></noscript><link rel="preload" href="/css/non-critical.css" as="style" media="print" onload="this.media='all'">
</head>

6.3 CSS 交付优化

6.3.1 HTTP/2 服务器推送
# nginx 配置
server {listen 443 ssl http2;location = /index.html {http2_push /css/main.css;http2_push /js/app.js;}
}
6.3.2 智能缓存策略
location ~* \.(css|js)$ {expires 1y;add_header Cache-Control "public, immutable";add_header Vary: Accept-Encoding;# 内容哈希变化时自动更新if ($request_filename ~* ^.*?([^/]+?)(\.[^/]+)?$) {set $filename $1;}if ($filename ~* ^.*?-([0-9a-f]{8,})$) {add_header Cache-Control "public, max-age=31536000, immutable";}
}

7. 未来趋势与新兴方案

7.1 CSS Houdini

利用浏览器底层 API 实现高性能样式:

// 注册自定义属性
CSS.registerProperty({name: '--gradient-angle',syntax: '<angle>',initialValue: '0deg',inherits: false
})
.element {background: linear-gradient(var(--gradient-angle), #4fc08d, #35495e);transition: --gradient-angle 1s;
}.element:hover {--gradient-angle: 180deg;
}

7.2 容器查询

.component {container-type: inline-size;
}@container (min-width: 500px) {.element {/* 宽容器下的样式 */}
}

7.3 层叠分层

使用 @layer 规则管理样式优先级:

@layer base, components, utilities;@layer base {h1 { font-size: 2rem; }
}@layer components {.card { padding: 1rem; }
}@layer utilities {.p-4 { padding: 1rem; }
}

8. 总结与最佳实践清单

8.1 样式管理黄金法则

  1. 单一来源原则:设计变量集中管理
  2. 隔离与封装:组件样式自包含
  3. 最小权限原则:样式作用域最小化
  4. 性能意识:关注CSS对FCP/LCP的影响
  5. 渐进增强:基础样式先行,增强样式后加载

8.2 Vue 项目样式检查清单

  1. 使用设计令牌系统管理变量
  2. 为关键CSS配置预加载
  3. 设置合理的样式作用域策略
  4. 配置构建工具提取和压缩CSS
  5. 实施视觉回归测试流程
  6. 监控生产环境CSS性能指标
  7. 定期进行CSS代码审计
  8. 文档化样式架构决策

8.3 推荐技术栈组合

项目规模推荐技术组合
小型项目Vue + Scoped CSS + CSS变量
中型项目Vue + CSS Modules + Tailwind
大型项目Vue + CSS-in-JS + 设计系统
微前端架构Vue + Shadow DOM + 命名空间

通过系统性地应用上述分析和解决方案,开发者可以彻底解决 Vue 应用中样式需要刷新才能统一的问题,构建出健壮、可维护且高性能的样式架构。记住,良好的样式管理不仅是技术问题,更是工程实践和架构设计的综合体现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[免费]微信小程序宠物医院管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序宠物医院管理系统(uni-appSpringBoot后端Vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序宠物医院管理系统(uni-appSpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibi…

测试总结(一)

一、测试流程 参与需求评审-制定测试计划-编写测试用例-用例评审-冒烟测试-测试执行-缺陷管理-预发验收测试-发布线上-线上回归-线上观察-项目总结 二、测试用例设计方法 等价类划分&#xff08;处理有效/无效输入&#xff09; 边界值分析&#xff08;临界值测试&#xff09…

SAP-ABAP:ABAP异常处理与SAP现代技术融合—— 面向云原生、微服务与低代码场景的创新实践

专题三&#xff1a;ABAP异常处理与SAP现代技术融合 —— 面向云原生、微服务与低代码场景的创新实践 一、SAP技术演进与异常处理的挑战 随着SAP技术栈向云端、微服务化和低代码方向演进&#xff0c;异常处理面临新场景&#xff1a; Fiori UX敏感度&#xff1a;用户期望前端友…

DC-DC电路的自举电容电路原理

在以往的电子产品设计中&#xff0c;我们经常会选型 DCDC 芯片&#xff0c;在选型过程中经常遇到有些DC-DC电路中需要用到自举电容&#xff0c;本文主要分析自举电容在DC-DC电路中的原理。 无论同步或者异步整流&#xff0c;经常会看到一个自举电容&#xff0c;常并联在DC-DC的…

android studio 开启无线调试

1、在工具的模拟器点击下后&#xff0c;会出现下面菜单&#xff1a; 选择Pair Devices Using Wi-Fi 发现一直在转圈&#xff0c;并不会连接上&#xff0c;之前在android12的时候&#xff0c;发现一连就上了&#xff0c;现在换成了android14&#xff0c;连不上了。 2、选择用命令…

Go基础语法与控制结构

Go基础语法与控制结构 1. 环境配置与Hello World&#xff08;扩展&#xff09; 安装指南 # 验证安装成功 $ go version # 设置模块代理&#xff08;中国用户推荐&#xff09; $ go env -w GOPROXYhttps://goproxy.cn,direct程序解剖 package main // 程序入口包声明import…

QGIS新手教程:两种方法创建点图层(手动添加 + 表格导入),支持经纬度定位与查找

&#x1f30d;QGIS新手教程&#xff1a;两种方法创建点图层&#xff08;手动添加 表格导入&#xff09;&#xff0c;支持经纬度定位与查找 本文将手把手教你在 QGIS 中通过两种方法创建点图层&#xff0c;并结合经纬度定位、拾取坐标、查找属性等功能&#xff0c;快速掌握从地…

Doris ClickHouse Greenplum 对比

1. 核心架构对比 Doris &#xff08;https://doris.apache.org/&#xff09; MPP架构 列式存储支持实时更新&#xff08;Unique Key模型&#xff09;向量化执行引擎兼容MySQL协议 ClickHouse &#xff08;https://clickhouse.com/&#xff09; 分布式列式存储MergeTree存储引…

基于python,html,echart,php,mysql,在线实时监控入侵检测系统

详细视频:【基于python,html,echart,php,mysql,在线实时监控入侵检测系统&#xff0c;需要的可联系介绍都在所有图片中。包远程部署安装。-哔哩哔哩】 https://b23.tv/KHxmE8k

基于51单片机智能垃圾桶—红外感应自动开关

基于51单片机智能垃圾桶 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.ULN2003驱动步进电机控制打开关闭垃圾桶&#xff1b; 2.一个红外对管检测有没有人&#xff0c;一个红外对管…

自动涂胶机设计及其在工业生产中的应用研究

摘要 本文详细探讨了自动涂胶机的设计原理、关键技术和应用前景。随着工业自动化水平的不断提高&#xff0c;自动涂胶机在制造业中的应用日益广泛。文章首先分析了自动涂胶机的基本工作原理&#xff0c;然后深入研究了其机械结构设计、控制系统设计和视觉定位系统等关键技术。…

SQL 语言

SQL概述与数据库定义 SQL的基本组成 1、数据定义语言。SQL DDL提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。 2、交互式数据操纵语言。SQL DML提供查询、插入、删除和修改的命令。 3、事务控制。SQL提供定义事务开始和结束的命令。 4、嵌入式SQL和动态SQL。用…

深度剖析ZooKeeper

1. ZooKeeper架构总览 ZooKeeper 是一个分布式协调服务&#xff0c;广泛用于分布式系统中的配置管理、命名服务、分布式锁和领导选举等场景。以下是对 ZooKeeper 架构、通信机制、容错处理、数据一致性与可靠性等方面的详细剖析。 一、ZooKeeper 主从集群 ZooKeeper 采用 主从…

K8S-statefulset-mysql-ha

需求 实现一个HA mysql&#xff0c;包括1个master&#xff0c;2个slave。在K8S上已statefulset部署。 mysql HA原理 略 K8S环境需要解决的问题 1、由于使用同一个statefulset配置&#xff0c;因此需要考虑master和slave使用不同的cnf文件。 2、不同pod之间文件的传输 3、…

人脸美颜磨皮祛痘1:数据集说明(含下载链接)

一. 前言 本篇博客是《人脸美颜磨皮祛痘》系列文章之《数据集说明(含下载链接)》&#xff0c;像这种深度学习图像修复的数据一般是需要成对&#xff0c;网上很难找到&#xff0c;公司或者个人都是花钱找人做。为了方便你我他&#xff0c;本博客将分享一个由我自己整理的人脸美…

redis功能清单

文章目录 Redis高级功能使用说明功能清单1. 分布式锁1.1 功能描述1.2 使用方法1.3 测试接口 2. 消息发布订阅2.1 功能描述2.2 使用方法发布消息订阅消息 2.3 测试接口 3. 接口限流3.1 功能描述3.2 使用方法方式一&#xff1a;直接使用工具类方式二&#xff1a;使用注解&#xf…

从代码学习深度学习 - 预训练word2vec PyTorch版

文章目录 前言辅助工具1. 绘图工具 (`utils_for_huitu.py`)2. 数据处理工具 (`utils_for_data.py`)3. 训练辅助工具 (`utils_for_train.py`)预训练 Word2Vec - 主流程1. 环境设置与数据加载2. 跳元模型 (Skip-gram Model)2.1. 嵌入层 (Embedding Layer)2.2. 定义前向传播3. 训练…

Python实现对大批量Word文档进行自动添加页码(16)

前言 本文是该专栏的第16篇,后面会持续分享Python办公自动化干货知识,记得关注。 在处理word文档的时候,相信或多或少都遇到过这样的需求——需要对“目标word文档,自动添加页码”。 换言之,如果有大批量的word文档文件需要你添加页码,这个时候最聪明的办法就是使用“程…

云原生安全:Linux命令行操作全解析

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础概念到安全实践的完整指南 一、基础概念 1. Shell与终端交互 Shell是Linux命令行的解释器&#xff08;如Bash、Zsh&#xff09;&#xff0c;负…

Day 34

GPU训练 要让模型在 GPU 上训练&#xff0c;主要是将模型和数据迁移到 GPU 设备上。 在 PyTorch 里&#xff0c;.to(device) 方法的作用是把张量或者模型转移到指定的计算设备&#xff08;像 CPU 或者 GPU&#xff09;上。 对于张量&#xff08;Tensor&#xff09;&#xff1…