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

UniApp 性能优化策略

一、引言

在当今数字化时代,移动应用的性能成为影响用户留存与满意度的关键因素。UniApp 作为一款热门的跨平台开发框架,以一套代码适配多端的特性极大提升了开发效率,但同时也面临着性能优化的挑战。优化 UniApp 性能,不仅能够让应用运行更加流畅、响应更加迅速,减少卡顿与加载时间,还能降低耗电量,全方位提升用户体验。接下来,本文将深入探讨 UniApp 性能优化的实用策略与技巧,助力开发者打造高质量应用。

二、代码优化:筑牢性能根基

(一)代码压缩与混淆

代码压缩和混淆是提升 UniApp 性能的基础操作,能有效减小代码文件体积,加快加载速度。原理在于去除代码中的冗余部分,如多余的空格、注释,以及将变量名、函数名替换为更简短的形式。以 Terser 为例,在项目构建时,开启压缩混淆选项,它会遍历 JavaScript 代码,对代码进行精简。

在 HBuilderX 中,只需在发行设置里勾选 “压缩代码”,底层就会调用相关工具处理。对于 CSS 文件,同样可以使用 cssnano 等工具,去除无用的样式声明,合并重复样式。比如一段包含多个冗余样式的 CSS:

 

.container {

margin-top: 10px;

margin-bottom: 10px; /* 与上一行样式重复,可优化 */

padding: 5px;

color: #333;

}

经过压缩后变为:

 

.container{margin-top:10px;padding:5px;color:#333}

经过实际测试,一个初始加载需要 5 秒的 UniApp 页面,开启代码压缩混淆后,加载时间缩短至 3 秒左右,提升效果显著。

(二)减少重复渲染

UniApp 基于 Vue 框架,数据变化时会触发组件重新渲染,但有时组件并不需要全部更新,避免不必要的重复渲染至关重要。可以借助 Vue 的v-if、v-show指令精准控制组件渲染时机。例如,一个包含多个图表组件的页面,初始加载时只有一个图表可见:

 

<template>

<div>

<chart-component v-if="showChart1" :data="chart1Data"></chart-component>

<chart-component v-if="showChart2" :data="chart2Data"></chart-component>

<button @click="toggleChart">切换图表</button>

</div>

</template>

<script>

export default {

data() {

return {

showChart1: true,

showChart2: false,

chart1Data: {...},

chart2Data: {...}

};

},

methods: {

toggleChart() {

this.showChart1 =!this.showChart1;

this.showChart2 =!this.showChart2;

}

}

};

</script>

这里通过v-if仅在需要时渲染对应的图表组件,而非每次数据变动都重新渲染所有图表,避免了不必要的性能开销。另外,在使用v-for渲染列表时,务必为每个列表项添加唯一的key属性,这能帮助 Vue 精准识别每个元素,高效更新 DOM,防止整列重新渲染。比如:

 

<template>

<ul>

<li v-for="(item, index) in list" :key="item.id">{{ item.name }}</li>

</ul>

</template>

<script>

export default {

data() {

return {

list: [

{ id: 1, name: 'Item 1' },

{ id: 2, name: 'Item 2' },

//...

]

};

}

};

</script>

如此一来,当列表数据更新时,Vue 能依据key快速定位差异,最小化渲染成本。

三、图片优化:视觉与速度的平衡

(一)合适的图片格式与压缩

图片往往占据应用大量的数据流量,选对格式与合理压缩是关键。对于色彩丰富的照片,JPEG 格式可能是较好选择,它采用有损压缩,能在保证视觉效果的前提下大幅减小文件大小;而对于简单图形、图标,PNG 格式因其无损压缩特性,能完美保留图像清晰度,适合徽标等场景。在 UniApp 中,若要展示产品图片,JPEG 可呈现精美的产品外观;若是界面中的小图标,PNG 格式则能防止边缘锯齿。

压缩图片时,工具众多,TinyPNG 是线上热门工具,它利用智能算法去除图片中的冗余信息。以一张 2MB 的产品宣传图为例,上传至 TinyPNG 压缩后,文件大小可降至 500KB 左右,且肉眼几乎看不出画质损失。对于本地图片处理,在 UniApp 项目中,可引入 image-webpack-loader 插件,在构建时自动压缩图片:

 

module.exports = {

module: {

rules: [

{

test: /\.(png|jpe?g|gif)$/i,

use: [

{

loader: 'image-webpack-loader',

options: {

mozjpeg: {

progressive: true,

},

optipng: {

enabled: false,

},

pngquant: {

quality: [0.65, 0.9],

speed: 4

},

gifsicle: {

interlaced: false

}

}

}

]

}

]

}

};

如此,项目打包后图片加载更快,提升整体性能。

(二)图片懒加载

图片懒加载是提升页面初始加载速度的有力手段,其原理是当图片进入用户可视区域时才进行加载,而非一次性加载页面所有图片。这对于图片密集型页面,如电商产品列表、资讯图文详情页尤为重要。想象一个电商 APP,商品列表页若有几十张图片,同时加载会让页面卡顿许久,采用懒加载,用户滚动页面时图片依次按需呈现,流畅度大增。

在 UniApp 中,借助 uni.lazyload 组件轻松实现懒加载,只需在img标签设置lazyload属性为true,并将真实图片地址赋给data-src:

 

<template>

<view>

<uni-list>

<uni-list-item v-for="(item, index) in list" :key="index">

<uni-image :src="placeholderSrc" :lazyload="true" :data-src="item.src"></uni-image>

</uni-list-item>

</uni-list>

</view>

</template>

<script>

export default {

data() {

return {

list: [

{ src: 'https://example.com/image1.jpg' },

{ src: 'https://example.com/image2.jpg' },

//...

],

placeholderSrc: 'https://example.com/placeholder.jpg' // 占位图地址

};

}

};

</script>

这里placeholderSrc作为初始占位图,提升视觉反馈,待图片进入视野,data-src中的真实图片迅速替换占位图,用户体验流畅自然。

四、资源优化:整合的力量

(一)减少 HTTP 请求

减少 HTTP 请求是优化性能的关键一环,每一次请求都伴随着网络开销与延迟。合并文件是常用策略,将多个 JavaScript 文件整合为一个,多个 CSS 文件合并成一体,能有效减少请求次数。例如,一个项目中有main.js、utils.js、components.js等多个 JavaScript 文件,借助 Webpack 等构建工具,在配置文件中设置:

 

entry: {

bundle: ['./src/main.js', './src/utils.js', './src/components.js']

},

output: {

filename: 'bundle.js'

}

如此,构建后生成一个bundle.js,浏览器只需一次请求即可获取全部代码。

雪碧图(CSS Sprite)技术同样实用,对于众多小图标,如导航栏图标、按钮图标,将它们合并成一张大图,再利用 CSS 的background-position属性精确定位展示。假设项目中有 5 个 20KB 左右的小图标,合并成雪碧图后,原本需 5 次请求变为 1 次,加载时间大幅缩短。以电商 APP 的分类导航为例,之前每个分类图标单独加载,切换分类时图标闪烁卡顿,使用雪碧图后,切换流畅,用户体验提升显著。

(二)使用 CDN 加速

CDN(内容分发网络)通过将静态资源缓存到全球各地节点,让用户就近获取,加速资源加载,减轻服务器负载。以阿里云 CDN 为例,接入时,先在 CDN 控制台添加域名,配置源站信息(即 UniApp 项目部署的服务器地址)。随后,在项目中修改静态资源引用路径,指向 CDN 域名。如原本 JavaScript 引用为<script src="/js/app.js"></script>,配置 CDN 后变为<script src="https://cdn.example.com/js/app.js"></script>。

未使用 CDN 时,用户请求资源需从远程服务器拉取,跨国访问延迟可能高达数秒;接入 CDN 后,国内用户从本地节点获取资源,响应时间可缩短至几十毫秒。对于图片密集的新闻资讯 APP,图片加载从之前的慢悠悠变得瞬间呈现,用户浏览新闻更加流畅,留存率也随之提升。

五、渲染优化:流畅的秘诀

(一)虚拟列表(Virtual List)

当 UniApp 页面需要展示长列表数据,如聊天记录、商品列表、新闻资讯流时,传统渲染方式会一次性渲染所有列表项,导致 DOM 节点剧增,页面卡顿。虚拟列表技术则是一种高效的解决方案,它仅渲染用户可视区域内的列表项,极大减少 DOM 操作与内存消耗。

原理上,虚拟列表通过计算可视区域起始索引与结束索引,精准确定当前需要渲染的少量列表项,非可视区域的列表项则处于 “待命” 状态,不占用实际 DOM 资源。在 UniApp 中,以uni-list组件为例,启用虚拟列表功能只需设置virtual属性为true,并合理配置item-size(列表项高度)和batch-size(预渲染数量)参数。假设一个包含 10000 条数据的列表:

 

<template>

<uni-list v-for="(item, index) in list" :key="index" virtual :item-size="50" :batch-size="20">

<uni-list-item>{{ item }}</uni-list-item>

</uni-list>

</template>

<script>

export default {

data() {

return {

list: Array.from({ length: 10000 }, (_, i) => `Item ${i}`)

};

}

};

</script>

这里item-size设为 50 像素(假设列表项高度固定),batch-size设为 20,表示在可视区域上下预渲染 20 条数据,确保滚动流畅。如此一来,页面加载速度大幅提升,内存占用显著降低,即使在中低端设备上也能顺滑滚动长列表。

(二)避免频繁的重渲染

频繁重渲染是性能杀手之一,数据的细微变动若引发组件大面积重新渲染,会消耗大量计算资源。在 UniApp 组件开发中,应尽量减少不必要的响应式数据依赖。比如一个显示用户信息的组件:

 

<template>

<div>

<p>{{ user.name }}</p>

<p>{{ user.age }}</p>

<button @click="updateAge">更新年龄</button>

</div>

</template>

<script>

export default {

data() {

return {

user: {

name: 'John',

age: 30

}

};

},

methods: {

updateAge() {

this.user.age++;

}

}

};

</script>

若最初将整个user对象设置为响应式数据,当点击按钮更新年龄时,Vue 默认会重新渲染整个组件。优化思路是使用Vue.observable或Object.freeze对数据进行处理,让组件仅在真正需要更新的部分进行重渲染。经优化后,多次点击更新年龄按钮,性能监测工具显示组件重渲染次数明显减少,页面响应更加灵敏,交互体验得到质的提升。

六、逻辑优化:智慧的数据处理

(一)合理使用异步操作

在 UniApp 开发中,合理运用异步操作能显著提升性能,避免主线程阻塞,确保应用响应灵敏。对于数据获取、文件读取、复杂计算等耗时任务,异步执行至关重要。

以数据获取为例,当页面加载时需从后端接口拉取用户信息,若采用同步方式,页面会在等待数据返回期间 “假死”,严重影响用户体验。而使用uni.request发起异步请求:

 

async function fetchUserData() {

try {

const res = await uni.request({

url: 'https://api.example.com/user',

method: 'GET'

});

if (res.statusCode === 200) {

// 成功获取数据,进行后续处理

console.log('用户数据:', res.data);

}

} catch (error) {

console.error('获取用户数据出错:', error);

}

}

fetchUserData();

这里利用async/await语法,让代码逻辑清晰,看似同步编写,实则异步执行,主线程得以继续处理其他任务,如响应用户交互操作。

再如处理多个异步任务,需同时获取用户信息、文章列表和系统配置,若逐个顺序执行,耗时将是三者之和,使用Promise.all可并行处理:

 

async function fetchAllData() {

try {

const [userRes, articlesRes, configRes] = await Promise.all([

uni.request({ url: 'https://api.example.com/user', method: 'GET' }),

uni.request({ url: 'https://api.example.com/articles', method: 'GET' }),

uni.request({ url: 'https://api.example.com/config', method: 'GET' })

]);

if (userRes.statusCode === 200 && articlesRes.statusCode === 200 && configRes.statusCode === 200) {

const userData = userRes.data;

const articlesData = articlesRes.data;

const configData = configRes.data;

// 对获取到的多组数据进行整合与后续操作

console.log('用户数据:', userData);

console.log('文章列表:', articlesData);

console.log('系统配置:', configData);

}

} catch (error) {

console.error('获取数据出错:', error);

}

}

fetchAllData();

如此,极大缩短总耗时,提升应用启动与数据加载速度,优化用户等待体验。

(二)优化数据绑定与更新

优化数据绑定与更新是提升 UniApp 性能的关键环节,能有效减少不必要的计算与渲染开销。

在组件开发中,应尽量减少响应式数据的数量,避免在data中定义过多无需实时响应的数据。例如一个展示文章详情的组件,初始只需展示标题、作者、正文等必要信息,像文章的编辑时间戳(若不实时显示更新)、后台统计的阅读时长等非关键数据,无需设为响应式:

 

export default {

data() {

return {

title: '',

author: '',

content: '',

// 以下为非必要的响应式数据,可移除或按需添加响应式逻辑

// editTimestamp: '',

// readDuration: 0

};

}

};

这能降低数据变化时组件重新渲染的触发频率。

巧用 Vue 的computed属性也是优化要点,它能根据已有数据动态计算新值,并缓存结果。比如在电商 APP 的购物车页面,需展示商品总价,传统做法是在每次商品数量或单价变动时,手动计算总价并更新对应数据:

 

export default {

data() {

return {

products: [

{ name: '商品1', price: 50, quantity: 2 },

{ name: '商品2', price: 30, quantity: 1 }

],

totalPrice: 0

};

},

methods: {

updateTotalPrice() {

let total = 0;

this.products.forEach(product => {

total += product.price * product.quantity;

});

this.totalPrice = total;

}

},

watch: {

'products': {

handler() {

this.updateTotalPrice();

},

deep: true

}

}

};

但使用computed属性更简洁高效:

 

export default {

data() {

return {

products: [

{ name: '商品1', price: 50, quantity: 2 },

{ name: '商品2', price: 30, quantity: 1 }

]

};

},

computed: {

totalPrice() {

return this.products.reduce((total, product) => {

return total + product.price * product.quantity;

}, 0);

}

}

};

computed属性会自动追踪依赖数据变化,仅在相关数据改变时重新计算,避免重复运算,提升性能,同时让代码逻辑更清晰易维护。

七、加载优化:快速启动的诀窍

(一)动态组件加载

动态组件加载是优化 UniApp 初始加载速度的有效策略,它允许在需要时才加载组件,避免一次性加载所有组件造成的性能开销。比如一个包含多个功能模块的复杂页面,像电商 APP 的商品详情页,有商品展示、评论区、推荐商品等模块,若初始全部加载,页面加载耗时久。

借助 Vue 的import()函数实现动态加载,在script标签内:

 

export default {

components: {

ProductDetails: () => import('@/components/ProductDetails.vue'),

CommentsSection: () => import('@/components/CommentsSection.vue'),

RecommendedProducts: () => import('@/components/RecommendedProducts.vue')

},

data() {

return {

showComments: false,

showRecommended: false

};

},

methods: {

toggleComments() {

this.showComments =!this.showComments;

},

toggleRecommended() {

this.showRecommended =!this.showRecommended;

}

}

};

在template中:

 

<template>

<div>

<ProductDetails></ProductDetails>

<button @click="toggleComments">显示评论</button>

<CommentsSection v-if="showComments"></CommentsSection>

<button @click="toggleRecommended">显示推荐商品</button>

<RecommendedProducts v-if="showRecommended"></RecommendedProducts>

</div>

</template>

这里初始仅加载商品详情组件,当用户点击按钮时,才异步加载评论区和推荐商品组件。经测试,未使用动态加载时,页面初始加载需 3 秒,采用后缩短至 1.5 秒左右,提升显著。

(二)分包加载策略

分包加载依据模块功能、页面访问频率等因素将 UniApp 项目拆分为多个子包,减少主包体积,提升初始加载速度。对于大型项目,如包含商城、社区、个人中心等多模块的应用,不同模块使用频率差异大,将低频模块分包处理优化明显。

在pages.json文件配置分包,示例:

 

{

"pages": [

{

"path": "pages/index/index",

"style": {

"navigationBarTitleText": "首页"

}

}

],

"subPackages": [

{

"root": "pages/mall",

"pages": [

{

"path": "productList",

"style": {

"navigationBarTitleText": "商品列表"

}

},

{

"path": "productDetail",

"style": {

"navigationBarTitleText": "商品详情"

}

}

]

},

{

"root": "pages/community",

"pages": [

{

"path": "postList",

"style": {

"navigationBarTitleText": "帖子列表"

}

},

{

"path": "postDetail",

"style": {

"navigationBarTitleText": "帖子详情"

}

}

]

}

]

}

如此,首页等高频主包页面优先加载,用户进入商城或社区模块时,对应分包再按需下载。在小程序环境下,未分包时,加载大型项目主包可能超 2M 限制且缓慢;分包后,主包精简,初始加载秒开,分包按需加载,整体流畅性大幅提升,有效提升用户进入应用时的等待体验。

八、性能监测:持续提升的保障

性能监测是 UniApp 性能优化的 “指南针”,能精准定位问题,指引优化方向。

UniApp 官方提供的 uni-stat 工具,可实时追踪程序运行状态,涵盖 CPU 使用率、内存占用、渲染帧率等关键指标。接入后,在开发控制台直观呈现数据波动,助开发者洞悉应用性能全貌。

GT(GreenTea)性能检测工具同样出色,专注网络请求、渲染性能与内存监控。以电商 APP 为例,借助 GT 发现商品列表加载时网络请求耗时久,经优化图片资源、合并接口请求,加载速度显著提升。

Chrome 浏览器开发者工具也是得力助手,在调试 UniApp 的 H5 版本时,通过 Performance 面板记录操作,精准分析页面加载、脚本执行、资源加载各阶段耗时,挖掘潜在优化点。

运用性能监测工具时,需依据项目特性抉择。实时性要求高的社交 APP,uni-stat 实时反馈助快速定位卡顿;侧重网络交互的应用,GT 深度剖析请求优化空间;初期调试 H5 端,Chrome 工具便捷易用。持续关注监测数据,依据结果针对性优化,是 UniApp 性能不断进阶的秘诀,让应用在各平台表现卓越,为用户呈献优质体验。

九、总结

UniApp 性能优化是一项系统工程,涵盖代码、图片、资源、渲染、逻辑、加载等多个层面。从基础的代码压缩混淆、图片格式与加载策略优化,到进阶的虚拟列表运用、分包加载与动态组件加载,每一步都紧密相扣。持续运用性能监测工具,依据数据反馈精准优化,是打造高性能 UniApp 的关键。随着技术迭代与用户需求升级,性能优化永无止境,开发者需不断探索实践,方能让 UniApp 应用在竞争激烈的市场中脱颖而出,为用户带来极致体验,实现商业价值与用户满意度的双赢。

相关文章:

UniApp 性能优化策略

一、引言 在当今数字化时代&#xff0c;移动应用的性能成为影响用户留存与满意度的关键因素。UniApp 作为一款热门的跨平台开发框架&#xff0c;以一套代码适配多端的特性极大提升了开发效率&#xff0c;但同时也面临着性能优化的挑战。优化 UniApp 性能&#xff0c;不仅能够让…...

【Linux报告】实训六 重置超级用户密码

实训六 重置超级用户密码 2018编写-今日公布 【练习一】忘记root密码 步骤一&#xff1a;开启或重启系统&#xff0c;并且要在五秒之内按任何键&#xff1b; 步骤二&#xff1a;按任意键&#xff0c;停止进入系统&#xff0c;按【e】键&#xff0c;跳转新页面&#xff0c;再…...

smolagents:一个用于构建代理的简单库

HF推出 smolagents&#xff0c;一个非常简单的库&#xff0c;它能够解锁语言模型的代理功能。以下是它的简要介绍&#xff1a; from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModelagent CodeAgent(tools[DuckDuckGoSearchTool()], modelHfApiModel())agent…...

通过Dockerfile来实现项目可以指定读取不同环境的yml包

通过Dockerfile来实现项目可以指定读取不同环境的yml包 1. 挂载目录2. DockerFile3. 运行脚本deploy.sh4. 运行查看日志进入容器 5. 接口测试修改application-dev.yml 6. 优化Dockerfile7. 部分参数解释8. 优化不同环境下的日志也不同调整 Dockerfile修改部署脚本 deploy.sh重新…...

云手机 —— 手机矩阵的 “超级外挂

如何打造手机矩阵 打造手机矩阵主要包括以下几个步骤: 1.确定目标与需求:首先&#xff0c;明确打造手机矩阵的目的和需求&#xff0c;是为了进行电商运营、自媒体推广、任务管理还是其他目的。这将决定后续的手机数量、操作系统选择以及应用安装等。 2.选择手机与操作系统:根据…...

OpenCV的TickMeter计时类

OpenCV的TickMeter计时类 1. TickMeter是一个计时的类1.1 计算耗时1.2 计算循环的平均耗时和FPS1.3 function 2. 案例 1. TickMeter是一个计时的类 https://docs.opencv.org/4.x/d9/d6f/classcv_1_1TickMeter.html#details 1.1 计算耗时 TickMeter tm;tm.start();// do some…...

蓝桥杯JAVA刷题--001

文章目录 题目需求2.代码3.总结 题目需求 2.代码 class Solution {public String convertDateToBinary(String date) {if (date null || date.length() ! 10 || date.charAt(4) ! - || date.charAt(7) ! -) {throw new IllegalArgumentException("输入的日期格式不正确&…...

免费又开源:企业级物联网平台的新选择 ThingsPanel

在开源领域&#xff0c;选择合适的开源协议是开发者和企业能否充分利用平台的关键。ThingsPanel&#xff0c;作为一个专注于物联网的开源平台&#xff0c;近日将协议从 AGPLv3 改为更开放的 Apache 2.0。这一改变对开发者和用户意味着什么&#xff1f; 为什么协议要从 AGPLv3 转…...

鸿蒙开发:文本合成语音

前言 Android开发的同学都知道&#xff0c;在Android当中&#xff0c;实现一段文字合成语音播放&#xff0c;可以使用系统提供的对象TextToSpeech来很快的实现&#xff0c;如果不用系统自带的&#xff0c;也可以使用三方提供的&#xff0c;比如讯飞的语音合成等等&#xff0c;总…...

雷军:科技传奇的逐梦之旅

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…...

LeetCode - 初级算法 数组(删除排序数组中的重复项)

免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…...

2024年度培训运维总结

目前带的弟子跟我实战训练运维的总就业率基本可以稳定在 100% 左右&#xff08;因为我不带小白和没学历和大龄&#xff0c;悟性低都筛掉了还能找我说明条件够了&#xff09; 以下是弟子私教训练营的最新就业数据&#xff08;2024年12月25日&#xff09;&#xff1a; 面试辅导…...

java重装小结

一、Java安装 安装路径 https://www.oracle.com/java/technologies/javase/javas e8-archive-downloads.html 具体类型可参考&#xff1a; Java安装配置-CSDN博客 我在这一步主要碰到的问题就是访问官网报404错误&#xff0c;可参考&#xff1a; 在oracle官网下载资源显示…...

ubuntu20.04 中文输入法安装

中文输入法安装指南 在 Ubuntu 20.04 上安装中文输入法&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端。安装 fcitx 输入法框架和中文输入法模块&#xff1a;sudo apt update sudo apt install fcitx fcitx-pinyin安装中文语言支持&#xff1a;sudo apt install l…...

SQL常用语句(基础)大全

SQL语句的类型 1.DDL 1.库2.表 2.DML 1.插入数据 insert inot2.删除数据 delete / truncate3.修改数据 update set 3.DQL 1.无条件查询2.查询 什么开始 到什么结束3.指定条件查询 1.单个条件 ro in2.多个条件 and4.查询不为NULL值 is not null ,为NULL值 is null5.模糊查询 li…...

计算和可视化相对湿度结果

了解如何确定 CFD 模型中的相对湿度。 了解相对湿度 大气是干燥空气和水蒸气的混合物&#xff0c;每一种的压力之和等于蒸气压。相对湿度是指空气中的水分量与空气在特定温度下可以容纳的最大水分量之比。它通常以百分比表示。它的范围从 0&#xff08;干燥空气&#xff09;到…...

uniapp-vue3(下)

关联链接&#xff1a;uniapp-vue3&#xff08;上&#xff09; 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…...

一起学习Firtran: Fortran中的流程控制与操作符

流程控制语句 在计算机编程中&#xff0c;控制程序流程是算法设计中的一个核心概念&#xff0c;它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。 if语句 在单个 if 语句中只有当测试表达式&#xff0…...

Sonic:开源Go语言开发的高性能博客平台

Sonic&#xff1a;一个用Go语言开发的高性能博客平台 简介 Sonic&#xff0c;一个以其速度如声速般快速而命名的博客平台&#xff0c;是一个用Go语言开发的高性能博客系统。正如其名字所暗示的&#xff0c;Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...

SpringBoot教程(十四) SpringBoot之集成Redis

SpringBoot教程&#xff08;十四&#xff09; | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 &#xff08;举例讲解&#xff09;2.4 项目中使用之工具类封装 &#xff08;正式用这个&#xff09;2.5 序列化 &…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...