uinapp小程序自定义底部tabbar闪动白屏去除

大家好,我小白,最近有朋友群里说这个小程序自定义底部tab初次点击会白屏问我能不能解决,实际上这个问题困扰大家好几年了,一直无所谓毕竟也没啥影响哈哈。。。网上检索方案无非就是两种。

①使用原生tabbar

②tabbar为主页,其他的页面作为组件存在(页面非常复杂,管理起来麻烦,性能差)

这都不是咱们的想要的结果。。。。

首先说下底部自定义tabbar为什么会闪屏晃动白屏?

因为自定义底部tabbar作为组件存在,每个页面初次点击都会重新加载渲染一遍组件,特别是有些比我还菜的小白,没做缓存优化,每个tabbar页面都还需从接口从新请求一遍tabbar数据,算上网络请求时间闪屏更严重了。

1️⃣那咱们解决的第一步就是,缓存优化。

uni.setStorageSync()和vuex都可以,只要首页加载过了,其他页面直接复用数据能极大程度减少闪屏晃动的时间,vuex基于内存效果更好,使vuex把自定义tabbar数据放在计算属性,基本上小程序和app几乎看不到闪屏了。h5有轻微闪动,不仔细听察觉不到。这样基本无感知了。。。

如果要实时更新最新图标样式,做好版本号管理即可。

那有没有办法彻底去除一丝丝轻微闪动?

有!有的老板!在后面细说!

2️⃣提升每个页面内tabbar组件渲染优先级

看着好像页面同时渲染的,实际上还是有细微差距的,尽管可能毫秒级别,咱们能提升一点是一点,template内元素或者组件同权重前提下,是从上至下渲染。
所以最好把tabbar组件放在模板内 顶部

全局变量定义前(最先执行)

全局变量定义后 初始值

export default 外部最后一行(早于生命周期)

data 执行(初始化数据)

onLoad 触发(页面加载,可修改数据)

onShow 触发(页面显示)

【computed】

计算属性首次求值(模板依赖的计算属性就绪,自定义tab组件的依赖数据也在此阶段完成求值)

↓ 【此时开始渲染流程】

↓ - 解析template模板(严格从上至下解析,自定义tab组件放在模板顶部会被优先解析)

↓ - 创建虚拟DOM(按模板解析顺序生成对应的虚拟节点树)

↓ - 挂载真实DOM到页面(虚拟DOM转化为真实DOM并插入页面文档流)

↓ - 视觉上能看到页面元素/内容(真实DOM渲染到视图层,用户可感知)

↓ 【渲染完成后】

mounted 触发(DOM已挂载完成,可操作DOM)

3️⃣自定义底部tab页面的路径要添加到原生底部tab内。

我们只是把原生的底部tab隐藏了而已,做了个自定义图标和样式底部tab,并且实现实时在线更新图标和样式罢了。实际上页面跳转也使用原生的页面跳转方式。

我发现有的应用,直接在普通非tabbar页面加个自定义定底部tab,每次点击都都触发从左往右的换页动画😂🤣😓这不瞎搞嘛。。。。

邪修大法,道友可以试试看。

①首先每个底部tab页内加载逻辑,让其初次进入不渲染页面内容,不执行接口逻辑,只渲染tab组件。vuex做好每个tab页是否为初次点击的状态标记。确保每个页面非初次进入,才执行接口请求和页面渲染。额外加一个简单判断而已,对性能无影响。(这步可选,适合追求完美的人体验更好,也可以省略)

②用户初次打开应用,App.vue中给他来个全屏加载动画,禁止他操作

③ App.vue中遍历点击所有tab页面

 async preloadAllTabs() { uni.showLoading({ title: '正在加载...', mask: true }); try { const tabPaths = [ '/pages/index/index', '/pages/goods_cate/goods_cate', '/pages/order_addcart/order_addcart', '/pages/user/index' ]; // 邪修替客户快速点击所有底部tab页面 for (const path of tabPaths) { await new Promise(resolve => { uni.switchTab({ url: path, success: () => { setTimeout(resolve, 50); }, fail: (err) => { console.warn(`预加载${path}失败:`, err); resolve(); } }); }); } // 返回首页 await new Promise(resolve => { uni.switchTab({ url: '/pages/index/index', success: resolve, fail: resolve }); }); } catch (err) { console.error('tab预加载异常:', err); } finally { uni.hideLoading(); console.log('点完收工!'); //后续可选,使用vuex标记tab页是否初次加载 } },

至此邪功大成,已彻底去除自定义tab闪屏烦恼

追求完美的可以放在首页内触发,再自定义个更好看的加载动画。也就是最多耽误客户300ms时间提前帮客户点完所有页面,基本无感知的。

Read more

鸿蒙与Android双平台LLaMA.cpp部署指南(保姆级)

鸿蒙与Android双平台LLaMA.cpp部署指南(保姆级)

在鸿蒙(OpenHarmony)与 Android 上部署 LLaMA.cpp 模型推理全流程(超详细) 手把手完成模型转换 → 交叉编译 → 设备部署,支持 OpenHarmony 与 Android 双平台,面向 ARM64 真机。 📚目录 1. 前言 2. 环境准备 3. 模型准备(GGUF) 4. 鸿蒙交叉编译 5. Android 交叉编译 6. 推送至设备 7. 运行推理 8. 常见问题 9. 结语 一、前言 把大模型跑在手机/鸿蒙板子上,只需 llama.cpp + 交叉编译 + 推送运行

DCT-Net创意玩法:结合Stable Diffusion的混合艺术创作

DCT-Net创意玩法:结合Stable Diffusion的混合艺术创作 你是不是也经常遇到这种情况:作为一名数字艺术家,脑子里有无数天马行空的创意,想把真实人像变成赛博朋克风格、把风景照转成水墨画风,甚至融合多种艺术流派做出独一无二的作品。但一想到要装一堆AI模型、配环境、调参数,光是启动项目就得折腾半天,灵感早就飞走了。 别担心,我完全懂你的痛。我自己也是从“配置地狱”里爬出来的——曾经为了跑一个Stable Diffusion加DCT-Net的组合,装了三天环境,换了五种CUDA版本,最后还因为显存不够直接崩溃。但现在?我已经能在10分钟内完成部署,一键生成各种混合艺术效果,而且全程不用写代码! 这背后的关键,就是我们今天要聊的主角:集成式AI创作镜像。它已经预装好了DCT-Net、Stable Diffusion以及其他常用图像处理工具,所有依赖都配好了,你只需要点一下“启动”,就能立刻开始创作。 这篇文章就是为你量身打造的。无论你是刚接触AI绘画的小白,还是想提升效率的老手,都能通过这个镜像快速实现DCT-Net + Stable Diffusion 的混合艺术创作

Llama-3.2-3B参数详解与Ollama部署:3B小模型高效推理方案

Llama-3.2-3B参数详解与Ollama部署:3B小模型高效推理方案 1. 为什么3B小模型正在成为本地AI推理的新选择 你有没有试过在自己的笔记本上跑大模型?动辄十几GB显存、几分钟才出一行字的体验,确实让人望而却步。但最近,一个叫Llama-3.2-3B的模型悄悄火了——它只有30亿参数,却能在普通MacBook Air或中端Windows笔记本上流畅运行,响应速度接近实时对话。这不是妥协后的“阉割版”,而是Meta针对真实使用场景重新设计的轻量级主力选手。 很多人误以为“小模型=能力弱”,其实恰恰相反。Llama-3.2-3B不是简单地把大模型砍掉一半参数,而是从训练数据、指令微调策略到推理优化都做了针对性设计。它支持15种以上语言,对中文理解尤其扎实;在数学推理、代码补全、多轮对话等任务上,表现远超同尺寸竞品;更重要的是,它不挑硬件——连没有独立显卡的机器也能跑起来。 这篇文章不讲晦涩的架构图和训练细节,只聚焦三件事: * 这个3B模型到底“强在哪”,参数背后的真实能力是什么 * 怎么用Ollama一键部署,零配置开箱即用 * 部署后怎么调用、怎么提问、

工具篇-如何在Github Copilot中使用MCP服务?

工具篇-如何在Github Copilot中使用MCP服务?

Model Context Protocol (MCP) 是由 Anthropic 公司于 2024 年 11 月推出的一种开放协议标准,目的在于标准化 LLM 与外部数据源、工具及服务之间的交互方式。MCP 被广泛类比为“AI 领域的 USB-C 接口”。 一、vscode的安装 下载vscodeVisual Studio Code - Code Editing. Redefined安装完成打开 选择copilot,这个是AI助手,帮助你编程  然后注册登录,可以使用GitHub的账号登录,很多工具都可以通过GitHub帐号登录,所以注册一个GitHub帐号是很有必要的。 二、使用MCP 2.1 准备好MCP 先按这篇文章准备好高德地图的MCP:工具篇-Cherry Studio之MCP使用-ZEEKLOG博客 2.2 在Github Copilot中配置 MCP服务