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

Python爬虫(28)Python爬虫高阶:Selenium+Splash双引擎渲染实战与性能优化

目录

      • 一、背景:动态渲染技术的演进与挑战
      • 二、核心技术对比与选型
      • 三、环境搭建与工具链配置
        • 1. Docker部署Splash集群
        • 2. Selenium环境配置
      • 四、双引擎渲染核心实现
        • 1. 智能路由中间件
        • 2. Splash高级Lua脚本控制
      • 五、性能优化实战方案
        • 1. 浏览器资源池化
        • 2. 异步渲染加速
      • 六、实战案例:电商平台数据抓取
        • 1. 场景需求
        • 2. 混合渲染策略
      • 七、总结
        • 1. 技术优势
        • 2. 性能实测数据
        • Python爬虫相关文章(推荐)

一、背景:动态渲染技术的演进与挑战

随着Web3.0时代的到来,主流网站采用三大动态加载技术提升用户体验:

  • ‌SPA架构‌(如React/Vue构建的单页应用)
  • ‌异步数据加载‌(Ajax/WebSocket实时更新)
  • ‌交互式内容呈现‌(惰性加载/折叠面板/悬浮菜单)

传统动态渲染方案存在明显瓶颈:

  • ‌纯Selenium方案‌:资源占用高(单个Chrome实例占用500MB+内存)
  • ‌纯Splash方案‌:无法处理复杂鼠标事件(如拖拽验证码)
  • ‌普通Headless浏览器‌:对WebGL等新技术支持不足

‌创新架构‌:

  • ‌Selenium‌:驱动真实浏览器处理核心交互(登录/验证码/复杂事件)
  • ‌Splash‌:轻量级渲染服务处理常规动态加载(通过Lua脚本控制)
  • ‌双引擎智能切换‌:根据页面特征自动选择渲染方式

二、核心技术对比与选型

特性SeleniumSplash组合方案
渲染方式真实浏览器WebKit内核智能分流
执行速度较慢(完整浏览器启动)快(无GUI渲染)动态平衡
内存占用500MB+/实例80MB/实例资源池优化
交互能力支持全类型事件基础事件支持优势互补
并发能力低(受硬件限制)高(Docker集群)弹性扩展

三、环境搭建与工具链配置

1. Docker部署Splash集群
# 单节点部署
docker run -d -p 8050:8050 scrapinghub/splash# 集群部署(3节点)
docker run -d -p 8050:8050 --name splash1 scrapinghub/splash
docker run -d -p 8051:8050 --name splash2 scrapinghub/splash
docker run -d -p 8052:8050 --name splash3 scrapinghub/splash
2. Selenium环境配置
# 安装WebDriver管理器
pip install webdriver-manager# 自动管理浏览器驱动
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerservice = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

四、双引擎渲染核心实现

1. 智能路由中间件
class RenderMiddleware:def process_request(self, request, spider):# 需要复杂交互的页面if request.meta.get('need_full_interaction'):return self.selenium_render(request)# 常规动态页面else:return self.splash_render(request)def selenium_render(self, request):driver = get_from_browser_pool()  # 从浏览器池获取实例driver.get(request.url)# 执行滚动操作driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")# 处理模态弹窗try:driver.switch_to.alert.accept()except NoAlertPresentException:passhtml = driver.page_sourcerelease_browser(driver)  # 释放回资源池return HtmlResponse(url=request.url, body=html, encoding='utf-8')def splash_render(self, request):lua_script = """function main(splash)splash:set_user_agent('Mozilla/5.0...')splash:go(splash.args.url)splash:wait(2)splash:runjs("document.querySelector('button.load-more').click()")splash:wait(3)return splash:html()end"""return SplashRequest(request.url, endpoint='execute', args={'lua_source': lua_script}, cache_args=['lua_source'])
2. Splash高级Lua脚本控制
function main(splash)-- 设置自定义HTTP头splash:set_custom_headers({["X-Requested-With"] = "XMLHttpRequest"})-- 执行页面跳转splash:go("https://example.com")-- 处理Cookiesplash:init_cookies(splash.args.cookies)-- 执行JavaScript交互splash:runjs([[document.querySelector('#search_input').value = 'Python书籍';document.querySelector('#search_btn').click();]])-- 等待元素加载(智能等待)splash:wait_for_resume([[function main(splash) {var checkExist = setInterval(function() {if(document.querySelector('.result-item')) {clearInterval(checkExist);splash.resume();}}, 500);}]], 10)  -- 超时10-- 返回多类型数据return {html = splash:html(),png = splash:png(),cookies = splash:get_cookies()}
end

五、性能优化实战方案

1. 浏览器资源池化
from concurrent.futures import ThreadPoolExecutor
from selenium.webdriver import ChromeOptionsclass BrowserPool:def __init__(self, size=5):self._pool = []options = ChromeOptions()options.add_argument("--headless")for _ in range(size):driver = webdriver.Chrome(options=options)self._pool.append(driver)def get_driver(self):return self._pool.pop() if self._pool else Nonedef release_driver(self, driver):driver.get("about:blank")  # 清理历史记录self._pool.append(driver)
2. 异步渲染加速
import asyncio
from splash_async import SplashClientasync def async_render(url):async with SplashClient('http://localhost:8050') as client:response = await client.render_html(url, timeout=60)return response.content# 在Scrapy中间件中使用
html = await asyncio.to_thread(async_render, request.url)

六、实战案例:电商平台数据抓取

1. 场景需求
  • 目标网站:某跨境电商平台(React+WebSocket构建)
  • 难点:
    • 商品列表页:无限滚动加载
    • 详情页:需要登录后查看完整信息
    • 价格数据:WebSocket实时更新
2. 混合渲染策略
class EcommerceSpider(scrapy.Spider):name = "global_shop"def start_requests(self):# 使用Selenium执行登录yield SeleniumRequest(url="https://example.com/login",callback=self.handle_login,script="""document.getElementById('username').value = 'user123';document.getElementById('password').value = 'pass456';document.querySelector('button[type=submit]').click();""")def handle_login(self, response):# 获取登录后的Cookiescookies = response.driver.get_cookies()# 使用Splash抓取列表页yield SplashRequest(url="https://example.com/products",args={'lua_source': scroll_script},cookies=cookies)def parse_products(self, response):# 解析Splash返回的HTMLproducts = response.css('.product-card')for product in products:yield {"name": product.css('h3::text').get(),"price": product.attrib['data-price']}

七、总结

1. 技术优势
  1. ‌渲染成功率提升‌:双引擎方案覆盖99%动态页面场景
  2. ‌资源消耗降低‌:相比纯Selenium方案减少60%内存占用
  3. ‌执行效率优化‌:通过智能路由提升30%抓取速度
2. 性能实测数据
场景纯Selenium纯Splash混合方案
登录验证流程8.2s失败9.1s
无限滚动加载14s6s7s
实时价格监控不支持3s3s
Python爬虫相关文章(推荐)
Python爬虫介绍Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术
HTTP协议解析Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战
HTML核心技巧Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
CSS核心机制Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
静态页面抓取实战Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
静态页面解析实战Python爬虫(6)静态页面解析实战:BeautifulSoup与lxml(XPath)高效提取数据指南
Python数据存储实战 CSV文件Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南
Python数据存储实战 JSON文件Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
Python数据存储实战 MySQL数据库Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解
Python数据存储实战 MongoDB数据库Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
Python数据存储实战 NoSQL数据库Python爬虫(11)Python数据存储实战:深入解析NoSQL数据库的核心应用与实战
Python爬虫数据存储必备技能:JSON Schema校验Python爬虫(12)Python爬虫数据存储必备技能:JSON Schema校验实战与数据质量守护
Python爬虫数据安全存储指南:AES加密Python爬虫(13)数据安全存储指南:AES加密实战与敏感数据防护策略
Python爬虫数据存储新范式:云原生NoSQL服务Python爬虫(14)Python爬虫数据存储新范式:云原生NoSQL服务实战与运维成本革命
Python爬虫数据存储新维度:AI驱动的数据库自治Python爬虫(15)Python爬虫数据存储新维度:AI驱动的数据库自治与智能优化实战
Python爬虫数据存储新维度:Redis Edge近端计算赋能Python爬虫(16)Python爬虫数据存储新维度:Redis Edge近端计算赋能实时数据处理革命
反爬攻防战:随机请求头实战指南Python爬虫(17)反爬攻防战:随机请求头实战指南(fake_useragent库深度解析)
反爬攻防战:动态IP池构建与代理IPPython爬虫(18)反爬攻防战:动态IP池构建与代理IP实战指南(突破95%反爬封禁率)
Python爬虫破局动态页面:全链路解析Python爬虫(19)Python爬虫破局动态页面:逆向工程与无头浏览器全链路解析(从原理到企业级实战)
Python爬虫数据存储技巧:二进制格式性能优化Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
Python爬虫进阶:Selenium自动化处理动态页面Python爬虫(21)Python爬虫进阶:Selenium自动化处理动态页面实战解析

相关文章:

Python爬虫(28)Python爬虫高阶:Selenium+Splash双引擎渲染实战与性能优化

目录 一、背景:动态渲染技术的演进与挑战二、核心技术对比与选型三、环境搭建与工具链配置1. Docker部署Splash集群2. Selenium环境配置 四、双引擎渲染核心实现1. 智能路由中间件2. Splash高级Lua脚本控制 五、性能优化实战方案1. 浏览器资源池化2. 异步渲染加速 六…...

uv python 卸载

又是查了半天 官网wiki没有 网上一堆傻子胡说 uv提示也不对 AI还在这尼玛胡编乱造 开始 我原来装了这几个环境 uv python list 现在python3.7.7不需要了,卸载,直接 uv python uninstall 3.7.7 去找你自己要卸载的版本号,不需要整个包名复制…...

如何备考GRE?

1.引言 GRE和雅思不太相同,首先GRE是美国人的考试,思维方式和很多细节和英系雅思不一样。所以底层逻辑上我觉得有点区别。 难度方面,我感觉GRE不容易考低分,但考高分较难。雅思就不一样了不仅上限难突破,下限还容易6…...

Crowdfund Insider聚焦:CertiK联创顾荣辉解析Web3.0创新与安全平衡之术

近日,权威金融科技媒体Crowdfund Insider发布报道,聚焦CertiK联合创始人兼CEO顾荣辉教授在Unchained Summit的主题演讲。报道指出,顾教授的观点揭示了Web3.0生态当前面临的挑战,以及合规与技术在推动行业可持续发展中的关键作用。…...

第六章 进阶10 实习生的焦虑

时间过得很快,实习的蕾蕾入职已经三个月了,到了离开的日子。 照例我和她约了1对1谈话,在开始和结束阶段的谈话格外有意义。 谈话的最后,我问蕾蕾有没有什么问题问我,她的问题让我格外惊讶: “自己有点焦…...

技术融资:概念与形式、步骤与案例、挑战与应对、发展趋势

一、技术融资概述 技术融资是指通过外部资金支持技术研发、产品开发或市场扩展的过程。它通常涉及风险投资、天使投资、私募股权、众筹等多种形式。技术融资的核心目标是为技术创新提供资金保障,推动技术从概念到市场的转化。 技术融资的主要形式包括以下几种&…...

duxapp 2025-03-29 更新 编译结束的复制逻辑等

CLI copy 文件夹内的内容支持全量复制优化小程序配置文件合并逻辑(更新后建议将 project.config.json 文件从git的追踪中移除)新增 copy.build.complete 文件夹的复制逻辑,会在程序编译结束之后将文件复制到指定位置 (模块和用户…...

【Linux】Shell脚本中向文件中写日志,以及日志文件大小、数量管理

1、写日志 shell脚本中使用echo命令,将字符串输入到文件中 覆盖写入:echo “Hello, World!” > laoer.log ,如果文件不存在,则会创建文件追加写入:echo “Hello, World!” >> laoer.log转移字符:echo -e “Name:\tlaoer\nAge:\t18” > laoer.log,\t制表符 …...

Qwen3技术报告

参考链接:https://zhuanlan.zhihu.com/p/1905945819108079268 介绍的很详细,先贴后续再整理...

python + flask 做一个图床

1. 起因, 目的: 对这个网站:https://img.vdoerig.com/ , 我也想实现这种效果。做一个简单的图床,后面,可以结合到其他项目中。 2. 先看效果 实际效果。 3. 过程: Grok 聊天: https://img.vdoerig.co…...

虚拟来电 4.3.0 |集虚拟来电与短信于一体,解锁VIP优雅脱身

虚拟来电是一款集虚拟来电与虚拟短信于一体的应用程序。它可以帮助用户在需要时模拟一个真实的来电或短信,以最顾及对方情面的方式逃离尴尬场合。无论是自定义来电联系人、时间、次数,还是设置自定义通话语音、来电震动和铃声,这款解锁了VIP功…...

日志与策略模式

什么是设计模式 IT⾏业 ,为了让 菜鸡们不太拖⼤佬的后腿, 于是⼤佬们针对⼀些经典的常⻅的场景, 给定了⼀些对应的解决⽅案, 这个就是 设计模式 日志认识 计算机中的⽇志是记录系统和软件运⾏中发⽣事件的⽂件,主要作⽤是监控运⾏状态、记录异常信 息&#xff…...

Linux下载与安装

一、YUM 1.1 什么是YUM 在CentOS系统中,软件管理方式通常有三种方式:rpm安装、yum安装以及编译(源码)安装。 编译安装,从过程上来讲比较麻烦,包需要用户自行下载,下载的是源码包,需…...

java18

1.API之时间类 Date类: SimpleDateFormat类: Calendar类:...

向量和矩阵范数

向量和矩阵范数 向量范数 定义 设 x T \boldsymbol{x}^\text{T} xT, y T \boldsymbol{y}^\text{T} yT ∈ K n \in \mathbb{K}^n ∈Kn,数量积定义为: y T x ( 或 y H x ) \boldsymbol{y} ^\text{T} \boldsymbol{x}\left(或\boldsymbol{y}^\text{H}\bo…...

使用 gcloud CLI 自动化管理 Google Cloud 虚拟机

被操作的服务器,一定要开启API完全访问权限,你的电脑安装gcloud CLI前一定要先安装Python3! 操作步骤 下载地址,安装大概需要十分钟:https://cloud.google.com/sdk/docs/install?hlzh-cn#windows 选择你需要的版本&a…...

驱动芯片走线、过孔指导,大电流、散热过孔

参考: 一份大厂PCB布局指南参考! 技巧 使用大面积铺铜 铜是一种极好的导热体。由于 PCB 的基板材料(FR-4 玻璃环氧树脂)是一种不良导热体。因此,从热管理的角度来看,PCB的铺铜区域越多则导热越理想。 走…...

数据结构进阶:AVL树与红黑树

目录 前言 AVL树 定义 结构 插入 AVL树插入的大致过程 更新平衡因子 旋转 右单旋 左单旋 左右双旋 右左双旋 实现 红黑树 定义 性质 结构 插入 实现 总结 前言 在学习了二叉搜索树之后,我们了解到其有个致命缺陷——当树的形状呈现出一边倒…...

AI人工智能在交通物流领域的应用

AI人工智能在交通物流领域的应用 AI人工智能在交通物流领域有着广泛而深入的应用,正推动着该领域的深刻变革,以下是详细介绍: 交通领域 智能驾驶 自动驾驶汽车:依靠深度学习算法、计算机视觉、激光雷达和传感器融合技术&#x…...

牛客网NC22222:超半的数

牛客网NC22222:超半的数 题目描述 输入输出格式 输入格式: 第一行包含一个整数 n (1 ≤ n ≤ 1000)第二行包含 n 个整数 a_i (1 ≤ a_i ≤ 10^9) 输出格式: 输出一个整数,表示出现次数超过一半的那个数 解题思路 这道题目有多种解法&a…...

在服务器上安装AlphaFold2遇到的问题(2)

如何删除已安装的cuDNN 1. 通过包管理器卸载(推荐) RHEL/CentOS (dnf/yum) #查看已安装的 cuDNN 包 sudo dnf list installed | grep cudnn #卸载 cuDNN 运行时和开发包 sudo dnf remove -y libcudnn* libcudnn8* libcudnn-devel* Ubuntu/Debian (ap…...

【2025年软考中级】第一章1.5 输入输出技术(外设)

文章目录 输入输出技术(外设)I/O设备总线结构输入输出控制程序控制方式中断方式直接内存存取(DMAC)方式IO通道方式和外围处理机(IOP)方式 数据传输方式生物特征认证技术 输入输出技术(外设&…...

2025 家用投影新标杆:雷克赛恩 CyberPro1 如何重新定义客厅观影体验

目录 一、家庭影音升级:从 “看得清” 到 “看得精” 的需求之变 (一)传统投影的痛点突围 (二)技术参数背后的用户价值 二、全天候观影无忧:亮度与环境光的博弈艺术 (一)真实亮…...

[基础] HPOP、SGP4与SDP4轨道传播模型深度解析与对比

HPOP、SGP4与SDP4轨道传播模型深度解析与对比 文章目录 HPOP、SGP4与SDP4轨道传播模型深度解析与对比第一章 引言第二章 模型基础理论2.1 历史演进脉络2.2 动力学方程统一框架 第三章 数学推导与摄动机制3.1 SGP4核心推导3.1.1 J₂摄动解析解3.1.2 大气阻力建模改进 3.2 SDP4深…...

12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建

文章目录 一、如何实现一条用例,实现覆盖所有用例的测试1、结合数据驱动:编辑一条用例,外部导入数据实现循环测试2、用例体:实现不同用例的操作步骤对应的断言 二、实战1、项目路径总览2、common 文件夹下的代码文件3、keywords 文…...

学习状态不佳时的有效利用策略

当学习状态不佳时,可以尝试以下策略,将这段时间转化为有意义的活动,既不勉强自己又能为后续高效学习铺路: 1. 整理与规划:低精力高回报任务 整理学习环境:收拾书桌、归类资料、清理电脑文件,减…...

Spring Cloud深度实践:从服务发现到弹性智能API网关全景解析

引言 大家好!继初步搭建了微服务基础架构后,我们进一步深入到服务调用的优化、系统的弹性构建以及API网关的高级应用。本文将全面回顾这一进阶阶段的实践成果,通过更丰富的图解,力求清晰展现各核心组件的工作原理与协同方式。 项…...

第J1周:ResNet-50算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 我的环境 语言环境:Python3.8 编译器:Jupyter Lab 深度学习环境:Pytorchtorch1.12.1cu113 torchvision0.13.1cu113 一、准备工作 二、导入数据 三、划分数据…...

PCL 计算一条射线与二次曲面的交点

文章目录 一、简介二、实现代码三、实现效果一、简介 对于二次曲面而言,其一般方程可以写为: z = a 0 + a 1 x + a 2 y + a...

Executors类详解

Executors类详解 Executors 是Java中用于快速创建线程池的工具类,提供了一系列工厂方法,简化了 ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 的配置。以下是其核心方法、实现原理及使用注意事项: 1. 常用线程池工厂方法 (1) newFixedThreadPool 作用:创建固定大小…...

学习alpha

(sign(ts_delta(volume, 1)) * (-1 * ts_delta(close, 1))) 这个先用sign操作符 sign.如果输入NaN则返回NaN 在金融领域,符号函数 sign(x) 与 “基础”(Base)的组合概念可结合具体场景解读,以下从不同金融场景分析其潜在意义&…...

6种方式来探究数据集的的方法worldquant

覆盖率百分比 指金融数据字段(如股价、成交量、财务指标)在时间或空间上的有效数据比例。 时间维度:数据在历史周期内的完整度(如:某股票过去 1 年中,95% 的交易日有收盘价)。空间维度&#xf…...

MiniMax语音模型Speech-02近日登顶多个全球榜单,详细技术解析

MiniMax最新发布的Speech-02把TTS领域传统巨头OpenAI、ElevenLabs拉下马来,直接登顶智能语音权威榜单Artificial Arena,不管是WER(字错率),还是SIM(声纹相似度)等客观指标都领先国外顶级模型&am…...

JavaScript 时间转换:从 HH:mm:ss 到十进制小时及反向转换

关键点 JavaScript 可以轻松实现时间格式(HH:mm:ss 或 HH:mm)与十进制小时(如 17.5)的相互转换。两个函数分别处理时间字符串到十进制小时,以及十进制小时到时间字符串的转换,支持灵活的输入和输出格式。这…...

前端面经 手写Promise

核心功能 仿Promise对象需要接收包含两个变量的回调函数 构造函数 <script>class myPromise {constructor(func){const resolve (result)>{console.log(resolve执行了)}const reject (result)>{console.log(reject执行了)}func(resolve,reject)}}// Promise的…...

JavaSE基础语法之方法

方法 一、方法入门 1.方法定义 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复调用。 2.方法的格式 修饰符 返回值类型 方法名( 形参列表 ){方法体代码(需要执行的功能代码) }示例&#xff1a; public static int sum ( int a ,…...

在 Neo4j 中实现向量化存储:从文本到高效语义搜索

在当今数据驱动的时代&#xff0c;图数据库因其强大的关系表达能力和高效的查询性能&#xff0c;逐渐成为处理复杂数据结构的首选工具之一。Neo4j 作为领先的图数据库&#xff0c;不仅支持传统的图数据存储和查询&#xff0c;还通过向量化存储功能&#xff0c;为语义搜索和推荐…...

三格电子上新了——IO-Link系列集线器

一、产品概述 1.1产品用途 IO-Link系列集线器是一系列数字量输入输出I/O设备&#xff0c;可以将标准开关量信号接入到此设备。通过此集线器方便的将大量的I/O点位接入到IO-Link主站&#xff0c;进而接入到PLC控制系统。 IO-Link通信接口和8个I/O接口(16个IO点位)均采用M12规…...

记一次从windows连接远程Linux系统来控制设备采集数据方法

文章目录 0 引入1、方法2、优化Process使用 3、引用 0 引入 最近使用的探测器是老外的&#xff0c;老外的探测器需要在centos系统上&#xff0c;在这系统上有相应的指令或者软件控制&#xff0c;但是我们的软件在windwons上&#xff0c;所以目前的困难是&#xff1a;如何在Win…...

鸿蒙 ArkTS 常用的数组和字符串 操作方法

数组的常用方法 方法名功能描述concat(value0, ?value1, /* … ,*/ ?valueN)合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组copyWithin(target, ?start, ?end)浅复制数组的一部分到同一数组中的另一个位置&#xff0c;并返回它&#xff0c;不…...

Web性能优化的未来:边缘计算、AI与新型渲染架构

一、边缘计算与性能优化深度整合 1.1 边缘节点计算卸载策略 • 智能任务分割:将非关键路径计算卸载到边缘节点 // 客户端代码 const edgeTask = new EdgeTask(image-processing); edgeTask.postMessage(imageData, {transfer...

Python字符串常用内置函数详解

文章目录 Python字符串常用内置函数详解一、基础字符串函数1. len() - 获取字符串长度2. ord() - 获取字符的Unicode码点3. chr() - 通过Unicode码点获取字符4. ascii() - 获取字符的ASCII表示 二、类型转换函数1. str() - 将对象转为字符串2. repr() - 获取对象的官方字符串表…...

2025程序设计天梯赛补题报告

2025程序设计天梯赛补题报告 仅包含L1 L2 L1-6 这不是字符串题 题目描述 因为每年天梯赛字符串题的解答率都不尽如人意&#xff0c;因此出题组从几年前开始决定&#xff1a;每年的天梯赛的 15 分一定会有一道字符串题&#xff0c;另外一道则一定不是字符串题。 小特现在有…...

【GNN笔记】Signed Graph Convolutional Network(12)【未完】

视频链接&#xff1a;《图神经网络》 Signed Graph Convolutional Network 之前介绍的GNN模型主要集中在无符号的网络&#xff08;或仅由正链接组成的图&#xff09;上&#xff0c;符号 图带来的挑战&#xff0c;主要集中在于 否定链接&#xff0c;与正链接相比&#xff0c;它不…...

CSR、SSR与ISR的奇妙之旅

网页渲染三剑客:CSR、SSR与ISR的奇妙之旅 三种渲染方式的核心本质 CSR(客户端渲染)让浏览器成为"厨师",SSR(服务器端渲染)让服务器担任"厨师",而ISR(增量静态再生)则是一位兼具"提前备餐"和"即时烹饪"能力的"超级厨师"…...

YOLO+UI(C#)开发

接Windows目标检测程序开发&#xff08;YOLO&#xff08;python推理&#xff09;界面开发&#xff08;C#&#xff09;&#xff09; C#作为软件界面&#xff0c;推理、前处理、后处理逻辑全部python&#xff0c;接任何功能定制...

生产级JVM参数优化

Spring Boot 应用性能提升 300% 当你的 Spring Boot 应用响应迟缓&#xff0c;且已采用缓存、数据库索引和异步处理优化后&#xff0c;下一个优化方向在哪里&#xff1f;我的答案是 JVM 本身。 经过性能分析和深入研究&#xff0c;我发现合理配置 JVM 参数可以带来显著的性能…...

什么是SMBus

一、SMBus的定义与背景 基本概念 SMBus&#xff08;System Management Bus&#xff0c;系统管理总线&#xff09; 是一种基于IC&#xff08;Inter-Integrated Circuit&#xff09;协议的轻量级两线制串行通信总线&#xff0c;由Intel于1995年提出&#xff0c;主要用于低带宽系统…...

[Unity]AstarPathfindingProject动态烘焙场景

需求 项目是MMO大场景&#xff0c;按地块划分了10x10的大格子。角色移动时动态更新周边场景&#xff0c;且角色还有传送功能。 项目中寻路用了AstarPathfindingProject的Grid。因此需要动态烘焙寻路信息。 核心代码 private void bakeAStarPath(){AstarPath astarPath Astar…...

Go语言处理HTTP下载中EOFFailed

在 Go 语言中使用 HTTP 下载文件时遇到 EOF 或 Failed 错误&#xff0c;通常是由于网络连接问题、服务器中断、未正确处理响应体或并发写入冲突等原因导致的。以下是详细的解决方案&#xff1a; 1. 检查错误类型并重试 io.EOF 错误可能表示连接被服务器关闭&#xff0c;而 Fai…...