新闻详情

新闻详情

首页 / 资讯中心 / 详情

uniapp页面开发全攻略:从三种形态到跨端适配与常见坑

发布时间:2026/10/2 4:33:48来源:尧图网络
uniapp页面开发全攻略:从三种形态到跨端适配与常见坑
接手过很多uniapp项目之后我越来越觉得“uniapp的页面”这个词表面上说的是一个文件实际上代表了一整套复杂的生态。同一个页面跑在微信小程序、App、H5上看着是同一套代码但底层的行为差异、坑点、优化方向完全不同。这篇文章我围绕页面开发这条主线把从搭建导航、页面通信到嵌套webview、集成地图视频、最后打包上架和版本更新这一路会碰到的典型问题都梳理一遍。里面涉及的内容大多来自我实际项目中踩过的坑希望能帮正准备做或正在做uniapp项目的朋友少走点弯路。1. 先厘清概念uniapp页面到底有哪几种形态很多刚上手uniapp的人以为写页面就是往pages目录里扔.vue文件。其实做了几个完整项目后你会发现uniapp里的“页面”至少有三种形态理解它们的边界是少踩坑的第一步。1.1 常规Vue页面主力但要注意端差异常规页面就是我们每天写的.vue文件放在pages.json里注册。这是最标准、行为最可预期的形态。但“可预期”只局限在代码层面。同一个页面编译到微信小程序、App和H5渲染机制完全不同微信小程序端页面最终会被编译成小程序的wxml/wxss/js导航栏用的是小程序原生navigationBar页面栈逻辑受小程序框架限制比如页面层级过深会告警。App端如果是Vue3项目页面跑在独立的webview里。导航栏虽然默认也是原生导航但你可以改为自定义导航这也是后面我要说的“tabbar输入法顶起”问题的一个伏笔。H5端页面本质就是一个SPA路由组件导航栏是纯网页渲染浏览器返回键、页面刷新、前进后退都遵循浏览器的路由机制。这意味着什么意味着你在开发时凡是涉及onLoad参数、页面跳转uni.navigateTo、onShow刷新的逻辑都要在心里默默过一遍三个端的行为差异。比如uni.navigateBack返回的层级在微信小程序里超出十层会直接失败App端则没这个问题。1.2 webview页面容纳外部H5的容器热词里有一个高频项叫“iframe嵌套页面”还有一个“html嵌入在uniapp的webview里面”——这类需求本质上就是webview页面的应用场景。uniapp官方提供了web-view组件App和H5端支持以及web-view类型的页面。你在pages.json里注册一个web-view页面页面内容就是一个全屏的webview用来加载外部链接或者本地html文件。微信小程序端也有web-view组件但它有条件约束必须在小程序后台配置业务域名而且只能加载https协议的链接。1.3 分包页面体积大户的应急通道项目页面太多、主包体积超过2MB微信小程序限制时就需要把部分页面放进分包。分包的页面依然写在pages目录下但要在pages.json的subPackages里单独声明并且页面跳转时要特殊处理路径。这里有个容易混淆的点分包页面之间不能直接跳转你要在需要跳转时使用uni.navigateTo但路径必须写分包的完整路径如果从分包页面跳回主包页面路径不用加分包前缀。这套规则刚开始用很容易乱建议项目一开始就规划好哪些页面进分包不要等体积超标再临时拆。// pages.json 分包配置示例 { pages: [ { path: pages/index/index, style: { navigationBarTitleText: 首页 } } ], subPackages: [ { root: pagesA, pages: [ { path: list/list, style: { navigationBarTitleText: 列表页 } } ] } ] }2. 页面核心构成导航栏、tabbar与页面通信的实战细节很多初学者把精力全花在写页面UI上却忽略了页面框架层面的东西——导航栏、tabbar、页面间参数传递。这三个东西决定了整个App的骨架稳不稳在uni-app里它们还和“端差异”深度绑定。2.1 原生导航栏 vs 自定义导航栏别无脑跟风uniapp默认支持原生导航栏它在App端和微信小程序端是真正原生的渲染效率高、切页动画流畅。但做电商或一些强品牌感项目时“沉浸式导航栏”需求特别多此时很多人会去搞自定义导航栏。我的建议是如果没有特别复杂的交互比如导航栏里嵌搜索框、实时显示滚动进度条先老老实实用原生导航栏。自定义导航栏要自己处理状态栏高度、刘海屏适配、页面滚动时导航栏的层级问题而且各端的行为还有差异。比如在App端自定义导航栏页面里如果有地图之类的高层级组件遮挡问题会让你调到底层。实在要自定义记住一个标准模板template view classpage !-- 自定义导航栏占位 -- view :style{ height: statusBarHeight px }/view view classnav-bar !-- 导航内容 -- /view view classpage-content slot / /view /view /template script setup import { onReady } from dcloudio/uni-app const statusBarHeight ref(20) // App端获取状态栏高度有兼容写法 onReady(() { // 微信小程序uni.getSystemInfoSync().statusBarHeight // App端plus.navigator.getStatusbarHeight() statusBarHeight.value uni.getSystemInfoSync().statusBarHeight || 20 }) /script2.2 tabbar原生tabbar就是“稳”底部tabbar同样分原生和自定义两种。原生tabbar在pages.json里配置tabBar字段在App端和小程序端都走原生渲染点击切换零延迟。但它的样式自由度较低只能改图标、文字、颜色没法加中间凸起的按钮。自定义tabbar自由度高了可在微信小程序里每次切换页面所有tab页的webview会重新加载或者进入onShow性能损耗立刻显现。而且自定义tabbar很容易遇到和原生页面栈的兼容问题。我的处理方式是常规需求一律用原生tabbar需要特殊样式中间凸起按钮时才做自定义且自定义tabbar本体用easycom组件的方式全局注册切换时用一个全局事件控制高亮状态。2.3 页面通信从URL参数到全局事件的选择页面之间传参数最直白的是URL拼接uni.navigateTo({ url: /pages/detail/detail?id123typeproduct })但URL传参有两个问题一是参数多了会显得很乱二是传对象需要先序列化。所以复杂对象我一般用两种方式全局storeVue3项目用Pinia页面跳转时不传数据只传一个id详情页里按id从store或接口拿数据。事件总线用uni.$emit和uni.$on适合跨页面触发动作比如详情页点击收藏后通知列表页更新状态。很多新手在页面间传大型对象时会遇到“参数过长导致跳转失败”的问题就是因为走了URL硬传换成id查询或store就解决了。3. 页面里的常见组件实践登录页、车牌输入与列表加载页面是组件的容器但页面级功能的组件化设计才是提升开发效率的关键。这里挑几个大家高频遇到的场景来拆解。3.1 登录页别小看这个“最没技术含量”的页面登录页几乎每个项目都有但很多项目在这个页面翻车不是因为UI而是因为交互细节。密码可见性切换就是热词里那个“uniapp小眼睛”。实现很简单但要注意input的password属性动态切换时部分安卓机在H5端会出现光标跳动的BUG解决方式是给input加一个不同的:key强制重建。登录按钮防重复提交点击登录后立刻disabled按钮、显示loading不要等接口返回再禁用。登录状态存储token建议用uni.setStorageSync存起来同时写一个请求拦截器在每次请求前检查token是否存在避免每个页面都重复判断。登录页的“弱网体验”也值得做。实测下来在小程序端uni.login拿code有时需要一到两秒如果页面没有loading提示用户会反复点击。我习惯在登录按钮点击后立刻进入loading态拿code成功后调用服务端登录接口再跳转页面。3.2 车牌输入页一个“反人类”交互背后的实现思路车牌输入是个很典型的场景热词里就有“输入车牌前端页面”。难点在哪儿呢车牌号可能包含汉字、字母、数字还可能包含“港澳”字样的特殊牌键盘类型需要高频切换如果直接用普通input用户体验非常差。我的实现方案是自定义一个车牌键盘输入框组件视觉上是多个格子但内部用一个隐藏的input接收输入每个字符显示在对应格子中。这样做的好处是移动端会自动弹出系统键盘但你得自己拦截输入内容做格式化。字符映射处理车牌字符时要注意小写字母自动转大写汉字直接忽略非法字符长度限制为8新能源车牌或7传统车牌。特殊按键车牌键盘一般需要“完成”和“删除”按钮删除键在部分机型上触发的是backspace事件你要自己模拟删除逻辑避免光标乱跳。写这个组件的核心原则是用户只管点格子键盘状态由组件内部管理。我封装过一次之后后面三个项目都是直接复用省了很多事。3.3 列表页“加载更多”微信小程序端最容易写错的分页逻辑热词里“微信小程序页面列表加载更多”是一个高频搜索这个场景我深有体会。最基础的方案是使用页面的onReachBottom生命周期script setup import { ref } from vue import { onReachBottom } from dcloudio/uni-app const list ref([]) const page ref(1) const hasMore ref(true) const loading ref(false) async function loadList() { if (loading.value || !hasMore.value) return loading.value true const res await fetchList({ page: page.value, pageSize: 10 }) list.value list.value.concat(res.data.list) hasMore.value res.data.list.length 0 page.value 1 loading.value false } onReachBottom(() { loadList() }) /script这段代码本身不难但实际使用中要注意几个细节onReachBottom触底阈值在pages.json里的onReachBottomDistance可以调整默认是50px。列表页如果页面高度不够一屏onReachBottom可能不会触发。loading防重触底事件会连续触发好几次如果不加loading判断同一页数据会被请求多次造成重复数据。这是我见过最多人踩的坑。分页结束的“没有更多了”很多端上需要自定义一个底部占位文案用hasMore控制同时给列表容器加个底部padding否则最后一个item会被tabbar或内边距盖住。相比之下scroll-view方案滚动到底部加载更多更适合页面内嵌的局部列表比如分类Tab下的列表。它的问题是在App端和H5端scroll-view的滚动监听需要额外处理性能也比页面滚动差一些所以我通常只在局部滚动场景用。4. 页面里嵌入“外部世界”iframe、webview与HTML页面的处理“iframe嵌套页面”“html嵌入在uniapp的webview里面”“web页面pdf打印”——这几个搜索词说明很多项目都面临“把外部网页内容塞进App页面”的需求。这个方向坑最多我单独拿出来讲。4.1 小程序端的web-view域名限制是最大的坎在微信小程序里如果你用web-view加载一个网页前提是该域名已在小程序后台配置到“业务域名”列表里必须是https协议页面本身还要通过微信的域名校验。这就意味着你在开发环境里随便填一个本地IP地址是跑不通的必须走真机调试已校验域名。所以如果项目里确实有外嵌H5页面的需求我建议在需求评审阶段就跟产品确认好域名和白名单省得到开发阶段来来回回申请审核。4.2 App端和H5端的web-view自由度大但兼容性依旧要小心App端的web-view组件相对宽松可以加载本地html也可以加载线上URL。本地html文件可以直接放在项目目录下但要注意路径处理template web-view :srcwebUrl/web-view /template script setup import { ref } from vue const webUrl ref() // 本地html用相对路径加载 if (uni.getSystemInfoSync().platform android) { webUrl.value /static/html/index.html } else { webUrl.value ./static/html/index.html } /script安卓和iOS对本地html路径的处理略有差异实际开发时建议先写死测试一遍不要直接双端并行调试容易分不清是哪段的路径问题。H5端的web-view本质上是iframe所以你在H5端也可以用原生的iframe完成同样的嵌入逻辑。但如果你用了web-view组件在H5端它内部也是iframe实现。需要注意跨域页面在webview里无法执行JS通信比如父页面调用子页面的函数这个一定要提前和前端同事或第三方系统确认能否开放接口。4.3 关于PDF打印和网页内页面“web页面pdf打印”这类需求做法一般有两种一是iframe里嵌入一个带打印样式的HTML页面二是前端引入打印库来生成PDF。uniapp项目里App端和H5端可以直接用浏览器的window.print()H5端简单App端的webview里也基本可用但安卓部分机型要小心微信小程序端则没有直接办法通常需要后端生成PDF文件再预览。我的经验是不要在uniapp里硬撸PDF打印优先让后端输出PDF前端用uni.openDocument打开预览。实在要前端生成再考虑H5端嵌入专门的打印组件App端用webview加载打印页面去触发打印。5. 页面里的“重资产”地图、视频、图表与录音方向问题搜索词里“uniapp使用百度地图”“uniapp中播放视频用哪个比较好”“uniapp vue3 echarts 图片”“uniapp ips 录视频完毕后视频旋转了”都在这个范畴。这类功能组件在普通页面上你可能觉得不算什么但在uniapp里它们藏了很多兼容性问题。5.1 地图选型百度、高德还是腾讯uniapp项目里地图组件在App端是有差别的微信小程序端只能用腾讯地图微信内置地图组件这是平台限制。App端可以用高德地图也可以用腾讯地图还有一些项目用百度地图SDK。uniapp官方提供的map组件在App端底层是高德/腾讯的webview方案不是原生SDK所以某些高级能力比如导航、自定义地图样式、轨迹动画受限明显。如果你需要原生地图体验通常的做法是集成原生插件包括百度地图插件。这就要去插件市场找包我用过一些整体体验是“能用但别指望丝滑”。插件引入后地图组件渲染层级问题很常见尤其是页面里还有弹窗、悬浮按钮时盖不住地图层的问题会逼得你把弹窗改成cover-view来实现。如果你只是要展示地图、标点、定位官方map组件完全够用。不要把需求放大到“要导航能力”再选型否则交付时间会翻倍。配置方面不管是高德还是百度都需要在manifest.json里配置对应的SDK key并在App模块配置里勾选对应模块。这一步别漏否则真机一跑地图就是空白或报错。5.2 视频播放选型video组件是第一选择“uniapp中播放视频用哪个比较好”这个问题我的回答永远是先试官方video组件。官方video组件在App端和小程序端都有原生渲染支持全屏、倍速、弹幕等常见能力。很多人在视频播放上遇到的问题是“真机上卡”“层级盖不住”这些多数是网络视频编码格式或页面渲染层级的问题不一定需要换播放器。如果遇到要播放多路视频、做视频流媒体如直播或者自定义视频UI比如只在视频底部加一个自定义按钮官方组件不够灵活这时再引入第三方播放器或原生插件。市面上主流的方案包括开源的Video.jsH5端、小程序同层渲染插件主要用于打通视频和页面元素的层级、以及一些商业级播放器SDK。这类插件通常需要按平台单独配置我在App端集成过一次光“URL带鉴权参数导致无法播放”就排查了一个下午这类问题通常和播放器的referer校验、URL有效期机制有关不是uniapp本身的锅。关于直播流微信小程序端和App端对HLS、RTMP的支持也不同通常需要引入对应的直播插件不是换播放器就能解决的。所以播放器选型最好从视频资源格式和端上能力反推。5.3 EChartsvue3项目里图表页面的正确姿势vue3 ECharts在uniapp里是一个老话题。小程序端不能直接用DOM操作所以要用renderjsApp端和H5端适用或者echarts-for-weixin这类适配方案。Vue3项目里更推荐按需引入ECharts模块减小包体积。// 按需引入ECharts import * as echarts from echarts/core import { BarChart, LineChart, PieChart } from echarts/charts import { GridComponent, TooltipComponent, LegendComponent } from echarts/components import { CanvasRenderer } from echarts/renderers图表导出的需求热词里“echarts 图片”也很常见最稳的方案是用ECharts自带的getDataURL导出base64图片再配合uni.saveImageToPhotosAlbum保存到相册。但这个能力在小程序端能不能用要看渲染层的支持情况——小程序端用canvas渲染的图表导出要用canvas自身的api。我的建议是先定义好导出图片是一个页面内嵌能力还是一个独立功能别做到一半再追导出否则返工成本很高。5.4 录音视频方向旋转一个容易被忽略的安卓坑“uniapp ips 录视频完毕后视频旋转了”属于原生层面的兼容问题但项目里经常碰到。现象是安卓手机调用uni.startRecord或摄像头录制视频后视频在iOS上播放正常安卓上播放却转了90度或倒过来。原因是部分安卓机录制出来的视频没有正确的旋转元数据播放器只能按原始帧方向显示。处理方式有两个方向录制时不直接用uniapp封装好的uniAPI改用原生插件比如使用摄像头SDK插件并对视频做转码处理。如果只是展示视频在播放器层做旋转处理。video组件有个direction属性可以设置视频播放方向仅App端部分平台支持但不能完全依赖它因为有些播放器不认这个属性视频依然方向错误。我实测下来最稳妥的办法是视频上传到服务器后后端统一处理视频旋转转成标准方向的视频再返回。前端不需要管旋转也不至于把处理逻辑直接暴露在端上。这个方案需要后端配合但能一劳永逸。6. 页面“背后的配置”manifest、跨域与上线前必须检查的事页面写完之后真正的战斗才开始manifest配置、跨域、打包、部署、版本更新。搜索热词里“uniapp manifest配置”“uniapp如何配置跨域”“uniapp怎么打包”“H5部署”“页面升级访问永久更新”全都指向这一阶段。6.1 manifest.json页面之外的关键配置很多人以为manifest只是用来填AppID、App名称的其实它控制了所有端的基础行为App模块配置地图、推送、支付等原生模块要在App模块配置里勾选没勾选的模块即使代码写了也无法调用。App图标和启动图配置不同尺寸、不同平台要准备多套图标审核上架时这是必查项。H5配置路由模式hash/history、标题、跨域代理等都在H5配置里设置。小程序AppID每个小程序平台都要单独设置对应的AppID。我见过不少项目页面写得很完善结果打包后App上架时因为图标尺寸不对、隐私政策没配置等原因被驳回。所以manifest这块建议在项目中期就补齐而不是最后打包时再填。6.2 跨域H5端最常遇到的拦截热词“uniapp如何配置跨域”H5端部署后请求后台接口被浏览器拦截是常见问题。H5端的跨域解决方案通常有三种后端开启CORS最标准的方案加响应头Access-Control-Allow-Origin简单有效。H5开发环境下配置proxy在manifest.json的H5配置中设置devServer.proxy让开发环境的请求走代理。这样本地调试不会因跨域中断。生产环境用Nginx反向代理部署时把API请求反代到后端服务前端只访问同域地址避免跨域。我个人建议是能后端开CORS就开开不了就上Nginx代理。小程序端和App端其实没有跨域的概念除非你用H5打包的方式所以跨域问题主要集中在H5端。这里多说一句开发模式下如果遇到“无法显示您想要查看的页面”这类错误记得先看浏览器控制台里的具体报错多半是接口跨域、资源404或者路由配置问题不用急着改代码。6.3 打包上架安卓应用市场的“关卡”“uniapp上架安卓应用市场”是硬需求这里要说的主要是上架审核的共性问题应用签名每个应用市场需要不同的签名证书安卓打包时要用正式证书而不是开发证书否则后续无法覆盖安装。隐私政策现在几乎所有安卓市场都强制要求提供隐私政策页面链接并在App内部能打开。这个页面本身也是“uniapp的页面”的一种——一个纯展示的H5页或落地页。权限声明后台调用哪些权限要逐一核对。很多App被拒包是因为申请了不必要的权限比如一个阅读类应用去申请相机权限审核容易连环追问。目标API级别新版本安卓市场对targetSdkVersion有要求通常在30uniapp打包时默认值可能偏低需要手动调整。按我的经验上架流程最好在项目开发时就同步准备账号和材料等做完再申请审核周期会拖很长。6.4 H5部署与版本更新机制H5打包产物就是静态文件通常是dist/build/h5扔到Nginx或任意静态服务器就行。但H5有个特点用户浏览器会缓存版本更新后用户还在访问旧页面。这就是热词里各种“页面升级访问永久更新”的背景。解决方案通常是在index.html里加一段版本检查脚本或者后端在静态资源URL上带版本号。uniapp构建时也可以给资源文件名加hash这样文件名变化后浏览器自然加载新资源。比较省事的做法是在manifest.json的H5配置里设置title和路由模式history/hash。部署后手动清一次CDN或浏览器缓存保证最新版本生效。对于强运营场景有些项目会做一个“更新提示弹窗”检查服务器上的版本号如果落后就强制刷新到最新页面。这个“强制刷新”的关键就是版本号比对不要让用户卡在旧页面上。“永久更新”这个说法其实有点误导它指的是用户访问的页面始终跳转到能获取最新版本的入口。大家在实现时要特别注意不要设计成无限跳转的循环否则用户会卡在一个白屏页里。版本更新机制越简单越好能用资源hash解决的就不做复杂逻辑。7. 页面“疑难杂症”排查实录tabbar顶起、日志不打印、页面打不开最后一个部分集中解答我在项目里被问得最多的三个页面疑难杂症。它们看起来不相关但都发生在页面的运行环节。7.1 tabbar被输入法顶起热词“uniapp tabbar输入法顶起”。在App端当页面里输入框获得焦点弹出软键盘时底部原生的tabbar会被软键盘顶到键盘上方页面看起很丑。这个问题的根源是原生tabbar和软键盘层级的系统行为。解决方案通常分两类全局配置在App模块配置里找到软键盘相关配置把“软键盘弹出模式”设置为adjustResize或adjustPan具体要看平台。这个能解决部分顶起问题但有时会让页面整体被压缩。UI层规避把tabbar改成自定义悬浮tabbar盖在页面底部不去参与系统键盘的布局调整。这种方案能从根本上解决“顶起”问题但自定义tabbar的适配成本也不小需要在onShow里同步页面状态。我个人倾向于如果项目里有很多带输入框的tabbar页面就做自定义tabbar如果只有登录页这种非tabbar页面需要输入原生tabbar完全可以接受默认行为不做处理。7.2 uniapp不打印日志信息很多开发者在真机调试时发现console.log没有任何输出就以为代码错了。实际原因通常是你用的是Release包Release包的日志默认被屏蔽特别是安卓端。真机调试时控制台日志需要在HBuilderX的调试器里看手机上开发者模式下console输出需要主动开启。插件或原生层的日志不在console里要用原生日志查看工具。排查方法先用浏览器H5模式验证逻辑能跑通再用真机调试模式看console。如果真机调试还看不到log把手机上开发者选项里的“日志输出”或“USB调试日志”打开。7.3 页面打不开的各种诡异情况“由于不能验证所收到的数据是否可信无法显示您想要查看的页面”“请求页面被某个应用遮挡”“连接被阻止因为它是由公共页面启动的意图连接到你的本地网络上的设备或服务器”——这类报错文案五花八门但很多时候都指向同一个东西页面被系统或中间层拦掉了。在uniapp页面开发里我总结了下常见原因页面路径写错了navigateTo的路径少了“/pages”前缀或分包路径没写对。证书/域名校验拦截H5端加载的资源证书无效或者本地网络中间层拦截。应用后台运行被系统回收后回到前台页面白屏或打不开需要在应用生命周期里做页面状态恢复。排查思路依次是先看报错平台App/小程序/H5、再看控制台具体网络请求、然后查URL和域名配置最后检查页面路由跳转是否被全局逻辑比如登录态拦截卡住。不要一上来就怀疑框架。我遇到过最典型的一个案例是H5端在微信浏览器里打不开页面但普通浏览器正常。原因是微信浏览器的X5内核和普通浏览器内核差异导致部分CSS/JS不兼容页面报错。这时需要针对微信浏览器做降级兼容。7.4 小程序签名与合法域名问题“小程序签名uniapp”这个问题可以理解为小程序的请求签名与合法域名校验。微信小程序请求后端接口时如果后端没有配置合法域名请求会被拦截页面就会出现“无法处理页面”等错误。解决办法是在小程序管理后台配置request合法域名、uploadFile合法域名、downloadFile合法域名。开发模式下可以在开发者工具里勾选“不校验合法域名”但真机预览时依然要校验。有些项目还会涉及“数字签名”问题后台通过签名校验请求是否来自小程序端这个属于后端安全设计uniapp前端只需要在请求头里附上签名参数即可。如果项目要同时跑微信小程序和支付宝小程序合法域名列表是各自独立配置的不要忘了另一边。最后说点实在的做了这么多uniapp项目我最大的感受是写页面容易让页面在各种端上都稳定运行才是真正花时间的部分。很多问题看起来很怪根因却是manifest配置、域名校验、软键盘适配这类“页面之外”的东西。所以我把这篇总结的重点放在“页面之外”和“页面之内”的关联上希望大家在开发时能多考虑一步这个行为在不同端上表现一样吗这个配置漏了会不会导致页面打不开如果你们项目里也遇到过上面提到的某个坑欢迎在评论区聊聊你是怎么解决的。后面我争取再写一篇关于uniapp原生插件集成、App上架安卓应用市场的完整流程如果这篇文章对你有帮助顺手点个赞让我知道这个方向值得继续分享。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

双目相机选型与标定实战:D435i、MYNT S2、ZED Mini深度对比 2026/10/2 5:25:41

双目相机选型与标定实战:D435i、MYNT S2、ZED Mini深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenStack增加存储节点:从Cinder调度到LVM配置的完整实战 2026/10/2 5:25:35

OpenStack增加存储节点:从Cinder调度到LVM配置的完整实战

手头这套 OpenStack 云平台跑了大半年,计算节点加过好几次,但存储一直靠最初的三个节点扛着。最近业务那边又要扩容,我看了一下剩余容量,差不多快见底了。OpenStack 增加一个存储节点这件事,听起来好像就是装个服务改个…

阅读更多 →
Navicat连接人大金仓实操指南:从协议兼容到高频排障 2026/10/2 5:25:35

Navicat连接人大金仓实操指南:从协议兼容到高频排障

简介:使用Navicat连接人大金仓数据库的图文操作指南,专为需要跨平台管理人大金仓(KingbaseES)的数据库运维与开发人员准备。资源以Word文档形式完整记录了从Navicat官方渠道下载安装、创建数据库连接、配置账号密码,到…

阅读更多 →
饥荒烹饪锅配方源码化:数据结构、判定逻辑与Python实现 2026/10/2 5:25:35

饥荒烹饪锅配方源码化:数据结构、判定逻辑与Python实现

简介:面向《饥荒》模组开发者和Lua初学者的烹饪锅食物制作源码包,聚焦如何通过Lua脚本自定义食物物品、属性、食谱与特殊效果,帮助理解模组中物品定义、配方注册及逻辑调用的完整流程。压缩包共10个文件,以4个Lua脚本为核心&#…

阅读更多 →
决策模型Jev落地验证:客服工单分类聚合准确率提升指南 2026/10/2 5:25:35

决策模型Jev落地验证:客服工单分类聚合准确率提升指南

先说个背景。上个月我们团队在升级客服工单分流,原有规则和分类器卡在准确率 82% 上不去,我把市面上能试的决策类方案都过了一遍,TypeSafe AI 发布的 Jev 决策模型是让我最想单独写一篇验证记录的。原因是它的思路跟我要做的事几乎同频&#…

阅读更多 →
OpenStack存储节点扩容实战:Cinder LVM与iSCSI后端配置全解析 2026/10/2 5:25:35

OpenStack存储节点扩容实战:Cinder LVM与iSCSI后端配置全解析

1. 存储节点扩容前的整体思路与方案选型OpenStack增加存储节点这件事,说白了就是给云平台“加硬盘”。很多刚接触OpenStack的运维兄弟一上来就急着装包、改配置,结果部署完了发现卷创建失败、调度不上去,最后才回头研究架构,白白浪…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉