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

cesium 材质 与 交互 以及 性能相关介绍

文章目录

    • cesium 材质 与 交互 以及 性能相关介绍
      • 1. Cesium 材质与着色器简介
      • 2. 具体实例应用核心代码及解释
      • 3. 代码解释
    • Cesium 交互
      • 1. 常见交互和事件类型
      • 2. 示例代码及解释
      • 3. 代码解释
    • cesium 性能优化
      • 数据加载与管理
      • 渲染优化
      • 相机与场景管理
      • 代码优化
      • 服务器端优化
    • 案例分享
      • 1. 数据分块与按需加载
        • 代码示例
        • 代码解释
      • 2. 视锥体剔除
        • 代码示例
        • 代码解释
      • 3. 优化事件处理(节流)
        • 代码示例
        • 代码解释

cesium 材质 与 交互 以及 性能相关介绍

1. Cesium 材质与着色器简介

Cesium 是一个用于创建基于 Web 的地理信息系统(GIS)应用的开源 JavaScript 库。材质和着色器在 Cesium 中起着重要作用,它们能让你自定义地理场景的外观。

  • 材质(Materials):Cesium 中的材质定义了对象表面的视觉属性,如颜色、光泽度、透明度等。Cesium 提供了多种内置材质,也允许你自定义材质。
  • 着色器(Shaders):着色器是运行在 GPU 上的小程序,用于计算图形的颜色和光照效果。在 Cesium 里,你可以通过编写自定义的着色器代码来实现复杂的视觉效果。

2. 具体实例应用核心代码及解释

以下是一个简单的示例,展示如何在 Cesium 中使用自定义材质和着色器来创建一个具有动态颜色变化的矩形。

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>Cesium Material and Shader Example</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style>
</head><body><div id="cesiumContainer"></div><script>// 初始化 Cesium Viewerconst viewer = new Cesium.Viewer('cesiumContainer');// 定义自定义材质const customMaterial = new Cesium.Material({fabric: {type: 'CustomMaterial',uniforms: {time: 0},source: `czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material = czm_getDefaultMaterial(materialInput);// 根据时间计算颜色vec3 color = vec3(sin(time), cos(time), 0.5);material.diffuse = color;return material;}`},translucent: false});// 创建矩形实体并应用自定义材质const rectangle = viewer.entities.add({rectangle: {coordinates: Cesium.Rectangle.fromDegrees(-100.0, 20.0, -90.0, 30.0),material: customMaterial}});// 动画更新时间const clock = viewer.clock;clock.onTick.addEventListener(function () {const currentTime = Cesium.JulianDate.toSeconds(clock.currentTime);customMaterial.uniforms.time = currentTime;});</script>
</body></html>

3. 代码解释

  • 初始化 Cesium Viewer:通过 new Cesium.Viewer('cesiumContainer') 创建一个 Cesium 查看器,将其挂载到 cesiumContainer 元素上。
  • 定义自定义材质
    • 使用 Cesium.Material 创建一个自定义材质。
    • fabric 对象包含材质的类型、制服(uniforms)和着色器源代码。
    • uniforms 中的 time 是一个可变的全局变量,用于控制颜色的变化。
    • source 中的着色器代码 czm_getMaterial 函数计算材质的颜色。这里根据时间 time 计算颜色,使颜色随时间动态变化。
  • 创建矩形实体并应用材质:使用 viewer.entities.add 创建一个矩形实体,并将自定义材质应用到矩形上。
  • 动画更新时间:通过监听时钟的 onTick 事件,在每一帧更新 time 制服的值,从而实现颜色的动态变化。

这个示例展示了如何在 Cesium 中使用自定义材质和着色器来创建一个具有动态效果的地理对象。你可以根据需要修改着色器代码,实现更复杂的视觉效果。

Cesium 交互

在 Cesium 里,交互和事件能让用户与地理场景进行互动,进而实现像点击、拖动、鼠标移动等操作。下面为你详细介绍常见的交互和事件以及对应的示例代码。

1. 常见交互和事件类型

  • 鼠标事件:像左键点击(LEFT_CLICK)、左键双击(LEFT_DOUBLE_CLICK)、鼠标移动(MOUSE_MOVE)、右键点击(RIGHT_CLICK)等。
  • 触摸事件:例如触摸开始(PINCH_START)、触摸移动(PINCH_MOVE)、触摸结束(PINCH_END)等。
  • 相机事件:相机移动开始(CAMERA_MOVE_START)、相机移动结束(CAMERA_MOVE_END)等。

2. 示例代码及解释

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>Cesium Interaction and Events Example</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style>
</head><body><div id="cesiumContainer"></div><script>// 初始化 Cesium Viewerconst viewer = new Cesium.Viewer('cesiumContainer');// 鼠标左键点击事件const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);handler.setInputAction(function (movement) {const ray = viewer.camera.getPickRay(movement.position);const cartesian = viewer.scene.globe.pick(ray, viewer.scene);if (cartesian) {const cartographic = Cesium.Cartographic.fromCartesian(cartesian);const longitude = Cesium.Math.toDegrees(cartographic.longitude);const latitude = Cesium.Math.toDegrees(cartographic.latitude);console.log(`Clicked at longitude: ${longitude}, latitude: ${latitude}`);}}, Cesium.ScreenSpaceEventType.LEFT_CLICK);// 鼠标移动事件handler.setInputAction(function (movement) {const ray = viewer.camera.getPickRay(movement.endPosition);const cartesian = viewer.scene.globe.pick(ray, viewer.scene);if (cartesian) {const cartographic = Cesium.Cartographic.fromCartesian(cartesian);const longitude = Cesium.Math.toDegrees(cartographic.longitude);const latitude = Cesium.Math.toDegrees(cartographic.latitude);console.log(`Mouse moved to longitude: ${longitude}, latitude: ${latitude}`);}}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);// 相机移动结束事件viewer.scene.camera.moveEnd.addEventListener(function () {const position = viewer.scene.camera.positionCartographic;const longitude = Cesium.Math.toDegrees(position.longitude);const latitude = Cesium.Math.toDegrees(position.latitude);const height = position.height;console.log(`Camera moved to longitude: ${longitude}, latitude: ${latitude}, height: ${height}`);});</script>
</body></html>

3. 代码解释

  • 初始化 Cesium Viewer:借助 new Cesium.Viewer('cesiumContainer') 创建一个 Cesium 查看器,将其挂载到 cesiumContainer 元素上。
  • 鼠标左键点击事件
    • 利用 Cesium.ScreenSpaceEventHandler 创建一个事件处理器。
    • 通过 setInputAction 方法为左键点击事件(Cesium.ScreenSpaceEventType.LEFT_CLICK)绑定处理函数。
    • 在处理函数里,运用 viewer.camera.getPickRay 获取鼠标点击位置的射线,再使用 viewer.scene.globe.pick 得到射线与地球表面的交点坐标,最后将其转换为经纬度并输出。
  • 鼠标移动事件
    • 同样使用 setInputAction 方法为鼠标移动事件(Cesium.ScreenSpaceEventType.MOUSE_MOVE)绑定处理函数。
    • 在处理函数中,获取鼠标移动位置的射线与地球表面的交点坐标,转换为经纬度并输出。
  • 相机移动结束事件
    • 借助 viewer.scene.camera.moveEnd.addEventListener 为相机移动结束事件绑定处理函数。
    • 在处理函数中,获取相机的当前位置,转换为经纬度和高度并输出。

这些示例展示了在 Cesium 中如何处理常见的交互和事件,你可以根据需求添加更多的交互逻辑。

cesium 性能优化

在使用 Cesium 开发地理信息系统(GIS)应用时,性能优化是至关重要的,它能显著提升用户体验,特别是在处理大规模地理数据和复杂场景时。以下从多个方面介绍 Cesium 性能优化的方法:

数据加载与管理

  • 数据压缩
    • 对地形、影像等数据进行压缩处理,例如使用有损压缩算法处理影像数据,能在不明显降低视觉效果的前提下,大幅减小数据体积,加快数据的下载和加载速度。
    • 对于矢量数据,可以采用数据编码算法(如 GeoJSON 的 TopoJSON 编码)进行压缩,减少数据传输量。
  • 数据分块与按需加载
    • 将大规模的地理数据分割成小块,根据用户的视野范围和相机位置,只加载当前可见区域的数据,避免一次性加载过多数据导致内存占用过高和加载时间过长。
    • 利用 Cesium 的 ImageryLayerTerrainProvider 等类的相关方法,实现数据的分块加载和动态更新。
  • 数据缓存
    • 利用浏览器的本地存储(如 localStorageIndexedDB)对已加载的数据进行缓存,当用户再次访问相同数据时,直接从本地缓存中读取,减少网络请求。
    • 对于频繁使用的地理数据,还可以在服务器端设置缓存机制,提高数据的响应速度。

渲染优化

  • 简化模型与几何数据
    • 对复杂的 3D 模型进行简化处理,减少模型的面数和顶点数,降低 GPU 的渲染负担。可以使用 3D 建模软件(如 Blender)或专业的模型简化工具进行处理。
    • 对于地理要素的几何数据,采用适当的简化算法(如 Douglas - Peucker 算法)进行简化,在保证数据精度的前提下,减少数据量。
  • 视锥体剔除
    • 视锥体剔除是一种常见的渲染优化技术,通过判断物体是否在相机的视锥体范围内,只渲染位于视锥体内的物体,避免对不可见物体进行不必要的渲染计算。
    • Cesium 会自动进行视锥体剔除,但在某些复杂场景下,可能需要手动调整相关参数以提高剔除效率。
  • 减少渲染状态切换
    • 渲染状态切换(如材质、纹理、着色器等的切换)会增加 GPU 的开销,尽量减少渲染状态的切换次数。可以将具有相同渲染状态的物体进行分组渲染,提高渲染效率。

相机与场景管理

  • 相机控制优化
    • 合理设置相机的移动速度和缩放范围,避免相机快速移动或缩放时导致大量数据的频繁加载和渲染。
    • 实现平滑的相机过渡效果,减少用户视觉上的卡顿感。
  • 场景分层与隐藏
    • 将场景中的元素进行分层管理,根据用户的需求和操作,动态显示或隐藏某些图层,减少不必要的渲染。
    • 例如,在进行大范围浏览时,可以隐藏一些细节图层,只显示主要的地理要素。

代码优化

  • 减少不必要的计算
    • 在代码中避免进行不必要的重复计算,特别是在循环中。可以将一些常量和不变的计算结果提前计算并缓存起来,避免每次都进行重复计算。
  • 优化事件处理
    • 合理管理事件监听器,避免在事件处理函数中进行复杂的计算和操作,防止事件处理函数执行时间过长导致页面卡顿。
    • 对于频繁触发的事件(如鼠标移动事件),可以采用节流(throttle)或防抖(debounce)技术进行优化。

服务器端优化

  • 分布式服务器架构
    • 采用分布式服务器架构,将地理数据存储和处理分布在多个服务器节点上,提高数据的并发处理能力和响应速度。
  • CDN 加速
    • 使用内容分发网络(CDN)来分发地理数据和静态资源,CDN 节点分布在全球各地,能够将数据更快速地传输给用户,减少网络延迟。

通过以上多个方面的优化,可以显著提升 Cesium 应用的性能,为用户提供更加流畅和高效的使用体验。

案例分享

下面为你提供一些基于前面提到的性能优化方法的具体 Cesium 案例应用代码及解释。

1. 数据分块与按需加载

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>Cesium Data Loading Optimization</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style>
</head><body><div id="cesiumContainer"></div><script>// 初始化 Cesium Viewerconst viewer = new Cesium.Viewer('cesiumContainer');// 添加影像图层,Cesium 会自动处理分块加载const imageryProvider = new Cesium.UrlTemplateImageryProvider({url: 'https://your - tile - server-url/{z}/{x}/{y}.png'});viewer.imageryLayers.addImageryProvider(imageryProvider);</script>
</body></html>
代码解释

此代码借助 UrlTemplateImageryProvider 添加影像图层,Cesium 会依据用户视野范围自动处理分块加载,仅加载当前可见区域的影像瓦片,从而减少数据加载量。

2. 视锥体剔除

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>Cesium Frustum Culling</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style>
</head><body><div id="cesiumContainer"></div><script>const viewer = new Cesium.Viewer('cesiumContainer');// 添加多个实体for (let i = 0; i < 100; i++) {const longitude = Cesium.Math.toRadians(-100 + i);const latitude = Cesium.Math.toRadians(30);const position = Cesium.Cartesian3.fromRadians(longitude, latitude);viewer.entities.add({position: position,point: {pixelSize: 10,color: Cesium.Color.RED}});}</script>
</body></html>
代码解释

代码中添加了多个点实体,Cesium 会自动进行视锥体剔除,仅渲染位于相机视锥体内的实体,避免对不可见实体进行渲染计算。

3. 优化事件处理(节流)

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>Cesium Event Throttle</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style>
</head><body><div id="cesiumContainer"></div><script>const viewer = new Cesium.Viewer('cesiumContainer');// 节流函数function throttle(func, delay) {let timer = null;return function () {if (!timer) {func.apply(this, arguments);timer = setTimeout(() => {timer = null;}, delay);}};}const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);const throttledMouseMove = throttle(function (movement) {const ray = viewer.camera.getPickRay(movement.endPosition);const cartesian = viewer.scene.globe.pick(ray, viewer.scene);if (cartesian) {const cartographic = Cesium.Cartographic.fromCartesian(cartesian);const longitude = Cesium.Math.toDegrees(cartographic.longitude);const latitude = Cesium.Math.toDegrees(cartographic.latitude);console.log(`Mouse moved to longitude: ${longitude}, latitude: ${latitude}`);}}, 200);handler.setInputAction(throttledMouseMove, Cesium.ScreenSpaceEventType.MOUSE_MOVE);</script>
</body></html>
代码解释

该代码定义了一个节流函数 throttle,用于处理鼠标移动事件。通过节流,避免了鼠标移动事件过于频繁触发处理函数,减少了不必要的计算,提升了性能。

相关文章:

cesium 材质 与 交互 以及 性能相关介绍

文章目录 cesium 材质 与 交互 以及 性能相关介绍1. Cesium 材质与着色器简介2. 具体实例应用核心代码及解释3. 代码解释 Cesium 交互1. 常见交互和事件类型2. 示例代码及解释3. 代码解释 cesium 性能优化数据加载与管理渲染优化相机与场景管理代码优化服务器端优化 案例分享1.…...

指令补充+样式绑定+计算属性+监听器

一、指令补充 1. 指令修饰符 1. 作用: 借助指令修饰符, 可以让指令更加强大 2. 分类: 1> 按键修饰符: 用来检测用户的按键, 配合键盘事件使用. keydown 和 keyup 语法: keydown.enter/v-on:keydown.enter 表示当enter按下的时候触发 keyup.enter/v-on:keyup.enter 表示当…...

基于Android的病虫害防治技术系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 基于Android的病虫害防治技术系统设计的目的是为用户提供一个病虫害防治技术管理的平台。与PC端应用程序相比&#xff0c;病虫害防治技术管理的设计主要面向于广大用户&#xff0c;旨在为用户提供一个查看科普内容&#xff0c;进行病虫识别、发帖交流的平台。 基于Androi…...

ffmpeg 使用不同编码器编码hevc的速度

1.核显uhd630 编码器hevc_qsv ffmpeg版本2024-03-14 2.73X 转码完成后大小 971mb 2.1680V4 编码器 libx265 ffmpeg版本2025-05-07 1.42x 转码完成后大小 176mb 3.RX588 编码器hevc_amf ffmpeg版本2024-03-14 转码完成后大小 376MB 4.1680v4dg1rx584 编码器hevc_amf ffm…...

【硬件模块】数码管模块

一位数码管 共阳极数码管&#xff1a;8个LED共用一个阳极 数字编码00xC010xF920xA430xB040x9950x9260x8270xF880x8090x90A0x88B0x83C0xC6D0xA1E0x86F0x8E 共阴极数码管&#xff1a;8个LED共用一个阴极 数字编码00x3F10x0620x5B30x4F40x6650x6D60x7D70x0780x7F90x6FA0x77B0x7…...

NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)

贪⼼算法是两极分化很严重的算法。简单的问题会让你觉得理所应当&#xff0c;难⼀点的问题会让你怀疑⼈⽣ 什么是贪⼼算法&#xff1f; 贪⼼算法&#xff0c;或者说是贪⼼策略&#xff1a;企图⽤局部最优找出全局最优。 把解决问题的过程分成若⼲步&#xff1b;解决每⼀步时…...

ubuntu22.04LTS设置中文输入法

打开搜狗网址直接下载软件&#xff0c;软件下载完成后&#xff0c;会弹出安装教程说明书。 网址:搜狗输入法linux-首页搜狗输入法for linux—支持全拼、简拼、模糊音、云输入、皮肤、中英混输https://shurufa.sogou.com/linux...

基于YOLOv8的热力图生成与可视化-支持自定义模型与置信度阈值的多维度分析

目标检测是计算机视觉领域的重要研究方向&#xff0c;而YOLO&#xff08;You Only Look Once&#xff09;系列算法因其高效性和准确性成为该领域的代表性方法。YOLOv8作为YOLO系列的最新版本&#xff0c;在目标检测任务中表现出色。然而&#xff0c;传统的目标检测结果通常以边…...

常见设计系统清单

机构设计系统toB/toC网站GoogleMaterial DesignCm3.material.ioIBM CarbonDesign SystemBcarbondesignsystem.comSalesforceLightning Design SystemBlightningdesignsystem.comMicrosoftFluent Design SystemCfluent2.microsoft.design阿里Ant DesignCant.designSAPFiori Desi…...

React编程高级主题:错误处理(Error Handling)

文章目录 **5.2 错误处理&#xff08;Error Handling&#xff09;概述****5.2.1 onErrorReturn / onErrorResume&#xff08;错误回退&#xff09;****1. onErrorReturn&#xff1a;提供默认值****2. onErrorResume&#xff1a;切换备用数据流** **5.2.2 retry / retryWhen&…...

【设计模式】代理模式

简介 假设你在网上购物时&#xff0c;快递员无法直接将包裹送到你手中&#xff08;比如你不在家&#xff09;。 代理模式的解决方案是&#xff1a; 快递员将包裹交给小区代收点&#xff08;代理&#xff09;&#xff0c;代收点代替你控制和管理包裹的访问。 代收点可以添加额外…...

局域网:电脑或移动设备作为主机实现局域网访问

电脑作为主机 1. 启用电脑的网络发现、SMB功能 2. 将访问设备开启WIFI或热点&#xff0c;用此电脑连接&#xff1b;或多台设备连接到同一WIFI 3. 此电脑打开命令行窗口&#xff0c;查看电脑本地的IP地址 Win系统&#xff1a;输入"ipconfig"&#xff0c;回车后如图 4.…...

图论的基础

E - Replace&#xff08;判环&#xff0c;破环成链&#xff09; #include <bits/stdc.h> #include <atcoder/dsu>using namespace std; using namespace atcoder;const int C 26;int main() {int n;cin >> n;string s, t;cin >> s >> t;if (s …...

Jetpack Compose CompositionLocal 深入解析:局部参数透传实践

Jetpack Compose CompositionLocal 深入解析&#xff1a;局部参数透传实践 在 Jetpack Compose 中&#xff0c;如何优雅地在组件之间传递数据&#xff0c;而不需要层层传参&#xff1f; CompositionLocal 就是为了解决这个问题的&#xff01; 1. 什么是 CompositionLocal&#…...

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组:3.数字诗意

题目1 数字诗意 在诗人的眼中&#xff0c;数字是生活的韵律&#xff0c;也是诗意的表达。 小蓝&#xff0c;当代顶级诗人与数学家&#xff0c;被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合&#xff0c;并用优雅的文字将数学之美展现于纸上。 某日&…...

Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>

首先&#xff0c;用户界面方面。Notepad是开源的&#xff0c;界面看起来比较简洁&#xff0c;可能更适合喜欢轻量级工具的用户。而UltraEdit作为商业软件&#xff0c;界面可能更现代化&#xff0c;功能布局更复杂一些。不过&#xff0c;UltraEdit支持更多的主题和自定义选项&am…...

P12013 [Ynoi April Fool‘s Round 2025] 牢夸 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作分两种&#xff1a; add ⁡ ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k)&#xff1a;对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r] 执行 …...

PostgreSQL LIKE 操作符详解

PostgreSQL LIKE 操作符详解 引言 在数据库查询中,LIKE 操作符是一种非常常用的字符串匹配工具。它可以帮助我们实现模糊查询,从而提高查询的灵活性。本文将详细介绍 PostgreSQL 中的 LIKE 操作符,包括其语法、使用方法以及一些注意事项。 LIKE 操作符语法 LIKE 操作符通…...

【前端】【Nuxt3】Nuxt3的生命周期

路由导航和中间件执行顺序 路由导航开始 中间件执行顺序&#xff1a; 全局中间件&#xff08;middleware/*.global.js&#xff09;布局中间件&#xff08;在definePageMeta中定义的布局级中间件&#xff09;页面中间件&#xff08;在definePageMeta中定义的页面级中间件&#…...

热更新简介+xLua基础调用

什么是冷更新 开发者将测试好的代码&#xff0c;发布到应用商店的审核平台&#xff0c;平台方会进行稳定性及性能测试。测试成功后&#xff0c;用户即可在AppStore看到应用的更新信息&#xff0c;用户点击应用更新后&#xff0c;需要先关闭应用&#xff0c;再进行更新。 什么是…...

大钲资本押注儒拉玛特全球业务,累计交付超2500条自动化生产线儒拉玛特有望重整雄风,我以为它破产倒闭了,担心很多非标兄弟们失业

1. 交易概况 时间与主体:大钲资本于2025年4月1日正式宣布完成对儒拉玛特自动化技术(苏州)有限公司及其全球子公司和关联企业的收购。交易通过大钲资本旗下美元基金设立的儒拉玛特(新加坡)公司作为控股主体进行,交易金额未披露。 收购范围:包括儒拉玛特亚太、欧洲、北美等…...

FPGA系统开发板调试过程不同芯片的移植步骤介绍

目录 1.我目前使用的开发板 2.不同开发板的移植 步骤一&#xff1a;芯片型号设置 步骤二&#xff1a;约束修改 步骤三、IP核更新 关于FPGA系统开发板调试过程中不同芯片的移植。我需要先理清楚FPGA开发中移植到不同芯片的一般流程。首先&#xff0c;移植通常涉及到更换FPG…...

算法设计与分析5(动态规划)

动态规划的基本思想 将一个问题划分为多个不独立的子问题&#xff0c;这些子问题在求解过程中可能会有些数据进行了重复计算。我们可以把计算过的数据保存起来&#xff0c;当下次遇到同样的数据计算时&#xff0c;就可以查表直接得到答案&#xff0c;而不是再次计算 动态规划…...

ModuleNotFoundError: No module named ‘matplotlib_inline‘

ModuleNotFoundError: No module named matplotlib_inline 1. ModuleNotFoundError: No module named matplotlib_inline2. matplotlib-inlineReferences 如果你在普通的 Python 脚本或命令行中运行代码&#xff0c;那么不需要 matplotlib_inline&#xff0c;因为普通的 Python…...

Mysql 中的 B+树 和 B 树在进行数据增删改查后的结构调整过程是怎样的?

B 树的增、删、改、查数据的调整过程 在 MySQL 中&#xff0c;B 树 是一种广泛用于存储引擎&#xff08;如 InnoDB&#xff09;中的索引结构。B 树的结构使得它非常适合于处理大量数据的插入、删除和查询等操作。B 树是一种自平衡的树数据结构&#xff0c;其中所有的值都存储在…...

在Rust生态中探索高性能HTTP服务器:Hyperlane初体验

在Rust生态中探索高性能HTTP服务器&#xff1a;Hyperlane初体验 最近在调研Rust的HTTP服务器方案时&#xff0c;发现了一个有趣的新项目——Hyperlane。这个轻量级库宣称在保持简洁API的同时&#xff0c;性能表现可圈可点。作为Rust生态的长期观察者&#xff0c;我决定深入体验…...

AI医疗诊疗系统设计方案

AI医疗诊疗系统设计方案 1. 项目概述 1.1 项目背景 随着人工智能技术的快速发展&#xff0c;将AI技术应用于医疗诊疗领域已成为提升医疗服务效率和质量的重要途径。本系统旨在通过AI技术辅助医生进行诊疗服务&#xff0c;提供智能化的医疗决策支持。 1.2 项目目标 提供全面…...

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路 StorageClass能自动创建pv 在控制器中&#xff0c;直接声明storageClassName&#xff0c;不仅能自动创建pvc&#xff0c;也能自动创建pv stoageclass来自于provisioner&#xff0c;provisioner来自于pod&#x…...

【移动编程技术】作业1 中国现代信息科技发展史、Android 系统概述与程序结构 作业解析

单选题&#xff08;共 20 题&#xff0c;每题 5 分&#xff0c;满分 100 分&#xff09; (单选题) 1946 年第一台计算机问世&#xff0c;计算机的发展经历了 4 个时代&#xff0c;它们是&#xff08;&#xff09;。 选项&#xff1a; A. 模拟计算机、数字计算机、混合计算机、智…...

SQL Server数据库异常-[SqlException (0x80131904): 执行超时已过期] 操作超时问题及数据库日志已满的解决方案

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;获得2024年博客之星荣誉证书&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开发技术&#xff0c…...

使用ollama部署本地大模型(没有GPU也可以),实现IDEA和VS Code的git commit自动生成

详情 问豆包&#xff0c;提示词如下&#xff1a;收集下ollama相关信息&#xff0c;包括但不限于&#xff1a;官网地址/GitHub地址/文档地址 官网地址 https://ollama.com/ GitHub 地址 https://github.com/ollama/ollama 文档地址 https://github.com/ollama/ollama/blo…...

线程同步与互斥(上)

上一篇&#xff1a;线程概念与控制https://blog.csdn.net/Small_entreprene/article/details/146704881?sharetypeblogdetail&sharerId146704881&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link我们学习了线程的控制及其相关概念之后&#…...

ngx_test_full_name

定义在 src\core\ngx_file.c static ngx_int_t ngx_test_full_name(ngx_str_t *name) { #if (NGX_WIN32)u_char c0, c1;c0 name->data[0];if (name->len < 2) {if (c0 /) {return 2;}return NGX_DECLINED;}c1 name->data[1];if (c1 :) {c0 | 0x20;if ((c0 &…...

R 列表:深入解析及其在数据分析中的应用

R 列表&#xff1a;深入解析及其在数据分析中的应用 引言 在R语言中&#xff0c;列表&#xff08;List&#xff09;是一种非常重要的数据结构&#xff0c;它允许将不同类型的数据项组合在一起。列表在数据分析、统计建模以及数据可视化中扮演着关键角色。本文将深入探讨R列表…...

智能体中的知识库、数据库与大模型详解

前言 在 LLM&#xff08;大语言模型&#xff09;驱动的智能体架构中&#xff0c;知识库&#xff08;Knowledge Base&#xff09;、数据库&#xff08;Database&#xff09;和大模型&#xff08;LLM&#xff09;是关键组成部分&#xff0c;它们共同决定了智能体的理解能力、决策…...

AMD Versal™ AI Core Series VCK190 Evaluation Kit

AMD Versal™ AI Core Series VCK190 Evaluation Kit AMD VCK190 是首款 Versal™ AI Core 系列评估套件&#xff0c;可帮助设计人员使用 AI 和 DSP 引擎开发解决方案&#xff0c;与当前的服务器级 CPU 相比&#xff0c;该引擎能够提供超过 100 倍的计算性能。Versal AI Core …...

ARM-外部中断,ADC模数转换器

根据您提供的图片&#xff0c;我们可以看到一个S3C2440微控制器的中断处理流程图。这个流程图展示了从中断请求源到CPU的整个中断处理过程。以下是流程图中各个部分与您提供的寄存器之间的关系&#xff1a; 请求源&#xff08;带sub寄存器&#xff09;&#xff1a; 这些是具体的…...

【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题整合 及 rpc流程示意

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

AWS 云运维管理指南

一、总体目标 高可用性:通过跨可用区 (AZ) 和跨区域 (Region) 的架构设计,确保系统运行可靠。性能优化:优化AWS资源使用,提升应用性能。安全合规:利用AWS内置安全服务,满足行业合规要求(如GDPR、ISO 27001、等保2.0)。成本管控:通过成本优化工具,减少浪费,实现FinOp…...

vector的实现:

我们之前讲了vector的接口&#xff0c;我们今天来看一下vector的底层的实现&#xff1a; 在gitee上面我们的这个已经实现好了&#xff0c;我们看gitee就可以&#xff1a;vector的实现/vector的实现/vector的实现.h 拾亿天歌/拾亿天歌 - 码云 - 开源中国 我们在这强调比较难的…...

flutter 专题 九十六 Flutter开发之常用Widgets

上一篇&#xff0c;我们介绍了基础Widgets&#xff0c;接下来&#xff0c;我们看一下Flutter开发中一些比较常见的Widget。 Flutter Widget采用现代响应式框架构建&#xff0c;这是从 React 中获得的灵感&#xff0c;中心思想是用widget构建你的UI。 Widget描述了他们的视图在…...

Linux环境下内存错误问题排查与修复

最近这几天服务器总是掉线&#xff0c;要查一下服务器的问题。可以首先查看一下计算机硬件&#xff0c;这是一台某鱼上拼凑的服务器&#xff1a; sudo lshw -shortH/W path Device Class Description system NF5270M3 (To be filled by O…...

flutter 专题 六十八 Flutter 多图片上传

使用Flutter进行应用开发时&#xff0c;经常会遇到选图、拍照等需求。如果要求不高&#xff0c;Flutter图库选择可以使用官方提供的image_picker&#xff0c;如果需要多选&#xff0c;那么可以使用multi_image_picker插件库。multi_image_picker库支持图库管理&#xff0c;多选…...

与总社团联合会合作啦

2025.4.2日&#xff0c;我社团向总社团联合会与暮光社团发起合作研究“浔川代码编辑器v2.0”。至3日&#xff0c;我社团收到回复&#xff1a; 总社团联合会&#xff1a; 总社团联合会已收到浔川社团官方联合会的申请&#xff0c;经考虑&#xff0c;我们同意与浔川社团官方联合…...

技巧:使用 ssh 设置隧道代理访问 github

问题 由于不可知的原因&#xff0c;在国内服务器不能访问 Github。但是有clone代码需求&#xff0c;这里介绍一种可行的方法。 解决办法 使用 ssh 设置代理&#xff0c;让代理服务器请求 github 解决。 第一步 ssh -fND 1080 用户名代理服务器IP这里的意思是监听 1080 端口…...

安装 TabbyAPI+Exllamav2 和 vLLM 的详细步骤

在 5090 显卡上成功安装 TabbyAPIExllamav2 和 vLLM 并非易事&#xff0c;经过一番摸索&#xff0c;我总结了以下详细步骤&#xff0c;希望能帮助大家少走弯路。 重要提示&#xff1a; 用户提供的 PyTorch 安装使用了 cu128&#xff0c;这并非标准 CUDA 版本。请根据你的系统实…...

Linux 进程信号

目录 信号 生活角度的信号 技术应用角度的信号 signal函数 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 信号的产生 通过键盘组合键发送信号 通过系统函数向进程发信号 由软件条件产生信号 由硬件异常产生信号 信号的保存 阻塞信号 ​…...

【学习篇】fastapi接口定义学习

fastapi学习链接&#xff1a;用户指南 1. 路径参数 访问fastapi接口的默认http路径为http://127.0.0.1:8000&#xff0c;/items为定义的接口函数read_item的路径&#xff0c;/{item_id}这个用大括号括起来的参数就是路径参数&#xff0c;接口函数可以通过引用这个路径参数名称…...

第十二步:react

React 1、安装 1、脚手架 npm i -g create-react-app&#xff1a;安装react官方脚手架create-react-app 项目名称&#xff1a;初始化项目 2、包简介 react&#xff1a;react框架的核心react-dom&#xff1a;react视图渲染核心react-native&#xff1a;构建和渲染App的核心…...

MySQL简介

MySQL 是由瑞典 MySQL AB 公司开发的一款开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;现归属 Oracle 公司。以下是其核心特点及简介&#xff1a; 1. 基础特性 - 开源免费&#xff1a;遵循 GPL 协议&#xff0c;个人及中小型企业可免费使用&#xff0c;…...