找到
281
篇与
易航
相关的结果
-
TLS 和 SSL 的区别 TLS 和 SSL 的区别 TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)都是用于保护网络通信安全的协议,通常用于加密 Web 流量(如 HTTPS)。TLS 是 SSL 的继任者,目前是标准协议,而 SSL 已经过时。主要区别如下: 图片 1. 起源和历史 SSL(Secure Sockets Layer): 由 Netscape 在 1990 年代初期设计,经历了 SSL 1.0、2.0、3.0 版本 SSL 3.0 存在 POODLE 漏洞,已逐渐被淘汰 TLS(Transport Layer Security): 1999 年发布 TLS 1.0(基于 SSL 3.0),后续版本包括 TLS 1.1、1.2、1.3 TLS 1.3 是最新版本(2018 年发布) 2. 安全性 SSL: 存在已知漏洞(如 POODLE),SSL 3.0 已被视为不安全 TLS: 提供更强加密算法(如 AES、SHA-256),TLS 1.3 简化握手过程并减少攻击面 3. 协议版本 SSL 版本: SSL 1.0(未发布)、SSL 2.0(1995)、SSL 3.0(1996) TLS 版本: TLS 1.0(1999)、TLS 1.1、TLS 1.2(最常用)、TLS 1.3(2018) 4. 握手过程和性能 SSL: 复杂握手过程导致较高延迟 TLS: TLS 1.3 显著减少握手往返次数,提升性能 5. 兼容性 现代浏览器和服务器已不再支持 SSL TLS 1.2/1.3 是当前主流协议 6. 加密算法 SSL:支持 RC4 等不安全算法 TLS:支持更安全的 AES-GCM、ChaCha20 等算法 7. 实际应用 SSL:已完全淘汰 TLS:广泛用于 HTTPS、邮件加密、VPN 等场景 总结对比表 特性SSLTLS全称Secure Sockets LayerTransport Layer Security起源Netscape 1990sSSL 的继任者(1999)推荐版本无TLS 1.2/1.3安全性存在已知漏洞更强加密算法握手性能较慢更快(TLS 1.3 优化握手)当前使用情况已淘汰广泛使用
-
删除 node_modules 目录太慢了?教你快速删除 前言 大家好,我是易航,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~ 在开发过程中,node_modules 文件夹常常会因为存放了大量的依赖包而变得庞大,尤其是在大型项目中。虽然 node_modules 是 Node.js 项目中不可或缺的一部分,但在一些特定的情况下,比如清理无用依赖或是重新安装依赖时,删除 node_modules 文件夹是一个常见的操作。然而,手动删除这么大的文件夹往往是一个耗时且效率低下的过程。对于开发者而言,如何快速有效地删除 node_modules 成为了一个常见的痛点。 这时,rimraf 工具就显得尤为重要,它可以替代rm -rf命令来递归删除文件夹,并且相较于手动删除,它提供了更高效的方式。 一、什么是 rimraf? rimraf 是一个 Node.js 库,用于递归地删除文件和目录,特别适用于删除 node_modules 这样的庞大文件夹。rimraf 在删除文件和文件夹时,采用了优化过的实现,特别能够提高大文件夹删除的效率。 与操作系统自带的 rm -rf 命令相比,rimraf 通过减少系统调用、避免进程挂起等方式,能够加快删除过程,尤其在 Windows 平台上表现尤为突出,因为 Windows 本身对于删除大量文件的支持不如类 Unix 系统。 二、为什么手动删除 node_modules 这么慢? 在大型 Node.js 项目中,node_modules 文件夹可能包含上万个文件和子文件夹。由于 node_modules 文件夹结构的复杂性和深度,手动删除该文件夹需要操作系统一次性处理大量的文件删除操作。在这种情况下,操作系统的文件系统(如 macOS 的 HFS+ 或 Windows 的 NTFS)可能会出现延迟,导致删除过程非常缓慢。 图片 1. 操作系统的文件系统限制 操作系统的文件系统并没有针对大规模删除优化。例如,当你使用文件资源管理器删除文件时,它实际上是逐一标记每个文件为删除状态,并且还会消耗大量的资源来更新文件索引。这对于 node_modules 这种成千上万个文件的文件夹来说,执行起来非常低效。 2. 文件系统缓存和索引 文件操作系统通常会保持一定的缓存和索引记录,以便加速文件的读写和删除过程。然而,当需要删除大量文件时,这些缓存和索引会成为瓶颈,导致删除变得缓慢。 三、如何使用 rimraf 加速删除过程? rimraf 是一个专为递归删除大文件夹设计的工具,它通过优化删除过程中的一些细节,避免了文件系统缓存和索引的限制,使得删除过程更加高效。使用 rimraf 删除 node_modules 的步骤非常简单,以下是详细的操作流程。 1. 安装 rimraf 首先,我们需要在项目中安装 rimraf。可以通过 npm 或 yarn 来安装它。打开你的命令行,进入到你的项目目录下,执行以下命令: npm install rimraf --save-dev或者使用 yarn: yarn add rimraf --dev2. 在命令行中使用 rimraf 安装完成后,你可以在命令行中直接使用 rimraf 来删除 node_modules 文件夹。以下是使用 rimraf 删除 node_modules 的命令: npx rimraf node_modules3. 在 package.json 中配置脚本 为了简化操作,可以将删除命令添加到 package.json 中的 scripts 部分: { "scripts": { "clean": "rimraf node_modules" } }然后运行: npm run clean4. 使用 rimraf 加速其他删除操作 除了删除 node_modules,rimraf 还可以删除其他大文件夹: npx rimraf build四、rimraf 的优势 跨平台兼容:支持 Linux、macOS 和 Windows。 高效删除:针对大规模文件删除优化,速度显著提升。 易于使用:通过命令行或脚本配置即可快速操作。 与包管理工具集成:无缝配合 npm、yarn 使用。 五、总结 rimraf 是一个轻量级、高效且跨平台的工具,特别适合快速删除 node_modules 等大型文件夹。通过优化删除流程,它能显著提升开发效率,尤其是在 Windows 系统上表现突出。如果你还在手动删除 node_modules,不妨尝试使用 rimraf 来简化工作流程。 结语 我是易航,待过多种类型公司的前端开发者,始终坚持用通俗易懂的方式分享技术知识。欢迎关注我的博客「易航博客」获取更多前端干货!
-
安卓高版本无 ROOT 抓包教程 【安卓逆向】无 Root!HTTPS 抓包竟能如此简单?小白也能秒懂 图片 📌 开篇痛点 安卓 7.0 版本(包括)之后,系统不再信任根目录之外的证书。 "想抓包分析 APP 数据,但手机没 Root?HTTPS 加密的包一抓就断网? 别慌!今天教你用『小黄鸟+虚拟机』这对神器,0 门槛破解无 Root 抓包难题!" 🌟 为什么这个方法牛? 无需 Root:解 BL 锁、刷机统统不需要! 安卓全版本通吃:安卓 7.0 以上高版本照样抓! 保姆级教程:跟着做 10 分钟搞定,附避坑指南! 🛠️ 工具准备 小黄鸟 HttpCanary(抓包神器) https://wwb.lanzouf.com/iNZSN026e9qd VMOS 安卓虚拟机(模拟带 Root 的系统环境) https://www.vmos.com/ 工具截图图片 🚀 保姆级操作步骤 第一步:真机安装工具 真机下载安装 小黄鸟 HttpCanary 和 VMOS Pro(虚拟机)。 小黄鸟设置:进入设置 →SSL 证书 → 导出为 System Trusted (.0) 格式,证书会保存在手机 /HttpCanary/cert/ 目录下。 证书导出图片 第二步:虚拟机开“外挂” 启动 VMOS → 新建一个 安卓 7.1 精简版系统(自带 Root 权限)。 导入文件:在虚拟机内用“文件中转站”功能,导入 目标 APP 和 小黄鸟生成的.0 证书。 挂载证书: 用 MT 管理器(需虚拟机内 Root 权限)将证书复制到虚拟机的 /system/etc/security/cacerts/ 目录。 如果提示“只读”,记得在 MT 管理器中 挂载读写权限! 虚拟机操作图片 第三步:抓包实战! 真机启动小黄鸟 → 设置目标应用为 VMOS。 虚拟机内打开目标 APP → 真机小黄鸟自动开始抓包! 抓包成功:所有 HTTPS 流量明文展示,随便看、随便改! 抓包结果图片 ⚠️ 避坑指南 证书复制失败 → 检查虚拟机是否开启 Root 权限,或换用 Root Explorer 操作。 抓不到包 → 确认小黄鸟证书类型是 .0 格式,且 VMOS 网络通畅。 虚拟机卡顿 → 关闭真机后台无关应用,或换用低配版虚拟机系统。 📢 文末 "你学会了吗?赶紧试试看! 评论区 留下你的实战结果,或遇到的坑,博主帮你解答! 转发 给身边的技术宅,一起解锁新姿势!"
-
阿里开源新模型:性能对标DeepSeek-R1,参数仅为其1/20 3 月 6 日凌晨 3 点,阿里巴巴发布并开源全新的推理模型通义千问 QwQ-32B。阿里巴巴称,这是一款拥有 320 亿参数的模型,其性能可与具备 6710 亿参数(其中 370 亿被激活)的 DeepSeek-R1 媲美。 据悉,QwQ-32B 在一系列基准测试中进行了评估,测试了数学推理、编程能力和通用能力,并与 OpenAI 的 o1-mini 以及 DeepSeek 满血版及蒸馏版进行了比较。 图片 在测试数学能力的 AIME24 评测集上,以及评估代码能力的 LiveCodeBench 中,千问 QwQ-32B 表现与 DeepSeek-R1 相当,远胜于 o1-mini 及相同尺寸的 R1 蒸馏模型。 在由 Meta 首席科学家杨立昆领衔的“最难 LLMs 评测榜”LiveBench、谷歌等提出的指令遵循能力 IFEval 评测集、由加州大学伯克利分校等提出的评估准确调用函数或工具方面的 BFCL 测试中,千问 QwQ-32B 的得分均超越了 DeepSeek-R1。 官方介绍称,这一成果突显了将强化学习应用于经过大规模预训练的强大基础模型的有效性。此外,阿里团队还在推理模型中集成了与 Agent 相关的能力,使其能够在使用工具的同时进行批判性思考,并根据环境反馈调整推理过程。 除了性能上的大幅提升,QwQ-32B 的另外一个亮点是大幅降低了部署使用成本,开发者和企业可以在消费级硬件上轻松将其部署到本地设备中。 资料显示,从 2023 年至今,阿里通义团队已开源 200 多款模型,包含大语言模型千问 Qwen 及视觉生成模型万相 Wan 等两大基模系列,覆盖从 0.5B 到 110B 等参数,实现了全模态、全尺寸大模型的开源。 开源社区 Hugging Face 此前的榜单显示,开源仅 6 天的阿里万相大模型已反超 DeepSeek-R1,登顶模型热榜、模型空间榜两大榜单,成为近期全球开源社区最受欢迎的大模型。根据最新数据,万相 2.1(Wan2.1)在 Hugging Face 及魔搭社区的总下载量已超百万,在 Github 的 Star 数超 6k。 在通义千问最新推理模型发布并开源后,阿里巴巴股价应声大涨。隔夜美股收盘涨 8.61%,报收 141.03 美元。截至发稿,阿里巴巴港股涨超 7%。今年以来,阿里巴巴股价累计涨幅已近 70%。 来源:界面新闻
-
Zasper 一款低内存占用 速度极快的高性能IDE 对我们编程开发者而言,高效的开发环境是提升生产力的关键。今天,我要向大家推荐一个非常优秀的开源项目——Zasper。 这是一款高性能集成开发工具,旨在通过极致的速度、低内存占用和强大的并发能力,重新定义数据科学工作流的效率。优势是占用的内存极少,速度极快,并且能够处理大量并发连接。 注意:支持 Mac、Linux 和 Windows,但是目前对 Windows 的支持有限!简介 Zasper 是一款基于 Go 语言开发的现代化 IDE,专注于为 Jupyter Notebook 等 REPL(Read-Eval-Print Loop)风格的数据应用程序提供更高效的运行环境。它不仅支持 Jupyter Notebook 的全部功能,还通过优化内存占用和 CPU 使用率,显著提升了性能。 其最大的优势就是轻量级,Zasper 占用 26.7 MB RAM 和 0.2 个 CPU,无需高配置开发环境! 图片 核心特性 1. 极致的速度与并发能力 Zasper 利用 Go 语言的并发模型,能够同时处理多个任务,即使在高负载情况下也能保持流畅的性能。这对于需要处理大型数据集和计算密集型任务的开发者来说,是一个巨大的优势。 2. 极低的内存占用 与传统的云端 IDE 相比,Zasper 设计为在本地机器上高效运行,占用极少的内存资源。这使得它非常适合个人电脑用户,尤其是在资源有限的环境中。 3. 无缝集成 Jupyter Notebook Zasper 完全支持 Jupyter Notebook,用户可以在更高效的环境中使用熟悉的工具。无论是数据分析、机器学习还是可视化,Zasper 都能提供无缝的体验。 4. 深色模式与可定制界面 Zasper 提供了时尚的深色模式和用户友好的界面,确保用户在长时间编码时也能保持舒适。此外,界面支持高度定制,用户可以根据自己的喜好调整布局和功能。 5. 内置版本控制与命令面板 Zasper 内置了版本控制和命令面板,简化了项目管理流程。用户可以轻松管理代码版本,并通过命令面板快速执行常用操作。 6.强大的终端集成 Zasper 拥有完整的终端模拟器集成,支持:多终端会话管理、命令历史记录、环境变量配置、自定义 Shell 配置。 功能展示 编辑 图片 终端 图片 启动器 图片 Jupyter 笔记本 图片 版本控制 图片 命令面板 图片 暗黑模式 图片 图片 总结 Zasper 的轻量级设计和强大功能都能为你提供卓越的开发体验。如果你正在寻找一个高性能、低资源占用的开发工具,Zasper 绝对值得一试! 开源地址 隐藏内容,请前往内页查看详情 点下方的“❤”支持我们,非常感谢!
-
使用 HTML、CSS 和 JavaScript 构建简易屏幕录像机 欢迎各位参与这个简单易行的屏幕录像项目!我们将仅使用传统的 HTML、CSS 和 JavaScript 共同完成。您可能会疑惑:为何需要这样的工具?答案在于屏幕录制对教程制作、演示汇报、缺陷报告等诸多场景至关重要。无论您是为频道创建分步教学视频,还是向潜在客户展示作品集,这类应用都不可或缺。本文将带您打造一款简约却强大的屏幕录像工具,完全基于 HTML、CSS 和 JavaScript 实现。 工具准备 如先前所述,本项目无需任何第三方库。但若您零编码经验,建议先观看此教程学习代码编辑器基础。 项目目标 本工具支持用户直接通过浏览器录制屏幕画面及完整音频。点击录制按钮后,系统将提示选择录制区域(如 Chrome 标签页),支持多窗口选择或全屏录制。右下角的 "同时共享音频" 选项可自由开关。录制前设有倒计时,最终视频以 WebM 格式下载。 代码轻量无依赖,充分利用浏览器原生 API。让我们深入解析: 架构分解 HTML 构建界面:包含视频预览、录制按钮和下载链接 CSS 样式设计:响应式布局与动感倒计时层 JavaScript 核心功能:屏幕捕捉、视频录制与下载逻辑 现在让我们深入代码实现。 HTML 结构 创建 index.html 文件,编写基础界面代码(有经验者可自定义调整): <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="style.css" /> <script src="script.js" defer></script> <title>在线屏幕录制</title> </head> <body> <div class="countdown" id="countdown"></div> <div class="screen-recorder"> <h1>开启屏幕录制</h1> <video controls preload="none" id="video"></video> <nav> <button type="button" class="btn" id="btn" aria-label="开始录制">录制</button> <a href="#" class="btn" id="link" aria-label="下载录制视频" download="recording.webm">下载视频</a> </nav> </div> </body> </html>video 元素展示录制内容,button 和 a 分别控制录制与下载。 CSS 样式 创建 style.css 美化界面(CSS 新手可参考 W3School 教程): 关键样式说明: 全局重置:统一边距与盒模型 居中布局:使用网格布局实现垂直水平居中 倒计时层:全屏半透明遮罩与大号数字显示 响应式视频:自适应屏幕尺寸 按钮设计:统一风格与悬停效果 移动适配:媒体查询优化小屏体验 * { padding: 0; margin: 0; box-sizing: border-box; } body { width: 100vw; min-height: 100vh; display: grid; place-items: center; background-color: #f4f4f4; } .countdown { visibility: hidden; color: green; font-size: 10rem; font-weight: 900; background-color: rgba(0, 0, 0, 0.5); /* 半透明黑色背景 */ position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 10000; display: flex; align-items: center; justify-content: center; } .screen-recorder { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2rem; width: 90%; max-width: 1000px; padding: 2rem; background-color: #fff; color: #202020; border-radius: 10px; box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); } .screen-recorder video { width: 100%; max-width: 782px; aspect-ratio: 16 / 9; max-height: 440px; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1), -2px -2px 5px rgba(0, 0, 0, 0.1); border-radius: 10px; display: none; } h1 { text-transform: capitalize; font-size: 3rem; font-weight: bold; color: #202020; } .btn { background-color: #428bca; color: #fff; font-weight: 900; padding: 0.75rem 1.5rem; border-radius: 0.5rem; cursor: pointer; text-transform: capitalize; border: 1px solid #428bca; transition: background-color 0.3s ease, color 0.3s ease; } .btn:hover, .btn:focus { background-color: #357ec7; outline: 2px solid #357ec7; outline-offset: 2px; } a { text-decoration: none; margin-inline-start: 20px; display: none; } @media (max-width: 768px) { .screen-recorder video { width: 100%; height: auto; } h1 { font-size: 2.5rem; } .btn { padding: 0.5rem 1rem; font-size: 1rem; } .countdown { font-size: 6rem; } }JavaScript 功能 创建 script.js 实现核心逻辑: 隐藏内容,请前往内页查看详情 功能解析 事件驱动:按钮点击触发录制流程 媒体捕获:使用 getDisplayMedia 获取屏幕流,getUserMedia 获取音频 倒计时机制:Promise 实现 3 秒倒计时 录制控制:MediaRecorder API 处理视频流 下载生成:Blob 对象转换下载链接 常见问题解答 Q: 能否录制系统音频? A: 受浏览器安全策略限制,系统音频录制可能存在限制,建议使用麦克风输入。 Q: 无法录屏的解决办法? A: 确保浏览器支持 getDisplayMedia API,最新版 Chrome/Firefox 均可。 Q: 如何提升音质? A: 代码已启用回声消除与降噪,建议外接优质麦克风。 Q: 支持暂停录制吗? A: 当前版本未实现,可停止后重新开始。 优劣分析 优势局限无依赖轻量级仅支持现代浏览器简单易实现无高级编辑功能音视频同步录制音频设备兼容性问题Webm 格式下载需转换格式兼容播放响应式设计无实时预览功能通过本文,您已掌握构建基础屏幕录像工具的全流程。现在即可动手实践,打造专属的录屏解决方案! 演示站:http://web.bri6.cn/tool/screen-record/ 图片
-
有了 Fiber 之后的 PHP 会发生怎样的变化? PHP 引入 Fiber(纤程)是一个非常重大的特性,它为 PHP 带来了类似协程的并发编程能力,使得 PHP 能够实现 异步非阻塞 编程模式。 Fibers 是基于用户态的轻量级线程,能够有效地管理任务的暂停与恢复,从而使得 PHP 能够处理更加复杂的并发场景。 具体来说,Fiber 让 PHP 在面对 I/O 密集型 或 高并发 的场景时,比传统的同步模式更加高效。 1. Fiber 在 PHP 中的作用 Fiber 允许开发者在 同一线程中 执行多个任务,并可以在任何时候暂停和恢复执行。 这种机制在传统的 PHP 中是不可行的,因为 PHP 是基于 同步 执行的(即每次只能执行一个操作,且操作之间是阻塞的)。使用 Fiber 后,PHP 能够实现类似 协程 或 绿色线程 的行为。 与传统多线程的区别: Fiber 是 用户态协程,不依赖操作系统线程调度,所以它比操作系统级线程更轻量。它通过显式的 yield 和 resume 来控制程序的执行流程。 多线程 是操作系统层面的线程切换,通常需要更多的资源和开销。 2. Fiber 带来的变化 2.1 异步非阻塞编程 在没有 Fiber 之前,PHP 并不擅长处理异步操作,尤其是在处理 I/O 密集型 操作(如数据库查询、文件操作、HTTP 请求等)时,PHP 会在执行这些操作时 阻塞,直到操作完成才会继续执行后续的代码。 通过 Fiber,PHP 可以在一个请求中同时执行多个任务,像 异步编程 模型一样,在执行阻塞操作时挂起当前任务,让出 CPU 资源,从而执行其他任务。 当阻塞操作完成时,Fiber 会恢复原来的任务继续执行。这种模式类似于 Node.js 的 事件循环 和 JavaScript 的 async/await。 2.2 提升并发处理能力 使用 Fiber,PHP 可以在同一进程中实现 多任务并发执行,特别是在处理多个 I/O 操作 时,Fiber 的引入避免了每次等待 I/O 操作完成时的阻塞。这大大提升了高并发场景下的性能。 例如,可以同时发起多个数据库查询、多个 HTTP 请求,所有操作都可以在同一个进程内并行执行,极大地减少了因等待而浪费的时间。 2.3 轻松实现协程 协程 是一种轻量级的线程,它允许函数在执行时暂停并在稍后的某个时间点恢复执行。在 PHP 中,Fiber 让协程变得更加易于实现,减少了依赖外部扩展或框架的复杂性。 2.4 增强的代码可读性和维护性 协程 编程模式通常能显著提高代码的可读性和维护性。通过 yield 和 resume,你可以通过同步的代码逻辑来处理异步任务,避免了回调地狱(callback hell)或复杂的状态机逻辑。 3. 如何使用 Fiber? PHP 8.1 引入了 Fiber 类。通过使用 Fiber,你可以创建协程,暂停和恢复执行。下面是一个简单的示例,展示了如何使用 Fiber 来实现异步任务: <?php $fiber = new Fiber(function (): void { echo "Fiber started\n"; // 模拟异步任务 Fiber::suspend(); // 暂停 Fiber,模拟等待某个异步任务完成 echo "Fiber resumed\n"; }); // 启动 Fiber echo "Main: before fiber\n"; $fiber->start(); // 输出: Fiber started // Fiber 暂停,主线程继续执行 echo "Main: after fiber suspend\n"; // 输出: Main: after fiber suspend // 恢复 Fiber $fiber->resume(); // 输出: Fiber resumed echo "Main: after fiber resumed\n"; // 输出: Main: after fiber resumed在这个例子中: Fiber::suspend():用于暂停当前 Fiber 的执行,返回控制权给调用它的主线程或其他 Fiber。 fiber->resume():恢复 Fiber 的执行,继续执行从 suspend 暂停的地方。 4. Fiber 的应用场景 4.1 异步数据库操作 传统的数据库操作是同步的,当一个查询正在执行时,PHP 会一直等待,直到查询返回结果。 这对于并发高的场景来说,效率低下。使用 Fiber,你可以发起多个数据库查询,并让每个查询在等待过程中挂起,主线程可以继续执行其他任务,直到查询完成。 <?php use Amp\Loop; use Amp\Mysql; Loop::run(function () { $db = yield Mysql\connect('mysql:host=127.0.0.1;dbname=test', 'root', 'password'); // 发起多个查询并等待结果 $result1 = yield $db->query('SELECT * FROM users'); $result2 = yield $db->query('SELECT * FROM orders'); // 处理查询结果 $users = yield $result1->fetchAll(); $orders = yield $result2->fetchAll(); var_dump($users, $orders); });在这个例子中,两个查询通过 Fiber 实现并发执行,而不会阻塞 PHP 程序。 4.2 高并发 HTTP 请求 Fiber 也适用于发起多个 HTTP 请求的并发处理,特别是在进行大规模爬虫或并行数据抓取时,可以大大提升效率。通过 Fiber,多个 HTTP 请求可以同时进行,而不需要等待某一个请求完成后才能开始另一个。 <?php use Amp\Http\Client\HttpClientBuilder; use Amp\Http\Client\Request; use Amp\Loop; Loop::run(function () { $client = HttpClientBuilder::buildDefault(); $request1 = new Request('https://example.com/page1'); $request2 = new Request('https://example.com/page2'); $response1 = yield $client->request($request1); $response2 = yield $client->request($request2); echo yield $response1->getBody(); echo yield $response2->getBody(); });在这个例子中,request 和 response 操作都可以并发执行,提高了 I/O 操作的效率。 4.3 长时间运行的任务 在 CLI 或其他长期运行的 PHP 脚本中,如果有多个任务需要交替执行,Fiber 可以非常方便地切换任务,避免单个任务阻塞整个脚本。例如,可以在处理大批量数据时,利用 Fiber 实现任务的暂停和恢复,避免长时间的阻塞。 5. Fiber 的挑战与限制 尽管 Fiber 为 PHP 带来了异步编程的优势,但它也有一定的局限性和挑战: PHP 传统的同步编程模型不兼容:Fiber 需要开发者适应新的编程模型,可能需要重构现有的同步代码来支持 Fiber。 性能开销:虽然 Fiber 是用户态协程,开销比线程小,但它仍然带来了一定的内存和执行成本,尤其是在需要频繁暂停和恢复任务的场景下。 第三方库支持有限:尽管 Fiber 提供了强大的并发支持,但并不是所有的 PHP 扩展和库都与 Fiber 兼容。例如,某些扩展或库可能依赖于 PHP 的传统同步模型,不支持或难以适配 Fiber。 6. 未来发展 随着 PHP 8.1 引入 Fiber,这一特性将逐步影响整个 PHP 生态系统。 可以预见,在未来,更多的框架、库和工具将开始支持 Fiber,为 PHP 开发者提供更强大的并发编程能力。 此外,结合 Swoole、ReactPHP 等库,Fiber 可能成为构建高性能异步 PHP 应用的核心技术之一。 总结 Fiber 为 PHP 带来了异步编程的能力,特别是在 I/O 密集型任务和高并发场景下,它能够显著提升 PHP 的执行效率。 开发者可以通过 Fiber 实现类似协程的并发任务管理,并通过 yield 和 resume 控制任务的执行流,从而避免传统同步编程模型中的阻塞问题。 然而,Fiber 也需要开发者对新的编程模型进行适应,尤其是在与现有同步代码和第三方库的兼容性上。 随着时间的推移,Fiber 的使用将更加广泛,并且与其他异步框架和工具的集成会进一步提升 PHP 的性能和开发体验。 图片 参考链接: 以上就是本篇分钟的全部内容,希望各位程序员们努力提升个人技术。最后,小编温馨提示:每天阅读 5 分钟,每天学习一点点,每天进步一点点。 图片
-
高家看上的东西,迟早都得是高家的 全剧以 2000 年、2006 年、2021 年三个时间节点展开,徐忠的笔记均属于 2021 年的“现在时间线”,展现扫黑行动的最终阶段。 高启强初次借安欣造势,小人物的野心从此被点燃,从菜市场鱼贩子到京海大佬,这步棋是他命运的转折点 泰叔的命运或许在此时已然注定 手拿冻鱼追一路,我叫启盛你记住 陈舒婷 我朋友种的橘子 强哥这辈子只遵守了婚姻法 已经是三年前的事了 我能进来坐坐吗 现实中,这早已经是大结局了 我做好人的时候,那些坏人欺负我;我做了坏人,那些好人又要审判我。你说,什么是黑白? 第四集 在这次教育整顿工作中,经常会谈到初心,其实大多数同志的初心,都是好的,但在长期的工作中,有的人却一步步放松了警惕,被腐蚀、被拉拢,沦为犯罪分子的保护伞。这说明,坚持初心,确实是一件难得的事情,像安欣这样的警察,常常被嘲笑不够聪明,不会变通。如果以升官发财为标准,安心确实不够精明,但他的品质,恰恰是政法队伍,最需要的。很多时候,贪腐就是从一杯酒、一顿饭开始的,面对领导干部的一杯酒,商人朋友的一顿饭,有多少同志,能够做到严词拒绝。公生明、廉生威,唯有执法者严守公正、廉洁,才能立于不败之地,成为一柄永不生锈的钢刀。 第四集 - 狂飙 徐忠" url="https://txmov2.a.kwimgs.com/upic/2025/02/28/00/BMjAyNTAyMjgwMDA0MjZfMTMxMzM1NzkxNF8xNTgwMDcxNDUwOTFfMl8z_b_B6085ba4e4eed61c6d9d8763f772b0a8e.mp4" cover="https://p4-ad.adukwai.com/upic/2025/02/28/00/BMjAyNTAyMjgwMDA0MjZfMTMxMzM1NzkxNF8xNTgwMDcxNDUwOTFfMl8z_B71fd2605007f97f466a921f7228338ca.jpg" theme="#409eff" lrc="" lrcType="0" loop="none" autoplay="0" storage="0" autotheme="1 第五集 我开始慢慢明白了,为什么像高启强这样一个曾经也是守法的公民,他在他的领域曾经勤勤恳恳、没日没夜的工作,到后来为什么会发生这么大的变化。如果说唐小龙唐小虎这样称霸一方的市场管理员是导火索的话,不如说,是因为我们的社会当中,确实还存在着一些不公平的分配,导致了基层的百姓觉得,如果不靠非法手段,是无法实现致富的,所以,就有了铤而走险的一些人出现,高启强就是其中的代表,他铤而走险,而且在后期,通过诸多违法手段获得了不法之财,凌驾于一方百姓之上,有时候我在想,以他的聪明才智,原本可以为社会做出贡献,可惜,在十字路口之间,他选择了另一个方向。 第五集 - 狂飙 徐忠" url="https://txmov2.a.kwimgs.com/upic/2025/02/28/18/BMjAyNTAyMjgxODMyNTFfMTMxMzM1NzkxNF8xNTgwNTczNDAyMDhfMl8z_b_B83c4e923ce091d87114c27ee486596c5.mp4" cover="https://p4-ad.adukwai.com/upic/2025/02/28/18/BMjAyNTAyMjgxODMyNTFfMTMxMzM1NzkxNF8xNTgwNTczNDAyMDhfMl8z_B0a6abc56001bca788fa725c9c55dc0f5.jpg" theme="#409eff" lrc="" lrcType="0" loop="none" autoplay="0" storage="0" autotheme="1 第十三集 有些人不理解教育整顿工作,何必要倒查呢?因为冰冻三尺,非一日之寒。二十年来,中国经济高速发展,某些地方政府重视效率,而忽视公平,由此滋生的资源垄断和权力腐败,让老百姓怨声载道,要想真正解决问题,就绝不能只是头疼医头、脚疼医脚,要从根源入手,让老百姓看到党中央刀刃向内的决心,无论是当下发生的,还是过去发生的,只要违反了党纪国法,就要一查到底,绝不姑息,对教育整顿来说,退休不是免死金牌,贪腐分子更不可能安全上岸,因为老百姓不答应,党和国家更不答应。 第十三集 - 狂飙 徐忠" url="https://txmov2.a.kwimgs.com/upic/2025/02/28/22/BMjAyNTAyMjgyMjA1MTZfMTMxMzM1NzkxNF8xNTgwODA3MTkzNTdfMl8z_b_Bacf49730a97e996fca3ee38caa14b5a6.mp4" cover="https://p4-ad.adukwai.com/upic/2025/02/28/22/BMjAyNTAyMjgyMjA1MTZfMTMxMzM1NzkxNF8xNTgwODA3MTkzNTdfMl8z_B300beb0b65d08888bfc14a614e522af7.jpg" theme="#409eff" lrc="" lrcType="0" loop="none" autoplay="0" storage="0" autotheme="1 第 27 集 在扫黑除恶专项斗争期间,京海取得了很大的成绩,其中影响最大的,就是打掉了以陈泰为首的建工集团,陈泰纠集社会闲散人员成立了京海市建工集团,长期以暴力手段强揽工程,强迫交易,曾扬言谁不服就打谁,打到服为止,造成了极其恶劣的社会影响,虽然建工集团覆灭了,但新的举报材料表明,京海很可能盘踞着一个更加隐蔽的犯罪集团,经省委批准,成立教育整顿第三指导小组,赶赴京海督导强盛集团涉黑专案组工作,指导开展政法队伍教育整顿工作,我们刚到京海,政协副主席龚开疆便意外身亡,名下查出大量来历不明的财物,对手显然做好了准备,甚至连我们的行程安排和兴趣爱好都做了调查,经验告诉我,这次又是一场硬仗。 第 30 集 1 王帅只是强生集团的一名小喽啰,他飞扬跋扈靠的不是自己,而是背后的强盛集团,老百姓们害怕的也不是王帅,而是能替他遮风挡雨的高启强,温文尔雅,热情友善,只是高启强的“伪装”,他心中始终将别人的生命视为草芥。 第 30 集 2 出于安全的考虑,我们暂时将办公地点转移,但工作并没有停滞,王帅被捕后,京海百姓看到了省里扫黑除恶常态化的决心,越来越多的人站出来向我们提供线索,政法干警、违纪违法举报平台和京海市的 110 都收到了很多群众提供的新的信息,事态正朝着我们希望的方向发展。 第 32 集 根据群众的举报,专案组进行了摸排,确认京海电力实业公司存在严重问题,总经理马涛曾经是禁毒支队长杨健的特情,而禁毒支队的支队长杨健,如今正担任供电局的副局长,仍然是马涛的上级领导,杨健为马涛的违规经营大开绿灯,这种裙带关系,一定存在着了利益输送,杨健与高启强是什么关系,杨健背后的靠山是谁?他的岳父,人大主任孟德海,有没有参与其中?怎么查?谁去查?指导组内部经过讨论决定还是让安欣同志去,我们了解他和孟德海、杨健之间的关系,所以,这也是对他的一次考验。 第 35 集 一些犯罪分子为了拉拢腐蚀领导干部,手段可以说无所不为,如果领导干部作风刚正,那么就会对其家人下手,先腐蚀其亲属,再将领导干部拉下水,杨健的下场,有其自身原因,也是高启强不断腐蚀的结果,可以说是高启强造成的京海百姓用电难,企业用电贵的局面,而这一切都是为了满足他对权力的渴望,一个人的贪婪,却造成了无数人的悲剧,我无法想象安欣此时的心情,不知道他该如何面对孟德海和孟钰,他同孟钰青梅竹马,或许以后只能形同陌路,他为京海付出了太多,我们能做的只有坚持扫黑除恶常态化,让英雄不再孤独地战斗。 第 39 集 那个世界,只存在于想象当中,现实的生活当中是人民群众永远需要我们,我们这支队伍,教育整顿,扫黑除恶,以后就是常态化了,这么重的任务,不简单,无论是大案或者小案,我觉得不是我们说了算,是京海的老百姓说了算,罪恶要除根除苗,只有我们月月扫,年年扫,老百姓的生活才会幸福、安宁。
-
JavaScript 意外的副作用:修改共享变量 由于闭包可以访问外部函数的变量,如果不小心修改了这些变量,可能会导致意想不到的副作用。 function outer() { let counter = 0; return { increment: function() { counter++; }, getCount: function() { return counter; } }; } const myCounter = outer(); myCounter.increment(); myCounter.increment(); console.log(myCounter.getCount()); // 输出 2在这个例子中, 虽然我们希望 counter 变量是 outer 函数的私有变量, 但是通过闭包, 我们仍然可以在外部修改它. 解决方法: 最小化共享: 尽量减少闭包对外部变量的修改,优先使用局部变量。 使用不可变数据: 如果外部变量是对象或数组,尽量使用不可变数据结构,避免意外修改。 更明确的接口: 如果确实需要修改, 那么就通过定义明确的接口来修改。 图片