普通视图

发现新文章,点击刷新页面。
今天 — 2026年2月2日首页

从Clawdbot到Moltbot再到OpenClaw,这只龙虾又双叒改名了

2026年2月2日 16:19

大家好,我是凌览。

如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞评论转发),给我一些支持和鼓励谢谢。


要说最近AI圈最折腾的项目,非这只"龙虾"莫属。 两个月前,它还叫Clawdbot,三天前改成了Moltbot,结果还没等大家念顺口,1月30日又宣布最终定名OpenClaw。

短短72小时内两度更名,GitHub上那个超过10万星标的开源项目,硬是把取名这件事演成了连续剧。

从一封律师函说起

事情从25年11月份说起,国外开发者Peter搞了个项目,最初叫"WhatsApp Relay"。

后来他觉得Claude Code那个龙虾形象挺酷,就给自己的项目起了个谐音梗名字——Clawdbot(龙虾叫Clawd),Logo也用了类似的红色龙虾形象。

image.png

项目意外爆火。一周200万访问量,GitHub星标蹭蹭往上涨,连Mac Mini都因为这玩意儿销量激增。

image 1.png

人红是非多,Anthropic的法务团队找上门了:Clawd跟Claude发音太像,涉嫌商标侵权。

"去掉d改成Clawbot也不行",面对AI巨头的压力,他最终还是妥协了。

第一次改名:Moltbot

1月27日,Clawdbot正式更名为Moltbot。新名字取自龙虾"蜕皮"(Molt)的生物学过程——龙虾必须蜕掉旧壳才能长大。Peter在公告里写:"同样的龙虾灵魂,换了一身新壳。"

image 2.png

吉祥物从Clawd改成了Molty,Logo也同步更新。社区对这个名字还算包容,毕竟寓意挺深刻。但麻烦接踵而至:GitHub在重命名时出了故障,Peter的个人账号一度报错;更离谱的是,X上的旧账号@clawdbot在改名后短短10秒内就被加密货币骗子抢注,随即开始炒作一款叫CLAWD的假代币,市值一度炒到1600万美元后崩盘。

Peter不得不连发数条推文澄清:这是个非营利项目,他永远不会发币,任何挂他名字的代币都是骗局。

image 3.png

第二次改名:OpenClaw

Moltbot这个名字还没捂热,三天后,Peter又宣布了最终名称:OpenClaw。

这次他学乖了。这个名字是凌晨5点Discord群里脑暴出来的,Peter提前做了功课——商标查询没问题,域名全部买断,迁移代码也写好了。

Open代表开源、开放、社区驱动;Claw代表龙虾 heritage,向起源致敬。Peter说,这精准概括了项目的精神内核。

改名背后的折腾

回头看这三次更名,简直像一场被迫的成长。

第一次是玩梗撞上了法律墙,第二次是应急方案不够完善,第三次才算真正站稳。这期间还夹杂着GitHub故障、账号被抢注、币圈骚扰、安全漏洞被研究人员点名——一个个人开发者的业余项目,在爆红后遭遇的连锁反应,比代码调试还让人头大。

现在它叫OpenClaw

不管名字怎么变,这个项目的核心没变:跑在你自己机器上的AI助手,支持WhatsApp、Telegram、飞书、钉钉等20多个平台,数据全本地,能操作文件、执行命令、调用API。你可以把它当成一个7×24小时待命的"数字员工",在聊天软件里@它一声,它就能帮你查数据库、整理会议纪要、甚至批量删除7.5万封邮件。

最新版本还增加了Twitch和Google Chat支持,集成了KIMI K2.5等模型,Web界面也能发图片了。

至于那只龙虾,还在。只是现在它叫OpenClaw,不叫Clawd,也不叫Molty了。

微信通话时,是如何判断“当前/对方网络不佳”的?以及我们自己怎么实现?

2026年2月2日 11:40

前阵子跟客户微信语音聊需求,说着说着突然没声了,屏幕立马弹出“对方网络不佳”的提示,或者自己这边提示"当前网络不佳",反复切WiFi、开流量都没用,最后只能换电话沟通。其实这件事我想了很久了,还是打算今天拿来好好唠唠,顺便也给自己涨涨姿势,看看到底是神不可及的技术!!还是最最最简单的网络延迟方法。

为什么需要“网络不佳”提示

在微信通话这种实时音视频场景里,用户对流畅有非常低的容忍度,一旦出现断续的声音、口型不同步、画面卡顿或通话直接掉线,用户就会迅速认为服务不可靠并中断通话或投诉。因此在界面上及时、准确地提示“当前/对方网络不佳”不仅是对用户体验的尊重,也是减少误判、引导用户采取补救措施(切换到语音、关视频、切换网络或靠近路由器)的关键。具体场景包括:地铁或电梯等移动过程中发生的小区切换导致丢包与抖动;多人群聊或屏幕共享时上行带宽被耗尽导致画面质量急剧下降等,自适应码流和重传策略提供触发条件,并提升用户对恢复机制的信任感——这些都是设计“网络不佳”提示的直接动因。

image.png

微信是如何做到的?(猜测)

从技术上看,“网络好不好”并不是一个主观判断,而是一组持续可观测、可量化的网络与媒体质量信号。在实时音视频(RTC)系统中,最基础的一层是网络层指标:丢包率(Packet Loss)反映数据在传输路径上的可靠性;抖动(Jitter)描述包到达时间的不稳定性,直接决定是否需要更大的播放缓冲;RTT(Round-Trip Time)则刻画端到端时延和链路拥塞程度。在其之上是媒体层指标:码率(Bitrate)是否能稳定达到目标值、帧率(FPS)是否持续下降、关键帧是否频繁请求;再往上是体验层的综合指标,如 MOS(Mean Opinion Score) ,通过对丢包、时延、抖动、音频 PLC 触发次数、视频卡顿时长等信号加权估算“用户主观感受”。这些指标的共同点在于:它们都来自客户端和传输层的实时统计

在微信以及主流 RTC 平台(WebRTC、Agora、Zoom、腾讯云 TRTC 等)的实现中,通常不会依赖单一指标来下结论,而是采用多信号融合 + 时间窗口判断的方式。典型做法包括:在信令层和媒体层同时采集统计数据(冗余信令),避免单一路径或单一模块失效;通过 上/下行探测包(Probe Packet) 或带宽估计算法(如基于延迟梯度、丢包反馈的 BWE)持续判断链路可用带宽;在弱网或移动场景下启用 多通路/备份链路(如 Wi-Fi + 蜂窝网络的快速切换或并行探测);在播放端使用 自适应缓冲区(Adaptive Jitter Buffer) ,根据抖动动态调整缓冲深度,以在“低延迟”和“不卡顿”之间取平衡。一旦检测到多个关键指标在一定时间窗口内持续恶化(例如丢包率超过阈值、RTT 快速上升、码率被迫下探),系统就会触发体验等级下降,并映射为“当前/对方网络不佳”的用户提示。

这种思路在公开资料中也有佐证。WebRTC 官方文档和 RFC 中详细描述了基于 RTCP 统计的带宽估计与拥塞控制模型;腾讯、字节、阿里等厂商在公开专利中多次提到 多维网络质量评估、弱网对抗与体验分级提示机制;学术与工业界关于 MOS 预测的技术文献也表明,将底层网络指标映射为用户可理解的体验标签,是大规模 RTC 系统的通用做法。

如何决策

在产品层面,“网络不佳”不是技术结论展示,而是不干扰用户体验,核心目标只有一个:在不打扰用户的前提下,帮他理解当前通话异常的原因。因此微信这类产品在设计上通常遵循以下取舍。

网络指标是实时波动的,但提示不能实时波动。
实际策略通常是:时间窗口 + 连续恶化判定,例如在 2~5 秒内持续丢包升高、RTT 上扬、码率被迫下探,才认为是“稳定性问题”,否则只是短暂抖动,直接忽略。
这也是为什么你在地铁刚进隧道那一瞬间,微信往往不会立刻弹“网络不佳”。 当然了哈~~ 也不排除微信确实没及时检测到,哈哈哈

技术方案

如果把“网络不佳”当成一个完整的技术功能来看,它并不是某个 if 判断,而是一条很清晰的过程:数据采集 → 指标聚合 → 质量评分 → 防抖与阈值 → 展示或策略处理

一、数据采集(Data Collection)

第一步解决的不是判断,而是你到底能看到什么。在 RTC 客户端里,采集通常来自三层:

  • 网络层:RTT、丢包率、抖动、发送/接收速率、重传次数
  • 传输/协议层:RTCP 统计、NACK/PLI/FIR 次数、拥塞窗口变化
  • 媒体层:编码码率、实际渲染帧率、卡顿时长、音频 PLC 触发次数

注意:这些数据不是按事件上报,而是以固定周期(如 200ms / 500ms / 1s)持续采样,形成时间序列。

二、指标聚合(Aggregation)

原始指标是噪声极大的,不能直接用。现实情况下我们系统一定要收集:

  • 滑动时间窗(如最近 3s / 5s)
  • 计算均值、P95、变化斜率
  • 标记异常峰值(Spike)而不是立刻判坏

举个栗子:
一次 200ms 的 RTT 飙升,可能是 GC、系统调度或基站抖动;
RTT 连续 5 秒单调上升 + 丢包同步增加,才是链路拥塞的信号。

其实这个操作就是把瞬时的网络状态,转换成一个网络趋势,方便判断是否要提示用户!

三、质量评分(Quality Scoring)

接下来不是直接出网络好/网络坏,而是要有体验层映射。常见方式如下:

  • 规则加权
    score = w1*丢包 + w2*RTT + w3*卡顿 + w4*帧率下降
  • 分档映射
    优 / 良 / 可接受 / 差(对应 MOS 区间)

四、提示以及处理

这里的提示我们必须做防抖,不能反复频繁提示用户!

进入阈值:评分连续低于 X,持续 ≥ T 秒 退出阈值:评分连续高于 Y(Y > X),持续 ≥ T′ 秒 状态锁定:同一状态不重复触发提示

然后就是处理了, UI 层:展示「当前 / 对方网络不佳」。 要做的处理:

-   自动降码率 / 降分辨率
-   关闭视频保音频
-   切备用链路 / 重连
  • 统计层:上报埋点,用于后续策略优化

也就是说, “网络不佳”往往是系统已经做了很多努力之后的结果告知 ,而不是直接哇啦哇啦告诉用户,你踏马网废了。

整体流程示意


flowchart LR

A[原始数据采集<br/>RTT / 丢包 / 帧率] --> B[时间窗口聚合<br/>均值 / 趋势]

B --> C[质量评分<br/>MOS / 等级]

C --> D[防抖 & 阈值判断<br/>状态机]

D --> E[UI 提示<br/>网络不佳]

D --> F[自适应策略<br/>降码率/切链路]


我们如何实现呢?(ReactNative)

前文拆解的这套网络检测逻辑,并非微信独有的技术壁垒,在工程实践中,我们完全可以自己完成一套方案。下面直接用React Native结合WebRTC的实操举例,别眨眼,我要写代码了。(可以眨眼)

技术选型与依赖

在RN项目中,基于WebRTC做数据采集是最稳妥的选择,第一步先安装核心依赖:

yarn add react-native-webrtc

这个库自带的getStats方法,是网络质量判断的核心入口,里面包含了所有关键数据维度:

  • RTT(往返延迟)
  • packetsLost / packetsSent(丢包数/发送数)
  • jitter(抖动)
  • bitrate(码率,通过bytesSent差分计算得出)
  • frameRate(帧率,部分平台支持)

这里要明确一个核心认知:无需刻意计算网络状态,重点是精准读取传输过程中的原生统计数据。

image.png

数据采集(定时 + 时间序列)

const statsBuffer: StatSample[] = [];

setInterval(async () => {
  const stats = await pc.getStats();
  const parsed = parseStats(stats);

  statsBuffer.push({
    rtt: parsed.rtt,
    packetLoss: parsed.packetLoss,
    jitter: parsed.jitter,
    bitrate: parsed.bitrate,
    ts: Date.now(),
  });

  // 只保留最近5秒的数据
  prune(statsBuffer, 5000);
}, 1000);

这里有两个至关重要的细节:切勿依赖单次数据快照,必须保留时间维度的连续数据。缺少这两点,后续的防抖处理和趋势判断都会沦为空谈。

指标聚合 + 质量评分(可解释优先)

function calcQuality(samples: StatSample[]) {
  const avgLoss = mean(samples.map(s => s.packetLoss));
  const avgRtt = mean(samples.map(s => s.rtt));
  const avgJitter = mean(samples.map(s => s.jitter));

  let score = 100;

  if (avgLoss > 0.05) score -= 30;
  if (avgRtt > 300) score -= 30;
  if (avgJitter > 50) score -= 20;

  return score;
}

这种规则加权的评分方式,在真实工程场景中应用极广。核心原因很简单:可调优、可回滚、可追溯,出现问题时能快速定位到具体异常指标。

阈值 + 防抖(用状态机思路,别堆if判断)

let badSince: number | null = null;
let state: 'GOOD' | 'BAD' = 'GOOD';

function updateState(score: number) {
  const now = Date.now();

  if (score < 60) {
    if (!badSince) badSince = now;
    if (now - badSince > 3000 && state !== 'BAD') {
      state = 'BAD';
      showNetworkBad();
    }
  } else {
    badSince = null;
    if (state === 'BAD' && score > 75) {
      state = 'GOOD';
      hideNetworkBad();
    }
  }
}

这段逻辑的核心要点很明确:评分低于60分时触发预警判定,持续3秒无改善才切换至异常状态;恢复时需评分超过75分才回切正常状态。这一步的设计直接决定提示功能的专业性,有效避免频繁误报影响用户体验。

举例方便所以使用打分制,也可以其他的

然后UI展示轻提示

{state === 'BAD' && (
  <View style={styles.badNetwork}>
    <Text>醒醒!!你踏马网废了</Text>
  </View>
)}

采用轻量提示设计,不弹窗、不弹出 Toast、不抢占用户操作焦点,仅安静告知用户:当前网络存在异常,非设备故障或操作问题。

image.png

自动降级处理,这点很重要

在真实项目中,网络异常提示绝非仅展示一句文案,更重要的是触发对应的自适应应对策略:

例如当异常状态持续5秒:

  • 自动降低视频码率
  • 下调视频分辨率或帧率

当异常状态持续10秒:

  • 提示用户关闭视频,优先保障音频通话通畅

当状态恢复正常时:

  • 缓慢提升码率,避免一次性拉满导致再次卡顿

这里有个核心工程原则务必记牢:恢复要慢,降级要快。

总结

从技术角度来看,判断通话网络好坏,其实就是三件事:持续采集指标、观察趋势、连续判定。瞬时波动不算数,只有连续多秒丢包、抖动高、延迟大,才真正算网络不佳。再配合降码率、先保音频、延迟提示的策略,就能在用户几乎感觉不到的情况下保证体验。核心逻辑很朴素,但工程上最难的是防抖、聚合和兜底

昨天以前首页

【连接篇】TCP/UDP 与前端性能的物理极限

2026年1月30日 09:24

作为《前端视角下的网络协议》系列的第一篇,我们不聊那些复杂的报文格式,而是聊聊物理规律

对于前端开发者来说,网络环境是一个“黑盒”。你写了一行 fetch('/api/data'),但在数据到达浏览器之前,它必须跨越数千公里的光纤、路由器和交换机。在这段旅程中,TCP 的连接机制决定了你的首屏加载速度(FP)存在一个无法逾越的“物理极限”。


一、 TCP 三次握手:避不开的 RTT 消耗

每一个 HTTP/1.x 或 HTTP/2 连接在传输数据前,都必须经过 TCP 三次握手。

  1. SYN (浏览器 -> 服务器)
  2. SYN-ACK (服务器 -> 浏览器)
  3. ACK (浏览器 -> 服务器)

对于前端性能来说,这意味着:在你的第一个字节(TTFB)发出之前,已经消耗了 1.5 个 RTT(往返时延)。

  • 物理极限: 如果用户在上海,服务器在纽约,单程延迟约 150ms,那么握手就要消耗 450ms。无论你的前端代码优化得多么极致,这近半秒的白屏是物理层面的“死刑”。

  • 优化对策: * CDN 边缘加速: 让握手发生在离用户最近的节点。

    • Connection Keep-Alive: 复用长连接,避免为每个请求重新握手。

二、 慢启动与“14KB 规则”:为什么 HTML 体积至关重要?

这是前端开发者最容易忽略的 TCP 特性:拥塞窗口(Congestion Window)

TCP 为了防止网络拥塞,不会一上来就全速发送数据。它会从一个很小的初始窗口(通常是 10 个段,约 14.6KB)开始尝试。如果接收方成功确认,窗口才会翻倍(20, 40, 80...)。

  • 前端含义: 你的首屏关键 HTML 和内联 CSS 最好控制在 14KB 以内。

    • 如果 HTML 是 10KB:只需 1 个往返即可完成下载并开始解析渲染。
    • 如果 HTML 是 20KB:需要 2 个往返。在网络环境差的情况下,这多出来的一个 RTT 可能意味着用户多看 200ms 的白屏。
  • 结论: 极致的性能优化,是从精简首屏 HTML 字节数开始的。


三、 TCP 队头阻塞:HTTP/2 的软肋

虽然 HTTP/2 实现了多路复用(Multiplexing),让我们可以并行下载资源,但它依然跑在 TCP 上。

  • 问题所在: TCP 是一个“流”协议,它必须保证包的顺序。如果其中一个 TCP 包在传输中丢失,即使后续的包已经到达浏览器,TCP 也必须等那个丢掉的包重传成功后,才能把数据交给浏览器。
  • 性能杀手: 即使你并行下载 10 个图片,只要丢了一个包,所有的图片下载都会被卡住。这就是 TCP 级别的队头阻塞(Head-of-Line Blocking)

四、 UDP 与 HTTP/3:打破物理枷锁

为了彻底解决 TCP 的顽疾,Google 推出了基于 UDP 的 QUIC 协议(即 HTTP/3)。

  1. 0-RTT 握手: UDP 无需握手。QUIC 在建立连接时可以实现 0-RTT 或 1-RTT,比 TCP 快得多。
  2. 解决队头阻塞: QUIC 在 UDP 之上实现了自己的流控制。如果一个流丢包,只会影响该流,其他流(其他资源请求)可以继续传输。
  3. 连接迁移: 用户从 WiFi 切换到 5G 时,IP 地址变了,TCP 连接会断开。但 QUIC 基于 Connection ID,可以实现无缝切换,不断连。

💡 前端开发者的硬核总结

  1. 首屏 HTML 尽量压缩在 14KB 以内: 避开 TCP 慢启动的第二次往返。
  2. 利用 Preconnect: 在 HTML 头部加入 <link rel="preconnect" href="https://api.example.com">,让浏览器提前完成那耗时的 TCP 握手。
  3. 关注 HTTP/3 普及率: 如果你的用户群网络环境复杂(如移动端、弱网),开启 HTTP/3 将带来质的飞跃。

结语

理解了 TCP 的物理限制,你就明白了为什么“减少请求数”和“减小包体积”永远是前端优化的金科玉律。网络协议不是为了增加难度,而是划定了性能的边界。

为什么程序员不自己开发一个小程序赚钱

2026年1月29日 17:06

大家好,我是凌览。

如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞评论转发),给我一些支持和鼓励谢谢。


刷到一个挺扎心的话题:程序员为什么不自己做产品赚钱。

身边还真有不少人问过类似的话:"你天天写代码这么厉害,怎么不自己搞个App、做个小程序?随便弄弄不就发财了?"

每次听到这种问题,我都不知道该从哪儿开始解释。

image.png

最近在 X 乎上看到同行的回答,看完只能说:太真实了。

理想很丰满、现实很骨感

首先,假装我们是程序员,某天深夜加班回家,瘫在沙发上刷手机,突然一个念头炸开——"我去,这个功能市面上根本没有!我要是做一个,肯定爆火!”。

脑子里的画面瞬间清晰:产品上线、用户疯涨、投资人排队、财务自由...,满脑子都是"老子不干了,要创业"。

说干就干,流程走起来:

第一步:注册账号结果发现邮箱早就被自己多年前注册过,还冻结了。解冻、换邮箱,折腾一圈。

第二步:想名字绞尽脑汁想了个好名字,一搜,已被占用。再想想想,终于通过。

第三步:开发前端后端一把抓,不会前端?没事,Ai结伴编程一把梭。uniapp启动,一套代码多端运行,微信、QQ、抖音、快手平台全都要上。

第四步:买服务器,阿里云一核两G,一年600块,付款的时候手还没抖。

第五步:搞域名,随便挑一个,一年30块,便宜。

第六步:备案到这里,噩梦开始了。拍照、填表、等审核,来来回回折腾。好不容易过了,提交小程序审核——"该项目类型个人不支持,需要企业认证。"

卒。亏损-630元。

但程序员嘛,头铁。不信邪,继续:

第七步:注册公司个体户要经营场所,干脆直接注册公司。准备材料、开对公账户、刻公章,又是一顿操作。

第八步:重新认证企业认证要的材料堆成山,干脆重新注册个小程序。又是想名字(原来的还要等两天才能释放)、填资料、承诺书、盖章...

终于,小程序上线了。

上线只是开始,赚钱才是难题。

每天努力宣传、引流,结果广告收益长这样:昨日收入0.65元。

对,你没看错,六毛五。折线图上的曲线在0.3元到1.8元之间反复横跳,月收入6.72元。服务器钱还没赚回来,先赔进去几百块。

什么会这样?

  • 个人开发者不能收费,只能通过挂广告,而广告收入低到离谱。激励广告单价居然只有4.29元/千次展示,Banner广告更惨,几块钱千次展示。算笔账:日访问量要达到2万,才能日入500。2万UV什么概念?很多小公司的官网一天都没这么多人。
  • 推广难,小程序是个封闭生态,你不能诱导分享,否则直接封号。只能从其他平台往微信导流,但用户路径一长,流失率奇高。要开通流量主还得先引流500人,这第一道门槛就卡死不少人。
  • 审核机制让人头大,页面上文字一多,就说你涉及"内容资讯",不给过。个人开发者经营类目受限,动不动就踩红线。

不是技术问题,是商业问题

程序员不做小程序赚钱,不是因为不会写代码,而是因为写代码只是万里长征第一步。

做一个能赚钱的小程序,需要:

  • 产品能力:做什么?解决谁的什么问题?凭什么用你的?
  • 运营能力:流量从哪来?怎么留存?怎么变现?
  • 商业资质:公司、对公账户、各种许可证,合规成本不低;
  • 时间和精力:白天上班,晚上搞副业,服务器半夜挂了还得爬起来修。

而大多数程序员,只是喜欢写代码而已。让他们去搞流量、谈商务、处理工商税务,比写一万行代码还痛苦。

更扎心的是,就算你愿意干这些,小程序的红利期也早过了。2017年刚出来那会儿,确实有人靠简单工具类小程序赚到第一桶金。现在?各大平台库存量几百万个,用户注意力被某音、被红书切得稀碎,新入局者基本就是炮灰。

成功案例

网上经常能看到"做小程序月入过万"的帖子,但仔细看会发现,要么是卖课的,要么是有特殊资源的(比如手里有公众号矩阵导流),要么是早期入局者吃到了红利。 对于普通程序员来说,接个外包项目,按时薪算可能比折腾三个月小程序赚得还多,还省心。

技术只是工具,商业才是战场。会拿锤子的不一定会盖房子,会写代码的不一定能做出赚钱的产品。这不是技术问题,这是两个完全不同的赛道。

最后

所以,开发一个小程序到底能不能赚钱?

能,但跟你关系不大。

要么你有现成的流量池,比如几十万粉丝的公众号、抖音号,小程序只是变现工具;要么你有特殊资源,比如独家数据、行业资质;再要么你踩中了某个极小概率的风口,比如当年疫情期间的健康码周边工具。否则,个人开发者大概率是炮灰。

写代码是确定性的事,输入逻辑输出结果;做生意是概率性的事,投入不一定有回报。 大多数人适合前者,却误以为自己能驾驭后者。

你呢?有没有过"做个产品改变世界"的冲动?最后成了吗?

断网、弱网、关页都不怕:前端日志上报怎么做到不丢包 | 掘金一周 1.29

作者 掘金一周
2026年1月29日 14:43

本文字数1600+ ,阅读时间大约需要 5分钟。

【掘金一周】本期亮点:

「上榜规则」:文章发布时间在本期「掘金一周」发布时间的前一周内;且符合各个栏目的内容定位和要求。 如发现文章有抄袭、洗稿等违反社区规则的行为,将取消当期及后续上榜资格。

一周“金”选

掘金一周 文章头图 1303x734.jpg

内容评审们会在过去的一周内对社区深度技术好文进行挖掘和筛选,优质的技术文章有机会出现在下方榜单中,排名不分先后。

前端

断网、弱网、关页都不怕:前端日志上报怎么做到不丢包 @不一样的少年_

我们用一个数组(queue)来暂存日志,然后通过  “量够了”、“时间到了”或“页面要关了”  这三个时机来触发发送,确保既不积压也不频繁打扰服务器。

AI辅助研发的落地实践:工具、效率与成长 @政采云技术

从整体来看,AI 辅助研发并不是简单的“用 AI 写代码”,而是一种分工明确、责任清晰的人机协作模式: AI 擅长发散、整理、生成;人类擅长判断、取舍、收敛。当二者边界清晰、职责明确时,AI 才能真正成为研发效率的放大器,而不是新的复杂度来源。

还在无脑 .map().filter()?实测改用 Iterator Helpers 后,内存占用降低了 99% @也无风雨也雾晴

Iterator Helpers 是 JavaScript 新加的特性,提供了一套"惰性求值"(lazy evaluation)的方法。关键区别是:传统数组方法,每一步都立即执行,创建中间数组;Iterator Helpers,只描述要做什么,真正需要数据时才执行。

前端指纹技术是如何实现的?(Canvas、Audio、硬件API 核心原理解密) @ErpanOmer

所谓的前端指纹技术,本质上就是找不同的一种方式。开发者利用一切可以调用的 API(Canvas, Audio, WebGL, 硬件信息),强迫浏览器进行某种复杂的运算。由于硬件和驱动的细微差别,运算结果必然存在差异。这些差异被收集起来,生成了一个字符串。

从痛点到架构:用 Chrome DevTools Panel 做埋点校验,我是怎么落地的 @转转技术团队

Chrome MV3 是一堵墙,但技术不仅能砌墙,也能架桥。 通过对底层原理的深入挖掘,我们证明了即使在最严格的安全限制下,依然可以打造出极致的开发者工具。 希望本文能给你带来两方面的收获:一是关于 Chrome 插件开发的硬核知识,二是一种“不凑合、不妥协”的极客精神。

后端

一个月搞定100+表迁移:我的“偷师”Navicat实战复盘 @一旅人

100+张表,每张表的字段、类型、主键都不一样。传统MyBatis方式意味着要写100+个Mapper、100+个实体类。后续新增表还得继续写,代码复用度≈0

Android

Flutter 又迎大坑修改?iOS 26 键盘变化可能带来大量底层改动 @恋猫de小郭

虽然问题看起来是一个圆角问题,但是实际上这是 iOS 26 系统键盘增加了“半透明”后带来的问题,Flutter 在键盘后面那一层在某些场景下没有正确渲染内容,导致键盘半透明区域透出来的不是底下 BottomSheet 的真实内容,而是一整块黑色区域。

Android Gradle Plugin 9.0 发布,为什么这会是个史诗级大坑版本 @恋猫de小郭

AGP 9.0 开始只暴露新的 public DSL interfaces,旧的 DSL 类型(比如历史上很多插件/脚本会强转到 BaseExtension 之类)不再提供,并且旧的 variant API(applicationVariants 等)也一起被切断,要迁移到 androidComponents API。

Jetpack Compose重组稳定性分析器 @稀有猿诉

本文将探讨 Compose 稳定性分析器的工作原理,包括:IntelliJ 插件(为你的 IDE 提供可视化的稳定性指示器)、编译器插件(启用运行时重组跟踪)以及稳定性验证系统(防止回归问题影响生产环境)。

人工智能

Agent Skills在货拉拉AI应用尝试 @货拉拉技术

渐进式披露是Agent技能设计中的核心原则,它让智能体的技能体系既灵活又可扩展。就像一本结构清晰的说明书,先给目录,再分章节,最后附上详细附录——技能的设计也是如此,让Claude只在需要时才加载对应的信息。

从0开发大模型之实现Agent(Bash 到 SKILL) @周末程序猿

模型、工具、指令三者构成了 AI Agent 的下限和上限,模型越强,对于指令和工具的调度能力更准确,但是从工程学的角度来考虑,较弱的模型通过对工具和指令的结合,一样能制造功能强大的 Agent

2026 最新 Claude Skills 保姆级教程及实践! @苍何

Skills 改变了我们与 AI 协作的基本方式。它们将一次性的提示,转变为持久、可组合的知识资产。通过为 AI 建立一个可扩展的程序性记忆库,Skills 正在为下一代代更强大、更自主、更能与人类专家无缝协作的 AI Agent 奠定基础。

📖 投稿专区

大家可以在评论区推荐认为不错的文章,并附上链接和推荐理由,有机会呈现在下一期。文章创建日期必须在下期掘金一周发布前一周以内;可以推荐自己的文章、也可以推荐他人的文章。

❌
❌