从零复刻Stripe官网动态背景:WebGL着色器与Next.js实战

news2026/5/10 5:11:08
1. 项目概述从零复刻 Stripe 官网的炫酷动态背景如果你是一名前端开发者或者对现代网页的视觉表现力着迷那你一定对 Stripe 的官网印象深刻。它那个丝滑流畅、色彩变幻的动态背景早已成为业界的视觉标杆。很多人第一次看到时都会好奇这到底是怎么做出来的是视频吗还是某种高级的 CSS 动画今天我们就来彻底拆解这个效果并手把手带你用 Next.js、React 和 WebGL 技术栈从零开始完整复刻一个 Stripe 风格的官网落地页。这个项目远不止是“抄”一个外观。它的核心价值在于我们不仅要实现那个标志性的动态渐变背景更要深入其技术内核——WebGL 着色器Shader。你将学到如何将复杂的 GLSL 代码模块化并封装成一个即插即用的 React 组件最终整合进一个生产级的 Next.js 应用中。无论你是想为自己的作品集增添一个亮眼项目还是希望在实际产品中应用这种高级视觉效果这篇内容都将提供从原理到实现的完整路径。我会基于一个高质量的开源实现ez0000001000000/Stripe-Clone进行深度解析并补充大量原始文档中未提及的实战细节、性能调优技巧和避坑指南。2. 技术栈选型与架构设计思路在动手之前我们先要搞清楚“用什么做”以及“为什么这么选”。一个技术选型的背后是对于项目需求、团队能力和长期维护的综合考量。2.1 核心框架为什么是 Next.js 而非纯 React项目选择了 Next.js 作为基础框架这是一个非常明智的决定。很多人可能会问一个看似以前端视觉效果为主的项目为什么需要 Next.js 这样的全栈框架首先性能与用户体验。Stripe 官网本身加载速度极快这离不开服务端渲染SSR或静态生成SSG的助力。Next.js 开箱即用的getStaticProps或getServerSideProps能确保我们的落地页在首次加载时就将完整的 HTML 送达用户浏览器这对搜索引擎优化SEO和首屏加载时间至关重要。虽然我们的动态背景依赖客户端 WebGL但页面的静态结构、文案、导航栏等都可以预先渲染实现最佳的性能平衡。其次开发体验与项目结构。Next.js 基于文件系统的路由pages或app目录让页面管理变得极其直观。对于这样一个以展示为主的单页落地页我们可以轻松地在pages/index.tsx中构建主页并通过其内置的 CSS 和 Sass 支持、图像优化组件来完善其他细节。这比从零配置一个 React 项目要高效、规范得多。最后面向未来。即使这个克隆项目目前只是一个单页但 Next.js 为它提供了无缝扩展的可能性。比如未来你想增加一个“定价”页面、一个“文档”板块或者集成简单的后端 APINext.js 都能平滑支持。2.2 视觉核心深入 WebGL 与 GLSL 着色器这是项目的灵魂所在。那个流动的、仿佛有生命的渐变背景其本质是一个运行在 GPU 上的小型程序——片段着色器Fragment Shader。为什么不能用 CSS 或 Canvas 2DCSS 渐变和动画能力有限无法实现这种基于复杂数学函数如噪声、三角函数的、实时演算的、且与视窗分辨率无关的平滑渐变。Canvas 2D API 虽然能绘制像素但计算依然在 CPU 上对于全屏、每帧都在变化的复杂图形性能是瓶颈难以稳定保持 60fps。WebGL 的优势它直接调用 GPU 进行并行计算。GPU 拥有成千上万个小核心特别擅长同时处理大量相同的计算任务比如为屏幕上的每一个像素点计算颜色。我们的动态背景正是将屏幕网格化每个像素点的颜色由我们编写的 GLSL 程序实时决定。这使得无论屏幕多大动画都能保持极度流畅。模块化着色器设计原始 Stripe 的实现可能是一个庞大的着色器文件。而本项目的一个精妙之处在于将着色器代码拆解vertex.js负责处理顶点位置虽然我们只是画一个全屏四边形但这是 WebGL 管线的必需步骤。noise.js封装了噪声函数如经典的 Simplex 或 Perlin 噪声这是产生有机、流动感的核心。blend.js定义了多种颜色混合模式控制多个颜色如何平滑过渡与交织。fragment.js主着色器引入上述模块结合时间变量、像素坐标计算出最终颜色。这种模块化设计极大地提升了代码的可读性和可维护性。你可以像搭积木一样更换不同的噪声算法或混合模式创造出独一无二的背景效果。2.3 样式与类型Sass 与 TypeScript 的强强联合Sass/SCSS在复刻一个设计精美的页面时CSS 的组织结构至关重要。Sass 的嵌套、变量、混合Mixin和函数等特性让我们能更有条理地管理诸如颜色主题、间距系统、响应式断点等样式。例如我们可以定义$stripe-blue: #635bff;这样的变量确保整个页面的品牌色一致且易于修改。TypeScript在涉及 WebGL 上下文操作、着色器程序编译等相对底层且易错的 API 调用时TypeScript 的静态类型检查是强大的安全网。它能确保我们传递给gl.uniform的数据类型正确避免运行时难以调试的黑色画面WebGL 常见问题。同时它为AnimatedGradient组件提供了清晰的属性接口Props让使用者一目了然。3. 核心实现拆解 AnimatedGradient 组件让我们深入到最核心的AnimatedGradient组件内部看看它是如何将 WebGL 的复杂性封装成一个简单的 React 组件的。3.1 组件初始化与 WebGL 上下文获取组件在挂载时useEffect或useLayoutEffect中需要执行一系列标准的 WebGL 初始化流程。这一步至关重要任何一个环节失败都会导致一片空白。// 伪代码流程示意 const canvasRef useRefHTMLCanvasElement(null); useEffect(() { const canvas canvasRef.current; if (!canvas) return; // 1. 获取 WebGL 上下文优先尝试 WebGL2失败则回退到 WebGL1 const gl canvas.getContext(webgl2) || canvas.getContext(webgl); if (!gl) { console.error(WebGL not supported); return; } // 2. 设置视口Viewport与画布尺寸匹配 const resize () { const dpr window.devicePixelRatio || 1; const rect canvas.getBoundingClientRect(); canvas.width rect.width * dpr; canvas.height rect.height * dpr; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); }; resize(); window.addEventListener(resize, resize); // 3. 创建着色器程序Shader Program const vertexShader compileShader(gl, gl.VERTEX_SHADER, vertexSource); const fragmentShader compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource); const program createProgram(gl, vertexShader, fragmentShader); gl.useProgram(program); // ... 后续步骤设置顶点缓冲区、获取Uniform变量位置等 }, []);注意这里有一个关键细节——设备像素比Device Pixel Ratio, DPR的处理。在高分辨率屏幕如 Retina 屏上如果不将canvas.width/height设置为 CSS 宽高的DPR倍WebGL 绘制的内容会显得模糊。我们必须根据getBoundingClientRect获取的实际显示尺寸乘以 DPR 来设置画布的内部像素尺寸然后再用gl.viewport告诉 WebGL 渲染到整个画布。3.2 着色器程序的编译与链接这是 WebGL 中最容易出错的部分。着色器代码是以字符串形式提供的需要在运行时编译。function compileShader(gl, type, source) { const shader gl.createShader(type); gl.shaderSource(shader, source); gl.compileShader(shader); // 检查编译状态 if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { const error gl.getShaderInfoLog(shader); gl.deleteShader(shader); throw new Error(Shader compilation failed: ${error}); } return shader; }实操心得在开发阶段务必在着色器编译和程序链接后添加严格的错误检查并将错误信息打印到控制台。GLSL 的错误信息有时比较晦涩但它是定位问题的唯一线索。可以将着色器源码也一并打印出来方便对照行号排查语法错误。3.3 动画循环与 Uniform 变量传递动态效果的核心在于一个持续的动画循环并在每一帧更新着色器中的uniform变量从 JavaScript 传入着色器的常量。useEffect(() { // ... 初始化代码 let animationFrameId: number; const startTime Date.now(); const animate () { // 计算自动画开始以来经过的时间秒用于驱动着色器中的运动 const currentTime (Date.now() - startTime) / 1000; // 更新着色器中的 uniform 变量 gl.uniform1f(uTimeLocation, currentTime); gl.uniform3fv(uColor1Location, hexToVec3(color1)); // 将十六进制颜色转换为 [r,g,b] 数组 // ... 更新其他颜色和参数 // 执行绘制命令 gl.drawArrays(gl.TRIANGLES, 0, 6); // 绘制两个三角形组成一个矩形全屏 // 请求下一帧 animationFrameId requestAnimationFrame(animate); }; animate(); // 清理函数取消动画循环移除事件监听器删除 WebGL 资源以防止内存泄漏 return () { cancelAnimationFrame(animationFrameId); window.removeEventListener(resize, resize); gl.deleteProgram(program); // ... 删除其他缓冲区和着色器 }; }, [color1, color2, color3, color4]); // 依赖项当自定义颜色改变时重新运行动画注意事项requestAnimationFrame是浏览器为动画优化的 API它会与显示器的刷新率同步通常是 60Hz。在animate函数中除了更新 uniform不要执行任何重计算量的逻辑否则会阻塞主线程导致动画卡顿。所有复杂的计算如噪声都应放在 GPU 的着色器中执行。3.4 响应式与性能优化一个优秀的全屏背景必须完美适配各种屏幕尺寸并且不能成为性能负担。画布尺寸同步如前所述我们在resize函数中同步画布尺寸。这里使用了getBoundingClientRect()而非canvas.width/height因为它能获取到元素经过 CSS 变换后的实际渲染尺寸更加准确。防抖Debounce窗口resize事件触发非常频繁。直接在其回调中执行 WebGL 视口重置和画布尺寸调整是昂贵的。务必添加防抖逻辑比如在 250ms 内只执行最后一次。let resizeTimeout; const handleResize () { clearTimeout(resizeTimeout); resizeTimeout setTimeout(() { resize(); // 可能还需要根据新的宽高比更新着色器中的相关uniform }, 250); }; window.addEventListener(resize, handleResize);后台标签页暂停当用户切换到其他浏览器标签时继续运行 WebGL 动画是浪费资源。可以通过监听visibilitychange事件来暂停和恢复动画循环。const handleVisibilityChange () { if (document.hidden) { cancelAnimationFrame(animationFrameId); } else { animate(); } }; document.addEventListener(visibilitychange, handleVisibilityChange);4. 复刻 Stripe 官网页面结构与样式细节有了动态背景组件我们还需要构建一个与之相匹配的前端界面。Stripe 官网的设计以简洁、清晰、富有空气感著称。4.1 布局与栅格系统Stripe 的布局并非简单的居中而是有精密的间距系统。我们可以使用 CSS Flexbox 或 Grid 来复刻。建议为容器设置最大宽度如max-width: 1280px并在两侧留出呼吸空间padding。导航栏、英雄区域Hero Section、功能展示区的对齐需要一丝不苟。// 使用 SCSS 变量定义布局系统 $container-max-width: 1280px; $gutter: 2rem; $section-spacing: 6rem; .container { max-width: $container-max-width; margin: 0 auto; padding-left: $gutter; padding-right: $gutter; } .hero { padding-top: 5rem; padding-bottom: $section-spacing; text-align: center; // 使用相对定位确保内容显示在 WebGL 画布之上 position: relative; z-index: 10; }4.2 字体与色彩系统字体Stripe 主要使用-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu等系统字体栈确保跨平台的一致性。字号、字重font-weight和行高line-height的搭配是塑造视觉层次的关键。例如主标题可能用font-size: 3.5rem; font-weight: 700; line-height: 1.1;。色彩除了动态背景界面的静态色彩需要精确提取。使用取色工具获取 Stripe 官网的按钮蓝色、文字灰色、边框浅灰色等。在 SCSS 中定义为变量。$color-primary: #635bff; $color-text: #1a1a1a; $color-text-light: #6b7280; $color-border: #e5e7eb; $color-background: #ffffff;4.3 交互细节与微动画Stripe 页面的按钮悬停、卡片浮动等微交互非常细腻。这些可以用 CSS Transition 或 Transform 轻松实现。.cta-button { background-color: $color-primary; color: white; padding: 0.875rem 2rem; border-radius: 0.375rem; font-weight: 600; transition: all 0.2s ease-in-out; display: inline-block; :hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(99, 91, 255, 0.3); } :active { transform: translateY(0); } }技巧为保持性能对动画属性使用transform和opacity因为这两个属性可以由 GPU 合成层单独处理避免重排Reflow或重绘Repaint。5. 开发、构建与部署全流程5.1 本地开发环境搭建按照项目 README 的步骤操作基本无误。这里补充几个细节# 克隆项目后安装依赖 npm install # 如果遇到 node-sass 等原生模块编译问题可以尝试使用 --legacy-peer-deps 标志 # npm install --legacy-peer-deps # 启动开发服务器 npm run dev启动后访问http://localhost:3000。Next.js 的热重载Hot Module Replacement功能非常强大修改 React 组件或 SCSS 文件会即时反映在浏览器中。但是修改 GLSL 着色器代码可能不会触发热重载因为它们是作为字符串导入的。你可能需要手动刷新页面或配置更高级的加载器。5.2 生产环境构建与优化开发完成后需要构建用于生产环境的优化版本。npm run build这个命令会启动 Next.js 的构建流程打包Bundling将项目中的所有 JavaScript 和 CSS 文件进行打包、压缩和代码分割。静态生成对于像首页这样的静态页面Next.js 会在构建时生成 HTML 文件。优化自动优化图片如果使用了next/image、对 CSS 进行压缩、对 JavaScript 进行 Tree Shaking 等。构建完成后你可以运行npm run start来启动生产服务器预览构建结果。在部署前务必仔细检查控制台是否有错误或警告。WebGL 背景在不同尺寸的浏览器窗口下是否正常显示。页面性能可以通过 Lighthouse 工具评分。5.3 部署到 Vercel推荐由于本项目使用 Next.js部署到其官方平台 Vercel 是最简单、最匹配的选择。将你的代码推送到 GitHub、GitLab 或 Bitbucket 仓库。登录 Vercel 点击 “Import Project”。选择你的仓库Vercel 会自动检测到这是 Next.js 项目并配置好构建设置。点击 “Deploy”。通常在一两分钟内你的网站就会拥有一个*.vercel.app的在线地址。Vercel 的优势在于自动 HTTPS免费提供 SSL 证书。全球 CDN让你的网站快速加载。自动 CI/CD每次推送到指定分支如main都会自动触发重新部署。预览部署为每个 Pull Request 生成独立的预览链接方便团队审查。6. 常见问题排查与性能调优实录在实际开发中你几乎一定会遇到下面这些问题。这里记录了我的排查思路和解决方案。6.1 WebGL 上下文获取失败或渲染为黑屏这是最常见的问题控制台可能没有报错但画布一片漆黑。问题现象可能原因排查步骤与解决方案画布纯黑/白着色器编译或链接错误1. 检查浏览器控制台是否有 WebGL 错误。2. 确保compileShader和createProgram函数中的错误检查逻辑已启用并正确打印日志。3. 逐行检查 GLSL 代码语法特别注意精度声明precision mediump float;。画布黑屏但有轮廓顶点着色器与片段着色器未正确连接1. 检查gl.bindAttribLocation或着色器中的layout(location)是否匹配。2. 确认顶点数据是否成功传入缓冲区并被正确绑定。部分设备黑屏不支持 WebGL 或权限问题1. 访问https://get.webgl.org/测试浏览器支持。2. 在 iOS Safari 等浏览器上WebGL 可能因内存限制或页面缩放被禁用需确保视口设置正确meta nameviewport contentwidthdevice-width, initial-scale1。画面闪烁或撕裂没有正确清除画布在每一帧绘制前调用gl.clear(gl.COLOR_BUFFER_BIT)。我的踩坑记录有一次黑屏问题困扰了我很久最后发现是 uniform 变量名在 JavaScript 和 GLSL 代码中大小写不一致。GLSL 是大小写敏感的u_time和u_Time被认为是两个不同的变量。务必保持完全一致。6.2 动画卡顿或帧率FPS过低流畅的动画是体验的核心。检查 JavaScript 性能使用 Chrome DevTools 的 Performance 面板录制几秒动画查看animate函数或requestAnimationFrame回调中是否有耗时的 JS 操作。复杂的计算应该移到 Web Worker 或直接设计在着色器中。简化着色器过于复杂的噪声函数、多层循环或高精度计算会压垮 GPU。尝试简化算法或降低精度从highp降到mediump。移动端 GPU 性能较弱需特别优化。减少绘制调用Draw Calls我们这个项目只有一个全屏绘制所以不是问题。但如果一个页面有多个 WebGL 物体合并它们可以减少绘制调用。画布尺寸过大在 4K 或 5K 显示器上画布像素可能超过 1500 万。可以尝试限制最大渲染分辨率例如不超过 1920x1080 的物理像素。const maxWidth 1920 * dpr; const maxHeight 1080 * dpr; canvas.width Math.min(rect.width * dpr, maxWidth); canvas.height Math.min(rect.height * dpr, maxHeight);6.3 移动端触摸交互与滚动性能在移动设备上全屏的 WebGL 画布可能会干扰页面的正常滚动。阻止画布上的默认触摸行为为 Canvas 元素添加 CSS 属性touch-action: none;可以防止手指在画布上滑动时触发页面滚动但需谨慎使用以免影响必要的交互。使用passive: true优化滚动如果你在window上监听了scroll或touchmove事件来驱动背景动画例如视差效果务必在addEventListener的选项中设置{ passive: true }这可以显著提升滚动性能。window.addEventListener(touchmove, handleTouchMove, { passive: true });移动端降级策略备选对于性能极其低下的旧移动设备可以考虑在运行时检测其 WebGL 支持能力或帧率动态降级为一段 CSS 渐变背景或静态图片。这可以通过一个简单的 Canvas 性能测试或navigator.hardwareConcurrency等 API 进行粗略判断。6.4 与页面其他元素的层级z-index问题Canvas 元素默认是“定位”元素可能会遮盖住后面的内容。标准的做法是div classNamerelative min-h-screen {/* Canvas 作为背景层绝对定位z-index 较低 */} canvas ref{canvasRef} classNameabsolute top-0 left-0 w-full h-full pointer-events-none style{{ zIndex: 1 }} / {/* 页面主要内容相对定位z-index 较高 */} div classNamerelative z-10 Header / Hero / {/* ... 其他内容 */} /div /div注意我们为 Canvas 添加了pointer-events: none这可以确保鼠标和触摸事件能够穿透画布被下方的内容捕获这对于页面上的按钮、链接交互至关重要。7. 扩展思路从克隆到创新完成一个精美的克隆只是第一步。掌握了这些技术后你可以进行无限创新交互式背景让背景对鼠标移动做出反应。将鼠标的归一化坐标mouseX / window.innerWidth,mouseY / window.innerHeight作为 uniform 传入着色器影响噪声的中心点或颜色的混合权重。动态数据驱动将背景的颜色或速度与某些实时数据绑定例如加密货币价格、音乐节奏或股票市场波动。3D 扩展将当前的 2D 片段着色器升级为真正的 3D 场景。使用 Three.js 或原生 WebGL 添加一些简单的几何体如漂浮的立方体、粒子系统并应用类似的渐变着色材质。主题化与配置化将AnimatedGradient组件升级允许用户通过 UI 滑块实时调整颜色、速度、噪声强度等参数并生成可分享的配置代码。这个项目就像一把钥匙为你打开了 WebGL 和高级网页动画的大门。复现 Stripe 效果的过程本质上是一次对现代前端图形编程的深度实践。当你理解了着色器如何运作、如何与 React 生态结合你就能创造出真正独特、令人过目不忘的视觉体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2599682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…