前端 PWA 新方法:别再忽视 PWA 了

news2026/4/15 18:44:24
前端 PWA 新方法别再忽视 PWA 了什么是前端 PWA 新方法前端 PWA 新方法是指在前端开发中随着技术的发展出现的新的 PWAProgressive Web App技术和方法。别以为 PWA 只是添加一个 manifest.json 文件那是十年前的玩法了。为什么需要关注前端 PWA 新方法用户体验提供类原生应用的用户体验离线访问支持离线访问提高应用可靠性安装能力可以安装到主屏幕提高用户粘性推送通知支持推送通知提高用户engagement性能提高应用性能减少加载时间前端 PWA 新方法1. manifest.json 配置使用现代 manifest.json 配置提供更好的安装体验。// manifest.json { name: My PWA App, short_name: My App, description: A Progressive Web App, start_url: /, display: standalone, background_color: #ffffff, theme_color: #007bff, icons: [ { src: /icons/icon-72x72.png, sizes: 72x72, type: image/png, purpose: any maskable }, { src: /icons/icon-96x96.png, sizes: 96x96, type: image/png, purpose: any maskable }, { src: /icons/icon-128x128.png, sizes: 128x128, type: image/png, purpose: any maskable }, { src: /icons/icon-144x144.png, sizes: 144x144, type: image/png, purpose: any maskable }, { src: /icons/icon-152x152.png, sizes: 152x152, type: image/png, purpose: any maskable }, { src: /icons/icon-192x192.png, sizes: 192x192, type: image/png, purpose: any maskable }, { src: /icons/icon-384x384.png, sizes: 384x384, type: image/png, purpose: any maskable }, { src: /icons/icon-512x512.png, sizes: 512x512, type: image/png, purpose: any maskable } ], orientation: portrait, categories: [productivity, utilities], screenshots: [ { src: /screenshots/screenshot1.png, sizes: 1280x720, type: image/png }, { src: /screenshots/screenshot2.png, sizes: 1280x720, type: image/png } ], shortcuts: [ { name: New Note, short_name: New, description: Create a new note, url: /new-note, icons: [{ src: /icons/shortcut-icon.png, sizes: 192x192 }] }, { name: My Notes, short_name: Notes, description: View my notes, url: /my-notes, icons: [{ src: /icons/shortcut-icon.png, sizes: 192x192 }] } ], iarc_rating_id: e84b072d-71b3-4d3e-86ae-31a8ce4e53b7 }2. Service Worker 配置使用现代 Service Worker 配置提供更好的离线体验。// service-worker.js const CACHE_NAME my-pwa-cache-v1; const ASSETS [ /, /index.html, /manifest.json, /service-worker.js, /css/style.css, /js/main.js, /icons/icon-512x512.png ]; // 安装 Service Worker self.addEventListener(install, (event) { event.waitUntil( caches.open(CACHE_NAME) .then((cache) { console.log(Opened cache); return cache.addAll(ASSETS); }) ); self.skipWaiting(); }); // 激活 Service Worker self.addEventListener(activate, (event) { const cacheWhitelist [CACHE_NAME]; event.waitUntil( caches.keys().then((cacheNames) { return Promise.all( cacheNames.map((cacheName) { if (cacheWhitelist.indexOf(cacheName) -1) { return caches.delete(cacheName); } }) ); }) ); self.clients.claim(); }); // 拦截网络请求 self.addEventListener(fetch, (event) { event.respondWith( caches.match(event.request) .then((response) { if (response) { return response; } return fetch(event.request) .then((response) { if (!response || response.status ! 200 || response.type ! basic) { return response; } const responseToCache response.clone(); caches.open(CACHE_NAME) .then((cache) { cache.put(event.request, responseToCache); }); return response; }) .catch(() { if (event.request.mode navigate) { return caches.match(/offline.html); } }); }) ); }); // 推送通知 self.addEventListener(push, (event) { const data event.data.json(); const options { body: data.body, icon: /icons/icon-192x192.png, badge: /icons/badge.png, vibrate: [100, 50, 100], data: { url: data.url }, actions: [ { action: view, title: View Details }, { action: close, title: Close } ] }; event.waitUntil( self.registration.showNotification(data.title, options) ); }); // 通知点击 self.addEventListener(notificationclick, (event) { event.notification.close(); if (event.action view) { event.waitUntil( clients.openWindow(event.notification.data.url) ); } });3. PWA 安装提示使用现代 PWA 安装提示提供更好的安装体验。// 检测是否支持 PWA 安装 let deferredPrompt; window.addEventListener(beforeinstallprompt, (e) { e.preventDefault(); deferredPrompt e; // 显示自定义安装按钮 document.getElementById(install-btn).style.display block; }); // 安装 PWA document.getElementById(install-btn).addEventListener(click, async () { if (!deferredPrompt) return; deferredPrompt.prompt(); const { outcome } await deferredPrompt.userChoice; console.log(User ${outcome accepted ? accepted : dismissed} the install prompt); deferredPrompt null; document.getElementById(install-btn).style.display none; }); // 检测 PWA 是否安装 window.addEventListener(appinstalled, (evt) { console.log(PWA was installed); document.getElementById(install-btn).style.display none; }); // 检测 PWA 运行环境 function isPWA() { return window.matchMedia((display-mode: standalone)).matches || window.navigator.standalone || document.referrer.includes(android-app://); } if (isPWA()) { console.log(Running as PWA); // 隐藏安装按钮 document.getElementById(install-btn).style.display none; }4. PWA 离线功能使用现代 PWA 离线功能提供更好的离线体验。// 检测网络状态 function updateOnlineStatus() { const status navigator.onLine ? online : offline; document.getElementById(status).textContent You are currently ${status}; if (!navigator.onLine) { document.getElementById(offline-message).style.display block; } else { document.getElementById(offline-message).style.display none; } } window.addEventListener(online, updateOnlineStatus); window.addEventListener(offline, updateOnlineStatus); // 初始检测 updateOnlineStatus(); // 离线数据存储 function saveDataOffline(data) { localStorage.setItem(offline-data, JSON.stringify(data)); console.log(Data saved offline); } function loadDataOffline() { const data localStorage.getItem(offline-data); if (data) { console.log(Loaded data from offline storage); return JSON.parse(data); } return null; } // 同步离线数据 async function syncOfflineData() { if (navigator.onLine) { const offlineData loadDataOffline(); if (offlineData) { try { const response await fetch(/api/sync, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(offlineData) }); if (response.ok) { localStorage.removeItem(offline-data); console.log(Offline data synced); } } catch (error) { console.error(Error syncing offline data:, error); } } } } // 监听网络恢复 window.addEventListener(online, syncOfflineData); // 定期同步 setInterval(syncOfflineData, 60000); // 每 60 秒尝试同步5. PWA 推送通知使用现代 PWA 推送通知提供更好的用户engagement。// 请求推送通知权限 async function requestNotificationPermission() { if (Notification in window) { const permission await Notification.requestPermission(); if (permission granted) { console.log(Notification permission granted); await subscribeToPush(); } else { console.log(Notification permission denied); } } } // 订阅推送通知 async function subscribeToPush() { if (serviceWorker in navigator PushManager in window) { const registration await navigator.serviceWorker.ready; let subscription await registration.pushManager.getSubscription(); if (!subscription) { subscription await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(YOUR_PUBLIC_VAPID_KEY) }); // 发送订阅信息到服务器 await sendSubscriptionToServer(subscription); } } } // 发送订阅信息到服务器 async function sendSubscriptionToServer(subscription) { try { const response await fetch(/api/push-subscribe, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(subscription) }); if (response.ok) { console.log(Subscription sent to server); } } catch (error) { console.error(Error sending subscription:, error); } } // 辅助函数将 Base64 URL 转换为 Uint8Array function urlBase64ToUint8Array(base64String) { const padding .repeat((4 - base64String.length % 4) % 4); const base64 (base64String padding) .replace(/-/g, ) .replace(/_/g, /); const rawData window.atob(base64); const outputArray new Uint8Array(rawData.length); for (let i 0; i rawData.length; i) { outputArray[i] rawData.charCodeAt(i); } return outputArray; } // 发送推送通知 async function sendNotification() { try { const response await fetch(/api/send-notification, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ title: New Notification, body: This is a test notification, url: / }) }); if (response.ok) { console.log(Notification sent); } } catch (error) { console.error(Error sending notification:, error); } }6. PWA 性能优化使用现代 PWA 性能优化提高应用性能。// 预缓存关键资源 self.addEventListener(install, (event) { event.waitUntil( caches.open(my-pwa-cache-v1) .then((cache) { return cache.addAll([ /, /index.html, /manifest.json, /service-worker.js, /css/style.css, /js/main.js, /icons/icon-512x512.png ]); }) ); }); // 缓存策略 self.addEventListener(fetch, (event) { const url new URL(event.request.url); // 静态资源缓存优先 if (url.pathname.startsWith(/css/) || url.pathname.startsWith(/js/) || url.pathname.startsWith(/icons/)) { event.respondWith( caches.match(event.request) .then((response) { return response || fetch(event.request) .then((response) { const responseToCache response.clone(); caches.open(my-pwa-cache-v1) .then((cache) { cache.put(event.request, responseToCache); }); return response; }); }) ); } // API 请求网络优先 else if (url.pathname.startsWith(/api/)) { event.respondWith( fetch(event.request) .then((response) { return response; }) .catch(() { return caches.match(/offline.html); }) ); } // 页面请求缓存优先回退到网络 else { event.respondWith( caches.match(event.request) .then((response) { return response || fetch(event.request) .then((response) { const responseToCache response.clone(); caches.open(my-pwa-cache-v1) .then((cache) { cache.put(event.request, responseToCache); }); return response; }) .catch(() { return caches.match(/offline.html); }); }) ); } }); // 后台同步 self.addEventListener(sync, (event) { if (event.tag sync-data) { event.waitUntil(syncData()); } }); async function syncData() { // 同步数据逻辑 console.log(Background sync triggered); } // 客户端注册后台同步 async function registerSync() { if (serviceWorker in navigator SyncManager in window) { const registration await navigator.serviceWorker.ready; await registration.sync.register(sync-data); console.log(Background sync registered); } }7. PWA 可访问性使用现代 PWA 可访问性提高应用可访问性。// 可访问性最佳实践 // 1. 语义化 HTML // 使用语义化 HTML 元素 // 2. ARIA 标签 // 为非语义化元素添加 ARIA 标签 // 3. 键盘导航 // 确保所有交互元素可通过键盘访问 // 4. 颜色对比度 // 确保文本与背景的对比度符合 WCAG 标准 // 5. 屏幕阅读器支持 // 确保应用可被屏幕阅读器正确读取 // 6. 焦点管理 // 合理管理焦点提高键盘导航体验 // 7. 错误处理 // 为错误提供清晰的反馈 // 8. 字体大小 // 允许用户调整字体大小 // 9. 动画控制 // 提供关闭动画的选项减少对用户的干扰 // 10. 测试 // 使用可访问性测试工具测试应用 // 可访问性测试工具 // - Lighthouse // - axe-core // - WAVE // - Accessibility Insights // 示例使用 axe-core 进行可访问性测试 import axe from axe-core; axe.run(document, (err, results) { if (err) { console.error(Error running axe:, err); return; } if (results.violations.length 0) { console.log(Accessibility violations:, results.violations); } else { console.log(No accessibility violations found!); } });8. PWA 分析和监控使用现代 PWA 分析和监控了解应用使用情况。// 分析工具集成 // Google Analytics // gtag.js window.dataLayer window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, UA-XXXXXXXX-X); // Google Analytics 4 // gtag.js window.dataLayer window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-XXXXXXXXXX); // PWA 特定事件跟踪 // 安装事件 gtag(event, pwa_install, { event_category: PWA, event_label: User installed PWA }); // 离线事件 gtag(event, pwa_offline, { event_category: PWA, event_label: User went offline }); // 推送通知事件 gtag(event, pwa_notification, { event_category: PWA, event_label: User received notification }); // 监控 Service Worker // 错误监控 serviceWorker.addEventListener(error, (error) { console.error(Service Worker error:, error); // 发送错误到监控服务 }); // 性能监控 self.addEventListener(fetch, (event) { const start performance.now(); event.respondWith( fetch(event.request) .then((response) { const end performance.now(); const duration end - start; console.log(Fetch ${event.request.url} took ${duration}ms); return response; }) ); }); // 自定义监控 function sendMetric(name, value) { fetch(/api/metrics, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ name, value, timestamp: new Date().toISOString() }) }); } // 监控安装率 document.getElementById(install-btn).addEventListener(click, () { sendMetric(pwa_install_attempt, 1); }); window.addEventListener(appinstalled, () { sendMetric(pwa_install_success, 1); });9. PWA 部署和更新使用现代 PWA 部署和更新确保应用及时更新。// Service Worker 更新 self.addEventListener(install, (event) { self.skipWaiting(); }); self.addEventListener(activate, (event) { self.clients.claim(); // 清理旧缓存 const cacheWhitelist [my-pwa-cache-v1]; event.waitUntil( caches.keys().then((cacheNames) { return Promise.all( cacheNames.map((cacheName) { if (cacheWhitelist.indexOf(cacheName) -1) { return caches.delete(cacheName); } }) ); }) ); }); // 客户端检测更新 async function checkForUpdates() { if (serviceWorker in navigator) { const registration await navigator.serviceWorker.ready; registration.addEventListener(updatefound, () { const newWorker registration.installing; newWorker.addEventListener(statechange, () { if (newWorker.state installed navigator.serviceWorker.controller) { // 提示用户刷新页面 document.getElementById(update-notification).style.display block; } }); }); } } // 触发更新 document.getElementById(refresh-btn).addEventListener(click, () { window.location.reload(); }); // 定期检查更新 setInterval(checkForUpdates, 60000); // 每 60 秒检查一次 // 部署策略 // 1. 版本控制 // 使用版本号管理 Service Worker 和缓存 // 2. 渐进式部署 // 先部署到部分用户再逐步扩大范围 // 3. 回滚机制 // 准备回滚方案应对部署失败 // 4. 监控 // 部署后监控应用状态 // 5. 文档 // 为部署和更新流程编写文档10. PWA 最佳实践// PWA 最佳实践 // 1. 响应式设计 // 确保应用在不同设备上正常显示 // 2. 性能优化 // 优化应用性能减少加载时间 // 3. 离线功能 // 实现离线访问提高应用可靠性 // 4. 安装体验 // 提供良好的安装体验鼓励用户安装 // 5. 推送通知 // 合理使用推送通知提高用户engagement // 6. 可访问性 // 确保应用可被所有用户访问 // 7. 安全性 // 确保应用安全防止攻击 // 8. 监控和分析 // 监控应用使用情况持续改进 // 9. 部署和更新 // 确保应用及时更新避免用户使用旧版本 // 10. 用户体验 // 提供类原生应用的用户体验前端 PWA 最佳实践1. 核心功能响应式设计确保应用在不同设备上正常显示离线访问支持离线访问提高应用可靠性安装能力可以安装到主屏幕提高用户粘性推送通知支持推送通知提高用户engagement性能提高应用性能减少加载时间2. 技术实现manifest.json配置 PWA 元数据提供安装信息Service Worker实现离线缓存、推送通知等功能HTTPS使用 HTTPS确保应用安全Web App Manifest配置应用图标、名称等信息Push API实现推送通知功能Background Sync实现后台数据同步IndexedDB存储离线数据Cache API缓存静态资源3. 性能优化资源优化压缩、合并、缓存静态资源代码分割按需加载代码减少初始加载时间预缓存预缓存关键资源提高应用启动速度懒加载懒加载非关键资源减少初始加载时间CDN使用 CDN提高资源加载速度HTTP/2使用 HTTP/2提高资源加载效率WebP使用 WebP 格式图片减少图片大小字体优化优化字体加载减少阻塞时间4. 用户体验安装提示提供自定义安装提示鼓励用户安装启动画面配置启动画面提高应用启动体验离线页面提供离线页面提高离线体验错误处理提供清晰的错误提示提高用户体验导航体验优化导航体验提供类原生应用的导航触觉反馈使用振动 API提供触觉反馈深色模式支持深色模式提高用户体验无障碍确保应用可被所有用户访问5. 安全性HTTPS使用 HTTPS确保应用安全Content Security Policy使用 CSP防止 XSS 攻击Subresource Integrity使用 SRI确保资源完整性Permissions合理请求权限保护用户隐私Data Protection保护用户数据防止数据泄露Secure Headers使用安全 HTTP 头提高应用安全性6. 监控和分析Google Analytics使用 Google Analytics分析用户行为Lighthouse使用 Lighthouse评估 PWA 质量Web Vitals监控核心 Web 性能指标Error Monitoring监控应用错误及时发现问题Usage Analytics分析应用使用情况持续改进7. 部署和更新版本控制使用版本号管理 Service Worker 和缓存渐进式部署先部署到部分用户再逐步扩大范围回滚机制准备回滚方案应对部署失败自动化部署使用 CI/CD实现自动化部署更新策略制定合理的更新策略确保用户使用最新版本8. 跨平台兼容性浏览器支持确保应用在主流浏览器中正常运行设备支持确保应用在不同设备上正常运行操作系统支持确保应用在不同操作系统中正常运行屏幕尺寸确保应用在不同屏幕尺寸下正常显示网络条件确保应用在不同网络条件下正常运行9. 开发工具Lighthouse评估 PWA 质量Workbox简化 Service Worker 开发PWABuilder快速创建 PWAChrome DevTools调试 PWAWeb App Manifest Validator验证 manifest.jsonService Worker Debugger调试 Service Worker10. 最佳实践总结核心功能实现响应式设计、离线访问、安装能力、推送通知等核心功能技术实现正确实现 manifest.json、Service Worker、HTTPS 等技术性能优化优化应用性能减少加载时间用户体验提供良好的用户体验鼓励用户安装和使用安全性确保应用安全防止攻击监控和分析监控应用使用情况持续改进部署和更新确保应用及时更新避免用户使用旧版本跨平台兼容性确保应用在不同平台上正常运行开发工具使用合适的开发工具提高开发效率持续改进持续改进 PWA提高应用质量前端 PWA 案例1. 案例一电商 PWA某电商网站使用 PWA 技术实现了以下功能离线访问支持离线浏览商品和购物车安装能力可以安装到主屏幕提高用户粘性推送通知发送订单状态和促销信息通知性能优化优化应用性能减少加载时间响应式设计确保应用在不同设备上正常显示通过 PWA 技术该电商网站的用户留存率提高了 30%转化率提高了 20%。2. 案例二新闻 PWA某新闻网站使用 PWA 技术实现了以下功能离线阅读支持离线阅读新闻内容安装能力可以安装到主屏幕方便用户访问推送通知发送突发新闻和个性化新闻通知性能优化优化应用性能减少加载时间响应式设计确保应用在不同设备上正常显示通过 PWA 技术该新闻网站的页面加载时间减少了 40%用户停留时间增加了 50%。3. 案例三工具 PWA某工具类应用使用 PWA 技术实现了以下功能离线使用支持离线使用核心功能安装能力可以安装到主屏幕提高用户粘性推送通知发送任务提醒和更新通知性能优化优化应用性能减少加载时间响应式设计确保应用在不同设备上正常显示通过 PWA 技术该工具类应用的用户活跃度提高了 60%用户满意度提高了 40%。总结前端 PWA 是现代前端开发的重要组成部分它可以提高用户体验、离线访问能力、安装能力、推送通知能力和性能。别再忽视 PWA 了manifest.json 配置、Service Worker 配置、PWA 安装提示、离线功能、推送通知、性能优化、可访问性、分析和监控、部署和更新等现代 PWA 技术已经提供了更强大、更高效的 PWA 能力。记住PWA 不仅仅是技术问题还包括用户体验、性能优化、安全性、监控和分析、部署和更新等多个方面。你需要综合考虑这些因素才能创建出高质量的 PWA 应用。别再忽视前端 PWA 了它是前端开发的必备技能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2520749.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…