Hippy React 终端事件(Native Event)完整指南:从 Hippy.on 到 EventBus 的全局事件管理实战
跨平台移动开发前端【免费下载链接】HippyHippy is designed to easily build cross-platform dynamic apps. 项目地址https://gitcode.com/gh_mirrors/hi/Hippy点击查看免费下载本篇技术指南聚焦 Hippy 跨端框架中Hippy React 终端事件全局事件的管理机制屏幕旋转、网络变化、容器尺寸改变、JS 引擎销毁这类发给整个业务而非单个 UI 节点的事件应如何在前端监听、分发与卸载。读完本文你将掌握Hippy.on/off/emit、HippyEventEmitter与EventBus三套 API 的完整用法、各自的适用场景、事件底层分发链路EventDispatcher/HippyEventHub以及dealloc、destroyInstance、onSizeChanged等关键内置事件的正确使用姿势与源码级原理。什么是终端事件在 Hippy 业务开发中大部分事件点击、滑动、输入是绑定在单个 UI 节点上的由组件自身的 props 处理。但还有一类事件不是发给单个 UI而是发给整个业务例如屏幕的翻转rotate网络状态的变化networkStatusDidChange容器大小改变onSizeChanged如屏幕旋转、折叠屏切换JS 引擎销毁dealloc、界面节点销毁destroyInstance。这类事件统称为终端事件Native Event。Hippy React 为它们提供了两套管理方式见 native-event.md管理方式适用场景是否框架相关Hippy.on/Hippy.off/Hippy.emit监听dealloc、destroyInstance等特殊 C 底层事件也可手动定制 JS 全局事件框架无关HippyEventEmitter与EventBus2.15.0 后支持所有全局NativeEvent的统一分发如rotate也可手动定制 JS 全局事件Hippy React 定制 EventBus需要说明的是Hippy.on/off/emit实际是框架无关的底层全局事件监听器它在 driver/js/lib/global/Others.js 中被定义为Hippy.on on; Hippy.off off; Hippy.emit emit底层基于__GLOBAL__.globalEventHandle上每个事件名对应的Set集合维护监听器见 Others.js 中on/off的实现。emit触发时遍历Set中的监听器并逐个调用见 Others.js。HippyEventEmitter全局 NativeEvent 的监听入口HippyEventEmitter是 Hippy React 定制的 EventBus 之一所有全局NativeEvent都由其分发。以终端向前端发送rotate事件携带参数result为例import { HippyEventEmitter } from hippy/react; const hippyEventEmitter new HippyEventEmitter(); this.call hippyEventEmitter.addListener(rotate, evt console.log(evt.result));注意HippyEventEmitter无需反复实例化建议全局只初始化一次来复用。这与它的实现有关——在 emitter.ts 中构造函数接受一个可选的sharedListeners对象当多个实例共享同一个sharedListeners时它们会复用同一批底层HippyEventListener注册表避免同一个事件被重复注册到原生侧。从源码看addListener的完整行为见 emitter.ts校验event必须为字符串、callback必须为函数否则抛出TypeError(Invalid arguments for addListener)内部通过getNameForEvent生成eventEmitter_${event}形式的 key见 emitter.ts在hippyEventListeners中查找是否已存在该事件的HippyEventListener不存在则新建调用HippyEventListener.addCallback注册回调拿到一个数字形式的listenerId返回一个EventEmitterRevoker卸载器供后续移除监听使用。HippyEventEmitter 的其他能力除addListener外HippyEventEmitter还提供见 emitter.tsremoveAllListeners(event)移除指定事件的全部监听器并调用底层unregister()后删除注册表条目listenerSize(event)获取指定事件的监听器数量静态emit(event, param)触发事件通过EventDispatcher.getHippyEventHub获取事件中心并调用notifyEvent(HippyEventEmitter as any).emit HippyEventEmitter.prototype.emit将该方法挂到构造函数上因此可以直接HippyEventEmitter.emit(eventName, data)调用。事件卸载使用 revoker.remove()如果不需要使用的时候记得调用一下移除监听的方法一般放在组件的卸载生命周期中执行this.call.remove()这里的this.call正是addListener返回的EventEmitterRevoker。其实现见 emitter-revoker.ts它持有listenerId与绑定监听器bindListener调用remove()时执行bindListener.removeCallback(this.callback)并清空内部引用保证同一卸载器不会被重复移除。removeCallback的底层逻辑在 listener.ts它从EventDispatcher拿到该事件的HippyEventHub移除对应callbackId的事件处理器同时从listenerIdList数组中剔除该 id。最佳实践在 React 组件的componentWillUnmount或对应的卸载生命周期中调用remove()避免事件回调泄漏、导致组件卸载后仍被终端事件触发。EventBus2.15.0 之后推荐使用的全局事件对象2.15.0版本后Hippy React 增加了EventBus全局事件对象推荐采用该对象管理全局事件。与HippyEventEmitter不同EventBus是一个静态对象无需实例化且所有方法都返回EventBus本身天然支持链式调用。其完整实现位于 global-listener.ts并从hippy/react入口统一导出见 index.ts。最低支持版本2.15.0。on监听全局事件签名(events: string | string[], callback: (data?: any) void) EventBusevents: string | string[]指定事件名称。传入字符串时用于绑定单个事件传入数组时用于同时绑定多个事件。callback: (data?: any) void指定回调函数该回调函数可以作为EventBus.off的第二个参数。import { EventBus } from hippy/react; const rotateCallback (data) { console.log(rotate data, data data.orientation); } const accountChanged (data) { console.log(accountChanged data, data data.user); } // 链式调用注册事件 EventBus .on(rotate, rotateCallback) .on(accountChanged, accountChanged); /* 可以通过数组同时注册两个事件 EventBus.on([rotate1, rotate2], rotateCallback) */从源码看EventBus.on会先做参数校验非字符串/非数组、callback 非函数时抛出TypeError数组形式会遍历逐个调用内部addListener内部使用一个模块级的globalEventListeners对象按事件名缓存HippyEventListener与eventMapMapcallback, listenerId保证同一事件的多个回调互不干扰见 global-listener.ts。off移除全局事件签名(events: string | string[], callback?: (data?: any) void) EventBus两种用法只提供事件名称 → 移除对应事件的所有回调函数同时提供事件名称和回调函数 → 只移除事件上指定的回调函数。events: string | string[]指定事件名称支持单个字符串或数组批量移除。callback?: (data?: any) void可选参数与EventBus.on第二个参数对应为空时移除对应事件的所有监听器。import { EventBus } from hippy/react; const rotateCallback (data) { console.log(rotate data, data data.orientation); } EventBus.on(rotate, rotateCallback); // 只移除事件上指定的回调函数 EventBus.off(rotate, rotateCallback); // 移除对应事件的所有回调函数 EventBus.off(rotate);源码行为见 global-listener.ts未注册过的事件off会调用warn提示Event [${event}] has not been registered yet in EventBus不会抛错未传callback调用eventListener.unregister()注销原生事件中心清空eventMap并删除globalEventListeners条目传了callback通过eventMap.get(callback)找到对应的listenerId并调用removeCallback移除当eventMap.size 0时自动清理整个事件条目。emit触发全局事件签名(event: string, ...param: any) EventBusevent: string指定事件名称只能传单个事件。...param: any可选支持发送多个参数用作回调函数的参数。import { EventBus } from hippy/react; const rotateCallback (data1, data2) { console.log(rotate data, data1, data2); } EventBus.on(rotate, rotateCallback); // 触发 rotate 事件并携带参数 EventBus.emit(rotate, { orientation: vertical }, { degree: 90 });源码行为见 global-listener.tsemit通过EventDispatcher.getHippyEventHub(event)获取事件中心若事件尚未注册则warn提示并直接返回EventBus否则调用eventHub.notifyEvent(...param)把参数原样透传给所有已注册回调。注意emit本身只负责触发 JS 侧已注册的回调终端事件的实际来源是原生侧通过桥接向 JS 分发。sizeOf获取回调数量签名(event: string) numberevent: string指定事件名称。import { EventBus } from hippy/react; const rotateCallback1 (data) { console.log(rotate data, data data.orientation); } const rotateCallback2 (data) { console.log(rotate data, data data.orientation); } EventBus.on(rotate, rotateCallback1); EventBus.on(rotate, rotateCallback2); // 获取 rotate 事件所绑定的回调函数数量 console.log(EventBus.sizeOf(rotate)); // 2;源码实现见 global-listener.ts直接返回eventMap.size未注册的事件返回0。事件分发链路EventDispatcher 与 HippyEventHub理解终端事件的关键在于它背后统一的分发中心。HippyEventEmitter、EventBus的事件注册与触发最终都收敛到 dispatcher.ts 中的EventDispatcherregisterNativeEventHub(eventName)为事件名创建/复用HippyEventHub并存入模块级eventHubsMap见 dispatcher.tsgetHippyEventHub(eventName)按事件名取出事件中心见 dispatcher.tsreceiveNativeEvent(nativeEvent)接收原生侧传来的[eventName, eventParams]二元数组找到对应事件中心后调用notifyEvent(eventParams)完成分发见 dispatcher.ts。也就是说终端事件从前端视角看是监听-回调模型但从原生到 JS 的完整链路是原生模块 → 桥接调用receiveNativeEvent→HippyEventHub.notifyEvent→ 所有已注册回调。这也是EventBus.emit能触发HippyEventEmitter.addListener注册的同一事件回调反之亦然的根本原因——两者共用同一套事件中心注册表。另外EventDispatcher在初始化时被挂到global.__GLOBAL__.jsModuleList.EventDispatcher见 dispatcher.ts供原生桥接侧直接调用。JS 引擎销毁事件 dealloc最低支持版本2.3.4。当 Hippy JS 引擎被销毁前会触发dealloc事件能够保证回调函数里的最后一句 JS 代码被执行到。Hippy 业务可以通过监听dealloc事件做一些离开时的操作但回调函数不能使用asyncHippy.on(dealloc, () { // do something });从源码看该事件由两个层面配合实现JS 侧挂钩在 driver/js/lib/global/Event.js 中定义了global.HippyDealloc () { if (global.Hippy) { global.Hippy.emit(dealloc); } }把引擎销毁转译为一次Hippy.emit(dealloc)引擎侧调用在 driver/js/src/scope.cc 的Scope::WillExit()中先创建一个std::promise/future同步等待再向 JS 任务队列投递一个任务从全局对象上取出名为HippyDealloc的函数kDeallocFuncName[] HippyDealloc见 scope.cc校验其是函数后同步CallFunction执行最后future.get()阻塞等待 JS 执行完毕。这正是能保证回调里最后一句 JS 被执行到的原理引擎销毁流程会同步等待HippyDealloc执行完成才继续退出。也正因如此回调中不应使用async异步任务不会在同步等待窗口内完成避免出现离开前操作未执行完的竞态。界面节点销毁事件 destroyInstance最低支持版本2.3.4。当 RootView 被卸载时触发destroyInstance事件。与dealloc不同的是该事件早于dealloc触发且不会阻塞 JS 线程Hippy.on(destroyInstance, () { // do something });源码佐证见 driver/js/lib/global/Event.js 的__unloadInstance__实现global.__unloadInstance__ ((obj) { const { id } obj || {}; global.Hippy.emit(destroyInstance, id); Hippy.bridge.callNative(RootViewManager, removeRootView, id); });可以看到卸载实例时先emit(destroyInstance, id)此时还会把 RootView 的id作为参数传给回调随后才调用原生移除 RootView。由于该路径不涉及引擎级同步等待区别于WillExit的future.get()阻塞回调执行不会阻塞 JS 线程同时它发生在 RootView 真正被移除之前因此早于引擎销毁时的dealloc。两者可以配合使用destroyInstance适合做与界面节点相关的清理不阻塞、可异步dealloc适合做引擎退出前的最终收尾。容器大小改变事件 onSizeChangediOS 最低支持版本2.16.0。当容器大小改变时如屏幕旋转、折叠屏切换等会触发onSizeChanged事件import { HippyEventEmitter } from hippy/react; const hippyEventEmitter new HippyEventEmitter(); hippyEventEmitter.addListener(onSizeChanged, ({rootViewId, oldWidth, oldHeight, width, height}) { // rootViewId: root view id; oldWidth: 旧的宽度oldHeight: 旧的高度width: 新的宽度; height: 新的高度; console.log(size, rootViewId, oldWidth, oldHeight, width, height); });回调参数说明参数含义rootViewIdroot view 的 idoldWidth改变前的宽度oldHeight改变前的高度width改变后的宽度新宽度height改变后的高度新高度Android 侧的发送实现在 framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.javaonSizeChanged(int rootId, int w, int h, int ow, int oh)被回调后将新旧尺寸组装成HippyMap宽高均经PixelUtil.px2dp从像素转换为 dp然后调用EventDispatcher.receiveNativeEvent(onSizeChanged, hippyMap)送入 JS 侧——正是上文介绍的receiveNativeEvent分发链路。这也解释了为什么前端回调拿到的尺寸单位是 dp 而非像素。实战内置模块如何复用终端事件HippyEventEmitter不只是给业务自定义事件用的Hippy React 的内置模块本身就是其典型用户。理解这些现成案例有助于你在业务中照同样的模式组织事件。网络状态变化NetInfo在 driver/js/packages/hippy-react/src/modules/network-info.ts 中NetInfo 模块内部维护了一个单例const NetInfoEventEmitter: HippyEventEmitter new HippyEventEmitter()第 37 行把业务传入的change事件名映射到真实的原生事件networkStatusDidChange第 34 行再通过addListener注册回调const DEVICE_CONNECTIVITY_EVENT networkStatusDidChange; const handler NetInfoEventEmitter.addListener(event, (data) { listener(data); });其中有个值得借鉴的细节见 network-info.tsaddEventListener先用NetInfoEventEmitter.listenerSize(event)判断该事件是否已有监听器只有当计数小于 1 时才调用Bridge.callNative(NetInfo, addListener, event)向原生侧注册避免同一原生事件被重复订阅移除最后一个监听器后再调用原生removeListener第 104-107 行。这就是全局只初始化一次、按需注册/注销原生监听的参考实现。Android 返回键BackAndroid在 driver/js/packages/hippy-react/src/modules/back-android.ts 中同样维护了模块级单例const hippyEventEmitter new HippyEventEmitter()第 26 行在initEventListener()中通过hippyEventEmitter.addListener(hardwareBackPress, ...)监听 Android 硬件返回键事件再按订阅顺序逆序遍历backPressSubscriptions决定是否执行默认退出行为见 back-android.ts。自定义终端事件JS 侧手动 emit除了监听原生分发的事件三套 API 也都支持在 JS 内部手动定制全局事件。最简单的做法是直接使用Hippy.emit框架无关、不依赖 Hippy React 的事件中心注册表Hippy.emit(myCustomEvent, { key: value }); // 对应监听 Hippy.on(myCustomEvent, (data) console.log(data.key));若希望自定义事件与 NativeEvent 共用同一套EventDispatcher分发体系例如业务内不同模块之间通过事件中心解耦则推荐使用EventBus.emit它可以触发任何通过HippyEventEmitter.addListener或EventBus.on注册的回调因为两者最终都汇聚到同一个HippyEventHub。同时记得在不使用时调用Hippy.off(myCustomEvent)或EventBus.off(myCustomEvent)清理监听器避免内存泄漏。小结如何选择事件管理 API需求推荐 API说明监听dealloc、destroyInstance等引擎/实例生命周期事件Hippy.on框架无关底层基于globalEventHandle的Set由 C/桥接层直接触发监听屏幕旋转、容器尺寸变化等 NativeEventHippyEventEmitter.addListener/EventBus.on共享EventDispatcher事件中心回调参数为原生透传数据业务内自定义全局事件EventBus2.15.0支持链式调用、数组批量注册、sizeOf统计推荐首选事件监听器复用与销毁addListener返回的 revoker 调remove()在组件卸载生命周期执行配合listenerSize做原生侧按需注册/注销本文所有结论均可在仓库中验证API 定义与实现见 driver/js/packages/hippy-react/src/event、driver/js/lib/global/Event.js 与 driver/js/lib/global/Others.js引擎销毁的同步等待逻辑见 driver/js/src/scope.ccAndroid 侧onSizeChanged的发送见 HippyEngineManagerImpl.java。业务集成时可按需阅读 native-event.md 及 hippy-react 模块文档 获取更多模块用法。赞分享跨平台移动开发前端【免费下载链接】HippyHippy is designed to easily build cross-platform dynamic apps. 项目地址https://gitcode.com/gh_mirrors/hi/Hippy点击查看免费下载相关推荐ego-browser 命令找不到PATH 配置与 ~/.local/bin 修复方案ego browser 命令找不到PATH 配置与 ~/.local/bin 修复方案 ➤ 最可能根因 shell 的 PATH 中缺少 ~/.local/AI 技能浏览器控制React Native FastImage 事件处理终极指南从 onLoadStart 到 onError 的完整解析React Native FastImage 事件处理终极指南从 onLoadStart 到 onError 的完整解析 React Native FastI移动开发前端UI组件UFO Galaxy 事件系统核心Event System Core实战指南EventBus、事件类型与观察者模式的完整解析UFO Galaxy 事件系统核心Event System Core实战指南EventBus、事件类型与观察者模式的完整解析 本篇技术指南围绕 UFO 项人工智能AI Agent自主智能体GUI 自动化Agent 编排多智能体RAG上一篇终极指南3分钟搞定Windows微信QQ防撤回告别消息消失的烦恼下一篇如何快速上手PyTorch Forecasting5分钟构建你的第一个预测模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

开源高性能Office转PDF解决方案MiniPdf盐技术解析

开源高性能Office转PDF解决方案MiniPdf盐技术解析

1. 项目背景与核心价值在办公自动化领域,文档格式转换一直是刚需场景。传统方案要么依赖商业软件(如Adobe套件),要么需要调用云端API(存在隐私风险)。而.NET生态此前缺乏一个真正开源、可商用、高性能的Off…

2026/9/25 5:59:44 阅读更多 →
AIRI 记忆系统详解:如何用 DuckDB WASM + pgvector 为 AI 伴侣实现长期记忆

AIRI 记忆系统详解:如何用 DuckDB WASM + pgvector 为 AI 伴侣实现长期记忆

AIRI 记忆系统详解:如何用 DuckDB WASM pgvector 为 AI 伴侣实现长期记忆 【免费下载链接】airi 💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音…

2026/9/25 5:59:44 阅读更多 →
递归算法核心原理与经典案例解析

递归算法核心原理与经典案例解析

1. 递归思想的核心要义递归就像俄罗斯套娃,一个函数在执行过程中直接或间接调用自身,通过不断缩小问题规模最终解决原问题。这种"分而治之"的思想在计算机科学中占据着重要地位,其核心在于两个关键要素:基线条件&#x…

2026/9/25 5:59:43 阅读更多 →

最新新闻

Linux服务器SSH连接与GPU开发环境实操指南

Linux服务器SSH连接与GPU开发环境实操指南

1. 项目概述:这不是“连服务器”,而是重建你和算力之间的信任链 “手把手教你如何连上实验室的服务器”——这句话在研究生新生群里刷屏的频率,几乎和开学季的快递单号一样高。但真正点开教程的人,十有八九卡在第二步&#xff1a…

2026/9/25 9:40:41 阅读更多 →
智谱GLM开源霸榜与OCR、Agent落地实战:模型部署、离线OCR及开发路线全解析

智谱GLM开源霸榜与OCR、Agent落地实战:模型部署、离线OCR及开发路线全解析

1. 从一份月报里拆出来的四条技术主线月初刷到"将门月报"这个栏目的时候,我第一反应是:这类月报信息密度高,但大多数人扫一眼标题就划走了,真正有价值的东西全埋在细节里。这次标题里塞了四个关键词——智谱开源多个GLM…

2026/9/25 9:40:41 阅读更多 →
Atlas 300V 24G部署YOLO全流程实战:从推理加速卡到模型落地

Atlas 300V 24G部署YOLO全流程实战:从推理加速卡到模型落地

最近后台收到好几个问题,都是类似的:atlas部署yolo到底怎么搞?还有朋友直接拿热搜词来问,atlas 300V 24G 是运算加速卡吗?这里先给个明确结论——它是,而且是很典型的AI推理加速卡。但它是“加速卡”不代表…

2026/9/25 9:40:41 阅读更多 →
Atlas 300V 24G推理加速卡部署YOLOv5完整指南

Atlas 300V 24G推理加速卡部署YOLOv5完整指南

前两天有朋友问我:Atlas 300V 24G这卡是不是运算加速卡?能不能直接拿来部署YOLO?我一开始觉得这问题挺基础,但聊下来发现,很多刚接触昇腾生态的朋友对这块卡的定位其实不太清楚。它既不是普通显卡,也不是用…

2026/9/25 9:40:41 阅读更多 →
DeepSeek完全指南:从V3/R1模型分工到API接入与本地部署

DeepSeek完全指南:从V3/R1模型分工到API接入与本地部署

1. 为什么“免费AI之王”这个说法值得认真对待第一次看到“DeepSeek完全指南:免费AI之王,你只用了10%的功能”这个标题,我的反应是:又一个标题党。但真正把DeepSeek的网页端、App端、API端都摸了一遍之后,我收回这个判…

2026/9/25 9:40:40 阅读更多 →
Atlas 300V 24G部署YOLO全流程:从硬件认知到AscendCL推理优化

Atlas 300V 24G部署YOLO全流程:从硬件认知到AscendCL推理优化

1. 先回答那个热搜问题:300V 24G 到底是不是“运算加速卡”你会搜到“atlas 300v 24g 是运算加速卡吗”,说明很多人第一次拿到这张卡时都有同样的困惑。直接给结论:它是运算加速卡,但和大多数人脑子里的“GPU 运算卡”不是一回事。…

2026/9/25 9:39:40 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →