深入浅出:UniApp 从入门到精通全指南
https://juejin.cn/post/7440119937644101684
uni-app官网
uniapp安卓离线打包流程_uniapp离线打包-CSDN博客
本文是关于 UniApp 从入门到精通的全指南,涵盖基础入门(环境搭建、创建项目、项目结构、编写运行)、核心概念与进阶知识(组件与开发、页面路由与导航、数据绑定与响应式原理、生命周期钩子)、电商应用开发(商品展示、购物车、订单结算等功能)、项目优化与部署(性能、安全优化及不同平台部署)、案例分析及总结展望,为开发者全面介绍 UniApp 开发知识体系。
关联问题:UniApp如何压缩图片怎样优化购物车功能如何部署到小程序
一、引言
在当今移动应用开发领域,跨平台开发框架因其能够显著提高开发效率、降低成本而备受青睐。UniApp 作为一款优秀的跨平台应用开发框架,允许开发者使用 Vue.js 技术栈一次编写代码,即可生成 iOS、Android、H5、小程序等多端应用,为开发者提供了极大的便利。本文将详细介绍 UniApp 的入门到精通知识,助力开发者快速上手并深入掌握这一强大的开发工具。
二、UniApp 基础入门
(一)环境搭建
- 安装 Node.js:Node.js 是 UniApp 开发的基础环境,可前往官网(nodejs.org/)下载适合操作系统的版本并进行安装。安装完成后,可在命令行中输入
node -v
和npm -v
检查安装是否成功以及版本信息。 - 安装 HBuilderX:HBuilderX 是 UniApp 的官方开发工具,集成了丰富的开发功能和插件。在 HBuilderX 官网(www.dcloud.io/hbuilderx.h…)下载对应版本并安装。安装完成后,启动 HBuilderX,在菜单栏中点击 “工具”->“插件安装”,确保安装了 “uni-app” 插件。
(二)创建项目
- 打开 HBuilderX,点击 “文件”->“新建”->“项目”。
- 在项目创建向导中,选择 “uni-app” 项目类型,填写项目名称、项目路径等信息,点击 “创建”。创建完成后,HBuilderX 会自动生成一个包含基础结构的 UniApp 项目。
(三)项目结构
- pages 目录:存放应用的页面文件,每个页面由一个.vue 文件组成,包括页面的结构、样式和逻辑。
- static 目录:用于存放静态资源,如图片、字体文件等,这些资源在编译后会直接拷贝到各个端的项目中。
- manifest.json 文件:项目的配置文件,包含应用的名称、图标、权限设置、页面路径等信息,用于配置应用在不同端的基本属性。
- pages.json 文件:用于配置应用的页面路由、导航栏样式、底部 tabBar 等页面相关的全局设置。
(四)编写第一个页面
-
在 pages 目录下创建一个新的.vue 文件,例如
index.vue
。 -
在
<template>
标签内编写页面的 HTML 结构,例如:
xml
代码解读
复制代码
<template> <view class="container"> <text>Hello, UniApp!</text> </view> </template>
-
在
<script>
标签内编写页面的 JavaScript 逻辑,例如:
xml
代码解读
复制代码
<script> export default { data() { return { // 数据定义 } }, methods: { // 方法定义 }, mounted() { // 生命周期钩子,页面加载完成时执行 } } </script>
-
在
<style>
标签内编写页面的 CSS 样式,例如:
xml
代码解读
复制代码
<style> .container { display: flex; justify-content: center; align-items: center; height: 100vh; } </style>
(五)运行项目
- 在 HBuilderX 中,点击菜单栏中的 “运行”->“运行到浏览器”,可以在浏览器中预览项目的 H5 版本。
- 点击 “运行”->“运行到手机或模拟器”,如果连接了手机或启动了模拟器,会将项目安装到手机或模拟器中运行,可查看项目的原生应用效果(iOS 或 Android)。
- 点击 “运行”->“运行到小程序模拟器”,可选择微信小程序、支付宝小程序等不同平台的小程序模拟器进行项目预览。
三、UniApp 核心概念与进阶知识
(一)组件与组件化开发
-
内置组件:UniApp 提供了丰富的内置组件,如
<view>
(视图容器)、<text>
(文本)、<image>
(图片)、<button>
(按钮)等,开发者可以直接在页面中使用这些组件构建界面。例如:
arduino
代码解读
复制代码
<image src="/static/logo.png" mode="aspectFit"></image>
上述代码在页面中显示一张图片,src
属性指定图片路径,mode
属性设置图片的缩放模式。
2. 自定义组件:除了内置组件,开发者还可以创建自定义组件,实现代码的复用。在项目中创建一个 components
目录,在该目录下创建自定义组件的.vue 文件。例如创建一个名为 my-header.vue
的自定义组件:
xml
代码解读
复制代码
<template> <view class="header"> <text>{{title}}</text> </view> </template> <script> export default { props: { title: { type: String, default: '默认标题' } } } </script> <style> .header { height: 50px; line-height: 50px; background-color: #007aff; color: #fff; text-align: center; } </style>
在其他页面中使用自定义组件:
xml
代码解读
复制代码
<template> <view class="container"> <my-header title="我的页面标题"></my-header> </view> </template> <script> import myHeader from '@/components/my-header.vue' export default { components: { myHeader } } </script>
(二)页面路由与导航
-
路由配置:在
pages.json
文件中配置页面路由,例如:
json
代码解读
复制代码
{ "pages": [ { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页" } }, { "path": "pages/detail/detail", "style": { "navigationBarTitleText": "详情页" } } ] }
上述配置定义了两个页面的路由路径和导航栏标题。
2. 导航方式:
-
编程式导航:在 JavaScript 代码中使用
uni.navigateTo
、uni.redirectTo
、uni.switchTab
等方法进行页面跳转。例如:
css
代码解读
复制代码
uni.navigateTo({ url: '/pages/detail/detail?id=123' })
上述代码跳转到详情页,并传递一个参数 id
,值为 123
。
-
声明式导航:在页面的
<template>
标签中使用<navigator>
组件进行导航,例如:
ini
代码解读
复制代码
<navigator url="/pages/detail/detail?id=456">跳转到详情页</navigator>
(三)数据绑定与响应式原理
-
数据绑定语法:在 UniApp 中,使用
{{}}
语法进行数据绑定。例如在页面的<template>
标签中:
arduino
代码解读
复制代码
<text>{{message}}</text>
在对应的 <script>
标签中:
javascript
代码解读
复制代码
export default { data() { return { message: 'Hello, Vue!' } } }
页面加载时,text
组件会显示 Hello, Vue!
。
2. 响应式原理:UniApp 基于 Vue.js 的响应式原理,当数据发生变化时,会自动更新与之绑定的视图。例如:
javascript
代码解读
复制代码
export default { data() { return { count: 0 } }, methods: { increment() { this.count++ } } }
在页面中绑定一个按钮的点击事件:
css
代码解读
复制代码
<button @click="increment">{{count}}</button>
每次点击按钮,count
的值会增加,页面上显示的数字也会随之更新。
(四)生命周期钩子
-
页面生命周期:UniApp 页面有多个生命周期钩子函数,如
onLoad
(页面加载时触发)、onShow
(页面显示时触发)、onReady
(页面初次渲染完成时触发)、onHide
(页面隐藏时触发)、onUnload
(页面卸载时触发)等。例如:
javascript
代码解读
复制代码
export default { onLoad(options) { // 页面加载时获取参数 options console.log('页面加载,参数:', options) }, onShow() { // 页面每次显示时执行 console.log('页面显示') } }
-
应用生命周期:除了页面生命周期,UniApp 应用也有生命周期钩子,如
onLaunch
(应用启动时触发)、onShow
(应用前台显示时触发)、onHide
(应用后台运行时触发)等。在main.js
文件中可以注册应用生命周期钩子:
javascript
代码解读
复制代码
import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false App.mpType = 'app' const app = new Vue({ ...App }) app.$mount() // 注册应用生命周期钩子 uni.onLaunch(() => { console.log('应用启动') })
四、UniApp 与原生功能交互
(一)网络请求
-
uni.request 方法:UniApp 提供了
uni.request
方法用于发送网络请求,例如:
javascript
代码解读
复制代码
uni.request({ url: 'https://api.example.com/data', method: 'GET', success: (res) => { console.log('请求成功', res.data) }, fail: (err) => { console.log('请求失败', err) } })
上述代码向指定的 API 地址发送一个 GET 请求,并在成功或失败时打印相应信息。
2. 封装网络请求模块:为了更好地管理网络请求,通常会封装一个网络请求模块。创建一个 utils
目录,在该目录下创建 http.js
文件:
javascript
代码解读
复制代码
const baseUrl = 'https://api.example.com' export const request = (options) => { return new Promise((resolve, reject) => { uni.request({ url: baseUrl + options.url, method: options.method || 'GET', data: options.data || {}, success: (res) => { if (res.statusCode === 200) { resolve(res.data) } else { reject(res) } }, fail: (err) => { reject(err) } }) }) }
在页面中使用封装后的网络请求模块:
javascript
代码解读
复制代码
import { request } from '@/utils/http.js' export default { methods: { fetchData() { request({ url: '/data' }).then((data) => { console.log('获取数据成功', data) }).catch((err) => { console.log('获取数据失败', err) }) } } }
(二)存储与缓存
-
同步存储与缓存:UniApp 提供了
uni.setStorageSync
(同步设置缓存)、uni.getStorageSync
(同步获取缓存)、uni.removeStorageSync
(同步移除缓存)等方法。例如:
arduino
代码解读
复制代码
// 设置缓存 uni.setStorageSync('token', 'abcdefg') // 获取缓存 const token = uni.getStorageSync('token') console.log('缓存中的 token:', token) // 移除缓存 uni.removeStorageSync('token')
-
异步存储与缓存:除了同步方法,还有对应的异步方法
uni.setStorage
、uni.getStorage
、uni.removeStorage
等,异步方法返回一个 Promise。例如:
javascript
代码解读
复制代码
// 异步设置缓存 uni.setStorage({ key: 'userInfo', data: { name: 'John', age: 25 } }).then(() => { console.log('缓存设置成功') }).catch((err) => { console.log('缓存设置失败', err) })
(三)设备信息与系统功能调用
-
获取设备信息:使用
uni.getSystemInfo
或uni.getSystemInfoSync
方法获取设备信息,如设备型号、屏幕宽度、屏幕高度等。例如:
javascript
代码解读
复制代码
uni.getSystemInfo({ success: (res) => { console.log('设备信息:', res) } })
-
调用系统功能:UniApp 提供了丰富的 API 用于调用系统功能,如
uni.makePhoneCall
(拨打电话)、uni.chooseImage
(选择图片)、uni.getLocation
(获取地理位置)等。例如:
php
代码解读
复制代码
// 拨打电话 uni.makePhoneCall({ phoneNumber: '13888888888' })
五、UniApp 多端适配与优化
(一)样式适配
-
rpx 单位:UniApp 推荐使用 rpx 单位进行样式编写,rpx 会根据设备屏幕宽度自动进行换算,从而实现自适应布局。例如:
css
代码解读
复制代码
.container { width: 750rpx; height: 100rpx; background-color: #f00; }
在不同屏幕宽度的设备上,container
元素的宽度和高度会根据比例自动调整。
2. 条件编译:针对不同平台的样式差异,可以使用条件编译。例如:
css
代码解读
复制代码
/* #ifdef APP-PLUS */ .app-only-style { color: #007aff; } /* #endif */ /* #ifdef MP-WEIXIN */ .weixin-only-style { background-color: #f5f5f5; } /* #endif */
上述代码中,.app-only-style
样式只会在 APP 端生效,.weixin-only-style
样式只会在微信小程序端生效。
(二)性能优化
-
图片优化:在项目中尽量使用合适尺寸和格式的图片,避免使用过大的图片资源。可以使用图片压缩工具对图片进行压缩,或者使用雪碧图、base64 编码等方式优化图片加载。
-
代码分包:对于大型项目,可以使用代码分包技术,将不同页面或功能的代码拆分成多个分包,在需要时才加载相应的分包,从而减少首屏加载时间。在
pages.json
文件中配置代码分包:
json
代码解读
复制代码
{ "pages": [ { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页" } } ], "subPackages": [ { "root": "subpkg1", "pages": [ { "path": "detail/detail", "style": { "navigationBarTitleText": "详情页" } } ] } ] }
上述配置将 detail
页面所在的代码放在 subpkg1
分包中。
3. 数据懒加载:对于页面中不需要立即显示的数据,可以采用数据懒加载的方式,在用户滚动到相应位置或触发特定事件时才加载数据,提高页面的初始加载速度。例如:
ini
代码解读
复制代码
<view v-for="(item, index) in list" :key="index" v-if="index < visibleCount">{{item}}</view> <button @click="loadMore">加载更多</button>
javascript
代码解读
复制代码
export default { data() { return { list: [], visibleCount: 10, page: 1 } }, methods: { loadMore() { // 模拟加载更多数据 const newData = [] for (let i = 0; i < 10; i++) { newData.push('新数据' + (this.page * 10 + i)) } this.list = this.list.concat(newData) this.visibleCount += 10 this.page++ } } }
六、UniApp 项目实战与案例分析
(一)实战项目搭建
-
需求分析:确定项目的功能需求,例如开发一个电商应用,需要包括商品列表展示、商品详情页、购物车功能、订单结算、用户登录注册等功能。
-
技术选型:根据项目需求,选择合适的技术栈和插件。对于 UniApp 项目,确定使用 Vue.js 进行页面开发,选择合适的 UI 框架(如 uView UI)提高开发效率,使用后端开发语言(如 Node.js + Express)搭建后端 API 服务。
-
数据库设计:设计项目所需的数据库表结构,如用户表、商品表、订单表、购物车表等,确定表之间的关系和字段类型。
-
项目架构设计:规划项目的目录结构,将页面、组件、接口请求、工具函数等分别放在不同的目录中,便于管理和维护。例如:
arduino
代码解读
复制代码
- api // 接口请求目录 - index.js // 接口请求模块入口 - user.js // 用户相关接口 - product.js // 商品相关接口 - components // 组件目录 - header.vue // 头部组件 - footer.vue // 底部组件 - pages // 页面目录 - index.vue // 首页 - productList.vue // 商品列表页 - productDetail.vue // 商品详情页 - cart.vue // 购物车页 - order.vue // 订单页 - login.vue // 用户登录页 - register.vue // 用户注册页 - utils // 工具函数目录 - http.js // 网络请求工具函数 - storage.js // 存储工具函数 - static // 静态资源目录 - images // 图片资源 - fonts // 字体资源
(二)核心功能实现
-
商品列表页:
-
在
productList.vue
页面中,使用uni.request
向后端 API 请求商品列表数据,在onLoad
生命周期钩子中发起请求。例如:
-
javascript
代码解读
复制代码
import { request } from '@/utils/http.js' export default { data() { return { productList: [] } }, onLoad() { request({ url: '/product/list' }).then((res) => { this.productList = res.data }).catch((err) => { console.log('获取商品列表失败', err) }) } }
-
在页面的
<template>
中使用v-for
指令循环渲染商品列表数据:
xml
代码解读
复制代码
<template> <view class="product-list"> <view class="product-item" v-for="(product, index) in productList" :key="index"> <image :src="product.image" mode="aspectFit"></image> <text>{{product.name}}</text> <text>¥{{product.price}}</text> <button @click="addToCart(product)">加入购物车</button> </view> </view> </template>
-
商品详情页:
-
接收从商品列表页传递过来的商品 ID 参数,在
onLoad
生命周期中根据 ID 请求商品详情数据。例如:
-
javascript
代码解读
复制代码
export default { data() { return { productDetail: {} } }, onLoad(options) { const productId = options.id request({ url: `/product/detail/${productId}` }).then((res) => { this.productDetail = res.data }).catch((err) => { console.log('获取商品详情失败', err) }) } }
-
在页面中展示商品详情信息,包括图片、名称、价格、描述等。
-
购物车功能:
-
在
cart.vue
页面中,从本地缓存或后端获取购物车数据并展示。例如:
-
javascript
代码解读
复制代码
export default { data() { return { cartList: [] } }, onLoad() { const cartData = uni.getStorageSync('cart') || [] this.cartList = cartData } }
-
实现添加商品到购物车功能,在商品列表页或商品详情页点击 “加入购物车” 按钮时,将商品信息添加到购物车数据中,并更新本地缓存和页面显示。例如:
scss
代码解读
复制代码
methods: { addToCart(product) { const cartData = uni.getStorageSync('cart') || [] const index = cartData.findIndex(item => item.id === product.id) if (index!== -1) { // 商品已存在,数量加 1 cartData[index].quantity++ } else { // 新商品加入购物车 cartData.push({...product, quantity: 1 }) } uni.setStorageSync('cart', cartData) this.$forceUpdate() // 强制更新页面数据 } }
-
实现购物车商品数量修改、删除商品等功能。
-
订单结算功能:
- 在
order.vue
页面中,计算购物车中商品的总价,展示订单信息。 - 点击 “提交订单” 按钮时,向后端提交订单数据,包括用户信息、收货地址、商品信息等,后端处理订单逻辑并返回订单结果。
- 在
(三)项目优化与部署
-
性能优化:
- 对项目中的图片进行压缩和优化,使用雪碧图或 base64 编码处理小图标,减少网络请求次数。
- 对代码进行混淆和压缩,去除不必要的代码注释和空白字符,减小代码体积。在 HBuilderX 中,可以在项目的发行设置中开启代码压缩功能。
- 优化页面的加载速度,采用数据懒加载、骨架屏等技术。例如,在商品列表页,当用户滚动到页面底部时,再加载更多的商品数据;在页面加载时,先显示骨架屏,待数据加载完成后再显示真实内容。
-
安全优化:
- 对用户输入的数据进行严格的验证和过滤,防止 SQL 注入、XSS 攻击等安全漏洞。例如,在用户登录注册页面,对用户名、密码等输入框进行输入限制和验证,确保输入的数据符合要求。
- 对后端 API 进行权限验证,确保只有合法用户才能访问敏感数据和操作。例如,使用 JWT(JSON Web Tokens)进行用户身份认证,在用户登录成功后,后端返回一个 JWT 令牌,前端在后续的 API 请求中携带该令牌,后端验证令牌的有效性来确定用户身份和权限。
-
项目部署:
- 将 UniApp 项目编译成不同平台的应用程序。在 HBuilderX 中,点击 “发行” 菜单,可以选择编译成 iOS 应用、Android 应用、H5 网站或小程序等。
- 对于 iOS 应用,需要在苹果开发者账号中创建应用证书和描述文件,然后使用 Xcode 进行应用的打包和发布到 App Store。
- 对于 Android 应用,需要生成签名证书,然后使用 Android Studio 或其他打包工具进行应用的打包和发布到各大应用商店,如华为应用市场、小米应用商店等。
- 对于 H5 网站,可以将编译后的代码部署到自己的服务器或使用云服务平台(如阿里云、腾讯云等)进行部署,配置好域名和服务器环境后即可通过浏览器访问。
- 对于小程序,需要在对应的小程序平台(如微信小程序、支付宝小程序等)注册开发者账号,然后将编译后的小程序代码上传到平台进行审核和发布。
(四)案例分析
以一个成功的 UniApp 电商应用为例,分析其在市场上取得成功的因素:
-
用户体验:该应用界面设计简洁美观,操作流程简单流畅,用户能够快速找到所需商品并完成购物流程。例如,商品分类清晰,搜索功能强大,购物车和订单结算方便快捷,提供了良好的用户交互体验。
-
性能优化:应用在加载速度、图片显示、数据请求等方面进行了有效的优化。在网络较差的情况下,也能快速显示商品列表的骨架屏,并在数据加载完成后及时更新页面,减少了用户的等待时间。同时,图片经过压缩和优化,加载速度快,不会出现卡顿现象。
-
功能完整性:涵盖了电商应用的核心功能,如商品展示、购物车、订单结算、用户评价、售后客服等,满足了用户在购物过程中的各种需求。并且,还提供了一些特色功能,如个性化推荐、积分系统、优惠券等,增加了用户的粘性和购物乐趣。
-
多端适配:在 iOS、Android、H5 和小程序等多端都有良好的表现,用户可以在不同的设备和平台上使用该应用,扩大了应用的用户群体和使用场景。例如,在小程序端,利用微信的社交属性,用户可以方便地分享商品链接给好友,促进了商品的传播和销售。
通过对这个案例的分析,可以总结出 UniApp 项目开发的一些经验和教训,为后续的项目开发提供参考和借鉴,帮助开发者更好地打造出高质量、受欢迎的跨平台应用。
七、总结与展望
UniApp 作为一款强大的跨平台应用开发框架,为开发者提供了高效、便捷的开发方式。从入门的环境搭建、项目创建,到核心概念的掌握、原生功能的交互,再到多端适配与优化以及项目实战,本文全面地介绍了 UniApp 的开发知识体系。通过学习和实践 UniApp,开发者可以快速构建出功能丰富、性能优良、多端兼容的应用程序,满足不同用户群体和业务场景的需求。随着移动应用开发技术的不断发展,UniApp 也在持续更新和完善,未来有望在更多领域得到广泛应用,为跨平台应用开发带来更多的创新和突破。开发者应不断关注 UniApp 的发展动态,深入学习和探索其新特性和功能,提升自己的开发技能,在跨平台应用开发领域创造出更多优秀的作品。
相关文章:

深入浅出:UniApp 从入门到精通全指南
https://juejin.cn/post/7440119937644101684 uni-app官网 uniapp安卓离线打包流程_uniapp离线打包-CSDN博客 本文是关于 UniApp 从入门到精通的全指南,涵盖基础入门(环境搭建、创建项目、项目结构、编写运行)、核心概念与进阶知识&#x…...

DeepSeek未来发展趋势:开创智能时代的新风口
DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…...

阻塞队列的实现(线程案例)
一.什么是阻塞队列? 1.如果对于一个满的队列,还要把元素入队列,此时这个队列就会阻塞等待,一直阻塞到这个队列不满为止,从而把这个元素入队列! 2.如果对于一个空的队列,还要从队列拿出元素&…...

http status是什么?常见的http状态码指的是什么意思?
HTTP 状态码 HTTP 状态码(HTTP Status Code)是服务器在响应客户端请求时返回的一个三位数字代码,用于表示请求的处理结果。HTTP 状态码是 HTTP 协议的一部分,帮助客户端(如浏览器或应用程序)了解请求是否成…...

react组件分离,降低耦合
分离前 分离后...

【AI】AI白日梦+ChatGPT 三分钟生成爆款短视频
引言 随着人工智能(AI)技术的快速发展,AI在各个领域都展现出了强大的应用潜力。其中,自然语言处理技术的进步使得智能对话系统得以实现,而ChatGPT作为其中的代表之一,具有自动生成文本的能力,为…...

MYSQL的安装教程
mysql安装分为:普通安装和压缩包安装 压缩包安装很多会存在安装失败的情况,所以我这里就用了普通安装 一、官网下载安装包 www.mysql.com 点击DOWNLOADS: 进入社区版本下载: 点击最下面一行进行下载: 选择第二个离…...

深入解析 C# 中的泛型:概念、用法与最佳实践
C# 中的 泛型(Generics) 是一种强大的编程特性,允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型,C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…...

NUMA架构介绍
NUMA 架构详解 NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问…...

数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...

python爬虫:python中使用多进程、多线程和协程对比和采集实践
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 多进程爬虫1.1 python多进程样例1.2 实现多进程爬虫2. 多线程爬虫2.1 python多线程样例2.2 实现多线程爬虫3. 协程爬虫3.1 python协程样例3.2 实现协程爬虫在网络爬虫中,为了提高抓取效率,常常需要使用多进程、多线…...

《OpenCV》—— dlib库
文章目录 dlib库是什么?OpenCV库与dlib库对比dlib库安装dlib——人脸应用实例——人脸检测dlib——人脸应用实例——人脸关键点定位dlib——人脸应用实例——人脸轮廓绘制 dlib库是什么? OpenCV库与dlib库对比 dlib库安装 dlib——人脸应用实例——人脸检…...

Linux搜索---find
find搜索 find 命令的核心功能是在指定的目录路径下,递归地搜索文件和目录,并且可以根据多种条件对搜索结果进行筛选,还能对符合条件的文件和目录执行特定操作。 一、基础语法结构 find [起始目录] [匹配条件] [执行操作] # 基本示例 find…...

python之爬虫入门实例
链家二手房数据抓取与Excel存储 目录 开发环境准备爬虫流程分析核心代码实现关键命令详解进阶优化方案注意事项与扩展 一、开发环境准备 1.1 必要组件安装 # 安装核心库 pip install requests beautifulsoup4 openpyxl pandas# 各库作用说明: - requests&#x…...

Blender常用快捷键的汇总
一、基础操作 全选/取消全选:A(全选)、AA(连续按两次A取消全选)复制物体:Shift D(复制后需点击确认位置)移动物体:G(按X/Y/Z可约束轴向移动)旋转…...

鸿蒙启动页开发
鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…...

Unity 文字高度自适应
期望 文字有字号限制,输入文字文字后先判断高度是否适用于限制字号,若处于最小字号时高度任不适用,则调整RectTransform 的高度。 核心代码 每次输入文字时先将字号设定为原始字号。 comp.fontSize fontSize; comp.text content; 拓展T…...

Teaching Small Language Models Reasoning throughCounterfactual Distillation
2024.emnlp-main.333.pdfhttps://aclanthology.org/2024.emnlp-main.333.pdf 1.概述 大型语言模型(LLM),如GPT-3,在各种下游任务中表现出色,包括通过链式思维(CoT)进行问题解答。CoT鼓励模型在解决问题时生成中间推理步骤。尽管LLM取得了成功,但由于模型大小的限制,其…...

快速开始React开发(一)
快速开始React开发(一) React是一个JavaScript库,用于构建交互式网站,并且能够快捷创建SPA(Single Page App),其组件化的思想也是被一再传播,无论是普通的Web网站还是嵌入移动端交互…...

2025最新Transformer模型及深度学习前沿技术应用
第一章、注意力(Attention)机制 1、注意力机制的背景和动机(为什么需要注意力机制?注意力机制的起源和发展里程碑)。 2、注意力机制的基本原理(什么是注意力机制?注意力机制的数学表达与基本公…...

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6
本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…...

[环境搭建篇] Windows 环境下如何安装Docker工具
Windows 环境下如何安装Docker工具 1. 检查系统要求2. 启用WSL 2和虚拟化步骤一:启用WSL步骤二:启用虚拟化(Hyper-V)步骤三:安装WSL 2内核 3. 安装Docker Desktop4. 配置Docker5. 家庭版用户替代方案6. 常见问题解决问…...

JavaScript 数组和字符串方法详解
一、数组方法 数组方法是操作数组的核心工具,分为修改原数组和返回新数组两类。 1. 常用修改原数组的方法 方法参数返回值说明示例push...items新长度末尾添加元素arr.push(4) → [1,2,3,4]pop无删除的元素删除最后一个元素arr.pop() → 3(原数组变[1,…...

达梦数据库系列之Mysql项目迁移为达梦项目
达梦数据库系列之Mysql项目迁移为达梦项目 1 达梦数据库安装及MySql数据迁移2 SpringBoot项目迁移2.1 驱动包引入2.2 驱动类配置2.3 数据源配置2.4 flowable迁移2.4.1 异常问题2.4.2 解决 3 迁移常见问题3.1 不是 GROUP BY 表达式3.1.1 dm.ini 开启Mysql兼容模式3.1.2 修改动态…...

10个实用IntelliJ IDEA插件
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 以下是为提升开发效率推荐的10个实用IntelliJ IDEA插件,涵盖代码质量、效率工具及热门框架支持: 一、代码质量与规范 SonarLint 实时…...

10分钟从零开始搭建机器人管理系统(飞算AI)
1. 安装插件 https://www.feisuanyz.com/ 2. Intellij IDEA中运行 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3…...

[自动驾驶-传感器融合] 多激光雷达的外参标定
文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人,每个雷达的位置和姿态不同,需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系(…...

怎么让呼叫中心支持高并发
基于FreeSWITCH的呼叫中心系统并发性能优化指南 在呼叫中心系统建设中,高并发处理能力是衡量系统稳定性和效率的核心指标。作为开源软交换平台的代表,FreeSWITCH凭借其线程模型和模块化架构,天然适合高并发场景。然而,实际应用中仍…...

Elasticsearch简单学习
1、依赖的导入 <!--ES依赖--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>2、客户端链接 RestHighLevelClient client new RestHigh…...

就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的路由负载均衡及过滤深入浅出
本篇技术博文摘要 🌟 本文内容涵盖了BGP负载均衡的基本概念、配置技巧和在实际网络中的应用,包括如何在华为ENSP上实现负载均衡和路由过滤。通过配置BGP的前缀列表、ACL以及路由过滤策略,可以实现网络流量的精确控制和优化,提高网…...