??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲网在线观看,国产丝袜一区视频在线观看,亚洲国产精品精华素http://www.aygfsteel.com/专注于Java技?/description>zh-cnSun, 15 Jun 2025 04:06:01 GMTSun, 15 Jun 2025 04:06:01 GMT60Web|页端即旉讯源码/IM聊天源码RainbowChat-Webhttp://www.aygfsteel.com/jb2011/archive/2025/06/13/451628.htmlJack JiangJack JiangFri, 13 Jun 2025 08:15:00 GMThttp://www.aygfsteel.com/jb2011/archive/2025/06/13/451628.htmlhttp://www.aygfsteel.com/jb2011/comments/451628.htmlhttp://www.aygfsteel.com/jb2011/archive/2025/06/13/451628.html#Feedback0http://www.aygfsteel.com/jb2011/comments/commentRss/451628.htmlhttp://www.aygfsteel.com/jb2011/services/trackbacks/451628.html1、基本介l?/h1>

RainbowChat-Web是一套基?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">MobileIMSDK-Web的网늫IMpȝ。不同于市面上某些开源练手或淘宝售卖的demoU代码,RainbowChat-Web的品代码演化自真正运营过的商业?/span>Q其所依赖的通信层核心SDK已在数年内经q大量客户及(qing)其辐的最l用L(fng)使用和验证。RainbowChat-Web同时也是Ud端IM应用RainbowChat的姊妹品?/p>

 

2、品质说?/h1>

?源自真正q营的商业品:(x)RainbowChat-Web的技术源于真实运营的商业产品?br />
?它不是个DemoQ?/strong>不同于市面上某些开源或淘宝售卖的demoU代码,RainbowChat-Web的品代码演化自真正运营过的商业品,其所依赖的通信层核心SDKQ即MobileIMSDK-WebQ已在数q内l过大量客户?qing)其辐射的最l用L(fng)使用和验证?br />
?z、精点{优化、原生:(x)RainbowChat-WebZ可能降?ơ开发时的上手门槛、兼Ҏ(gu)、可L、可l护性的隑ֺQ?span style="color: #ff00ff;">坚持不依赖Q何前端框?/span>Q?span style="color: #808080;">q些框架通常是指AngularJS、VUE、EmberJS、React{?/span>Q,q璞归真Q只使用原生JS+HTML+CSSQ?span style="color: #808080;">再无其它复杂?/span>Q,极大降低开发者的上手隑ֺ、兼Ҏ(gu)本,辑ֈ最z、最_、最灉|的目标(z、简单、回归本质的东西Q才能拥最强的生命?/span>Q?br />
截止目前Q?/strong>RainbowChat-Web努力保证在各Lpȝ、主浏览器、不同分辨率屏幕上的体验Q?/span>包括但不限于QChrome、Safari、FireFox、Edge?60览器、世界之H浏览器{?#9660;

3、运行演C?/h1>

?q行截图Q详见:(x)?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">RainbowChat-Web前端功能截图?br />?演示视频Q详见:(x)?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">RainbowChat-Webq行演示视频?/p>

4、功能简?/h1>

1?/em>支持文本消息、查?span style="color: #a0522d;">语音留言消息(?/span>App产品发?/span>)?span style="color: #a0522d;">囄消息?span style="color: #a0522d;">大文件消?/span>、查?span style="color: #a0522d;">短视频消?/span>(?/span>App产品发?/span>)?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">名片消息?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">位置消息、消息表情、快h息?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">消息撤回?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">消息转发{;
2?/em>支持一对一陌生?/a>模式Q?br />3?/em>支持一对一正式好友聊天模式Q?br />4?/em>支持多对?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">聊聊天模式Q?br />5?/em>完善?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">组信息理Q徏、退、解散、{让、邀(g)诗踢人、群公告{;
6?/em>完整?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">注册、登陆、密码找回等{功能闭环;
7?/em>个h中心功能Q改基本信息、改个性签名、改头像、改密码{;
8?/em>支持查看个h相册、个音介l;
9?/em>完整的离U消?指o(h)拉取机制Q?br />10?/em>完整的历史消?指o(h)存取机制Q?br />11?/em>完整的好友关pȝ理:(x)查找好友、发求、处理请求、删除好友、好友备注等Q?br />12?/em>以及(qing)其它未提?qing)的功能和特性?/p>

5、技术亮?nbsp;

1Q?/em>轻量易用:(x)U原生JS~写Q坚?span style="color: #ff8c00;">不依赖Q何前端框?/span>Q?span style="color: #808080;">q些框架通常是指AngularJS、VUE、EmberJS、React{?/span>Q;

2Q?/em>模块化设计:(x)所有UI模块、数据逻辑均由独立装的JS对象理Q代码规范、低耦合Q有效防止代码复杂性扩散;

3Q?/em>览器跨域:(x)所有AJAX接口均ؓ(f)JSONP实现Q百分百支持跨域Q?/p>

4Q?/em>通信代码解偶Q得益于高内聚的MobileIMSDK-Web工程Q实CIM功能逻辑与网l通信的解?/span>Q利于持l升U、重用和l护Q?span style="color: #808080;">q是l验不的IM产品做不到的Q;

5Q?/em>支持WebSocketQƈ非某些品中q在使用的过?#8220;长轮?#8221;技术,真正?#8220;x通讯”Q?/p>

6Q?/em>|络兼容性好Q核心层ZMobileIMSDK-Web技术,?span style="color: #ff8c00;">不支持WebSocket的情况下仍可很好地工作;

7Q?/em>断网恢复能力Q拥?span style="color: #ff8c00;">|络状况自动(g)?/span>?span style="color: #ff8c00;">断网自动L的能力;

8Q?/em>L支持加密Q一个参数即可开?span style="color: #ff8c00;">SSL/TLS通信加密Q?/p>

9Q?/em>服务端慢io解偶QIM实例本n坚持不直接进行DB{慢io的读、写Q保证IM实时消息高吞吐和性能Q?/p>

10Q?/em>服务端逻辑解偶Q得益于MobileIMSDK-Web工程Q实C上层逻辑与网l通信核心的解?/span>Q底层数据通信全部通过低偶合的回调通知来实玎ͼ

11Q?/em>完善的log记录Q服务端使用log4js日志框架Q确?span style="color: #ff8c00;">每一关键步骤都有日志输出Q让(zhn)的q行调试更ؓ(f)便利Q?/p>

12Q?/em>聊天协议兼容Q实C?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">RainbowChat-APP产品完全兼容的协议模型;

13Q?/em>消息收发互通:(x)实现了与RainbowChat-APP产品的无~消息互通?/p>

6、支持的聊天消息cd

7、好友聊?/h1>

8、群聊聊?/h1>

9、发?#8220;名?#8221;消息

10、发?#8220;位置”消息

11?#8220;消息撤回”

12?#8220;消息转发”

12?#8220;消息引用”

14?#8220;@”功能

15、其它特性和l节

聊天Z方聊天对象信息显C:(x)Q?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">查看视频Q?br />

消息送达状态图标显C:(x)Q?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">查看视频Q?/p>



Jack Jiang 2025-06-13 16:15 发表评论
]]>Web端实旉信技术SSE在携E机业务中的实践应?/title><link>http://www.aygfsteel.com/jb2011/archive/2025/06/13/451627.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Fri, 13 Jun 2025 07:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/jb2011/archive/2025/06/13/451627.html</guid><wfw:comment>http://www.aygfsteel.com/jb2011/comments/451627.html</wfw:comment><comments>http://www.aygfsteel.com/jb2011/archive/2025/06/13/451627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jb2011/comments/commentRss/451627.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jb2011/services/trackbacks/451627.html</trackback:ping><description><![CDATA[     摘要: 本文由携E前端开发专家Chris Xia分nQ关注新技术革新和研发效率提升?、引a本文介绍了携E机前端基于Server-Sent EventsQSSEQ实现服务端推送的企业U全链\通用技术解x案。文章深入探讨了 SSE 技术在应用q程中包括方案对比、技术选型、链路层优化以及(qing)实际效果{多l度的技术细节,为类g用场景提供普适性参考和借鉴。该Ҏ(gu)设计目标是实现通用性,适用于各U网l架构和业务场景...  <a href='http://www.aygfsteel.com/jb2011/archive/2025/06/13/451627.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jb2011/aggbug/451627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jb2011/" target="_blank">Jack Jiang</a> 2025-06-13 15:32 <a href="http://www.aygfsteel.com/jb2011/archive/2025/06/13/451627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>长连接网x术专?十二)Q大模型时代多模型AI|关的架构设计与实现http://www.aygfsteel.com/jb2011/archive/2025/05/22/451623.htmlJack JiangJack JiangThu, 22 May 2025 06:08:00 GMThttp://www.aygfsteel.com/jb2011/archive/2025/05/22/451623.htmlhttp://www.aygfsteel.com/jb2011/comments/451623.htmlhttp://www.aygfsteel.com/jb2011/archive/2025/05/22/451623.html#Feedback0http://www.aygfsteel.com/jb2011/comments/commentRss/451623.htmlhttp://www.aygfsteel.com/jb2011/services/trackbacks/451623.html

本文来自哔哩哔哩通用技术团队分享,下文q行了排版优化和修订?/p>

1、引a

随着 AI 技术快速发展,业务?AI 能力的(f)求日益增ѝ当 AI 服务面对处理大规模请求和高ƈ发流量时QAI |关从中扮演着臛_重要的角艌ӀAI 服务通常涉及(qing)大量的计Q务和讑֤资源占用Q此旉要一?AI |关负责协调q些h来确保系l的E_性与高效性。因此,与传l微服务架构cMQ我们将相关 API 理的功能(如流量控制、用户鉴权、配额计贏V负载均衡、API 路由{)(j)集中攄?AI |关层,可以降低pȝ整体复杂度ƈ提升可维护性?/p>

本文要分享的是B站在大模型时代基于多模型AI的网x构设计和实践ȝQ希望能带给你启发?/strong>

* 相关阅读Q?/strong>?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">全民AI时代Q大模型客户端和服务端的实时通信到底用什么协议??/p>

技术交:(x)

- Ud端IM开发入门文章:(x)?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">新手入门一就够:(x)从零开发移动端IM?/p>

- 开源IM框架源码Q?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">https://github.com/JackJiang2011/MobileIMSDKQ?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">备用地址Ҏ(gu)Q?/p>

Q本文已同步发布于:(x)http://www.52im.net/thread-4831-1-1.htmlQ?/a>

2、系列文?/h1>
  1. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专?一)Q京东京麦的生UTCP|关技术实跉|ȝ?/li>
  2. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q知乎千万q发的高性能长连接网x术实?/a>?/li>
  3. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q手淘亿U移动端接入层网关的技术演q之?/a>?/li>
  4. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q爱奇艺WebSocket实时推送网x术实?/a>?/li>
  5. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q喜马拉雅自研亿UAPI|关技术实?/a>?/li>
  6. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q石墨文档单?0万WebSocket长连接架构实?/a>?/li>
  7. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q小c_爱单?20万长q接接入层的架构演进?/li>
  8. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??QB站基于微服务的API|关??的演q之?/a>?/li>
  9. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q去哪儿|酒店高性能业务|关技术实?/a>?/li>
  10. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专??Q百度基于Go的千万l一长连接服务架构实?/a>?/li>
  11. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专?十一)Q揭U腾讯公|TGW|关pȝ的技术架构演q?/a>?/li>
  12. ?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">长连接网x术专?十二)Q大模型时代多模型AI|关的架构设计与实现》(* 本文Q?/li>

3、AI|关技术概?/h1>

AI |关是一个用于统一接入和调度大语言模型QLLMQ服务的pȝQ支持多供应商、多模型、负载均衡调度的理。同时具备统一鉴权、Token 配额理、安全审计与可观能力,保 API 调用的安全性和E_性。负载均衡模块,能够Ҏ(gu)提供商多U\、多模型 ?API Key q行灉|路由Qƈ适用于多模型接入、多U户{复杂场景?/p>

4、整体架构设?/h1>

AI |关的整体架构和传统 API |关?qing)其cMQ在数据面和控制面上有几乎相同的设计?/p>

实际?AI |关是衍生于之前微服务团队?API GatewayQ我们在 API Gateway 的基上做了一些针?AI 业务接口的特性优化,如无~冲区的h代理Q支持域名、服务发现等混合调度QAI 长响应旉h的优雅退出等功能?/p>

在此基础上我们用于 API Gateway 相类似的数据面、控刉分离的架构,控制面会(x)变更后的网关配|准实时下发x据面节点。数据面节点识别配置有更新后在运行时?x)动态切换代理引擎至新的代理逻辑下,q保证老的代理逻辑?x)处理完当下被分配的h?/p>

在数据面中,我们对请求过滤器有两U模式的抽象Q请求过滤器和模型过滤器。请求过滤器作用于用L(fng)原始hQ这c过滤器往往被设计用于处理鉴权、限等逻辑。而模型过滤器作用于请求被转发臌模型Ӟ常用于模?API 的兼定w辑。比如模型发展中目前Ҏ(gu)度思?<think> 的标{֤理,推理引擎自定义参数的兼容修正{?/p>

除此之外控制面也?x)提?OpenAPI ?AI 模型供给团队上架模型Q新?API Key {日常运营能力。模型提供方可以在上架模型时支持为模型配|相应的 RPM、TPM 上限QƈҎ(gu)模型的推理引擎选择相应的兼容策略。也可以通过 OpenAPI 为单?API Key 授权相应模型{功能?/p>

5、鉴权认?/h1>

在鉴权机制中Q采用目前主?OpenAI SDK 兼容?API Key 认证Ҏ(gu)?/p>

Authorization: Bearer <YOUR_API_KEY>

?API Key 的认证基上还提供l粒度的权限控制功能Q允ؓ(f)每个 API Key 配置可访问的模型范围Q以?qing)对不同模型的设|不同的配额?/p>

另外支持灉|?API Key 有效期配|,用户可根据需求设|?API Key ?q期旉 ?不过期?/p>

6、配额管?/h1>

在配额管理体p里可以限制模型消费者的调用速率Q在q里主要参考了 OpenAI 的配额策略:(x) RPMQ每分钟h敎ͼ(j)?TPMQ每分钟 Tokens 敎ͼ(j)?/p>

在这里可以按照ؓ(f)每个用户分配不同模型?Token 配额Q或指定单位旉的请求数限制Q以保 AI 服务的高效运行ƈ防止出预算?/p>

同时我们q支持月l度?Token 配额Q业务按自然月进行预申P过预算时请求将被限制。对于接?AI 能力而言Q每个业务都需要提前申请预额度,避免带来难以负担的成本?/p>

7、多模型讉K

目前版本仅支持基?OpenAI API 的协议{发。以目前推理引擎发展和在U?AI 云服务而言Q兼?OpenAI API 协议已经成ؓ(f)业界pQ在此基上我们只需要实现根据用户需求的模型名,择优选择一个相应模型的上游 API 提供商(公司自徏 IDC或公有云Q,q替换成相应服务商的 API Key ?Upstream 域名可以进行负载均衡?/p>

对于公司 IDC 自徏的模型服务而言Q我们l沿用基?discovery {服务发现技术来发现推理引擎节点Q直接将h包装调度臌些自建模型?/p>

8、模型负载均?/h1>

LLM API 的负载均衡和传统实时 API 的模式有很大的不同?/p>

传统 API 开发中Q?/strong>一ơ请求往往被设计成?x)极大概率地命中一块结果缓存,且缓?Key 的计都比较单,因此很多负蝲均衡都简单基于请求相应时间、连接数{等?/p>

?LLM 推理场景下:(x)每个推理h都会(x)带来|关本n难以评估的计时间和讑֤资源占用Q此时基?RPS、TTFB、连接数{负载均衡策略将不再适用?/p>

?AI |关的默认负载均衡策略中Q?/strong>我们主要Z单模型服务节点处?Token 的吞吐和时g能力Q在黑盒模式下评估节点的饱和度。除此之外,推理引擎自n和显卡其实也暴露了许多和执行队列相关的指标,l合q些指标同样预计能获得比传统负蝲均衡更有效的体验?/p>

另外Q?/strong>Z Prefix Cache 的节炚w择同样?x)是一个相当有效的调度{略Q但 Prefix Cache 的计能力往往需要外部服务来q行Q因?AI |关同样支持接入外置的负载均衡算法,通过前置?RPC 来让外置服务选择最合适的模型节点?/p>

9、多U户隔离

业务主要通过 域名 + API Key q行讉K大模型推理,可以通过域名q行理Ҏ(gu)的接口\由,q行配置转发到指?Model Provider 服务。如果需要进行多业务隔离Q只需要通过不同的域名访问ƈ配置不同的{发目标?/p>

10、可观测能力

从业务视角,主要分ؓ(f) Gateway?Domain、Consumer、Provider、UserModel、UpstreamModel l度Q进行查询和观察h接口的可用率Q以?QPS、Latency?xx、Quota {指标?/p>

11、支持的API协议

11.1 概述

?AI |关中,我们主要?OpenAI 提供?API 作ؓ(f)基础协议Q让开发者基?OpenAI SDK 实现各种业务场景Ҏ(gu)?/p>

目前支持?API 协议有:(x)

  • 1Q?/em>对话式模型交互(CHAT_COMPLETIONQ;
  • 2Q?/em>通用文本向量接口QEMBEDDINGQ;
  • 3Q?/em>提示词模板(CHAT_TEMPLATEQ;
  • 4Q?/em>模型上下文协议(MODEL_CONTEXT_PROTOCOLQ??/li>

业务可以Ҏ(gu)自己不同的场景进行选择对应的协议?/strong>

11.2 对话式模型交互(CHAT_COMPLETIONQ?/h3>

对话式模型交互是最基础的协议,用于构徏h复杂逻辑的对话交互。同?API 支持上下文感知的对话Q得模型能够理解和响应多轮交流Qƈ在对话中保持合理的逻辑和语境一致性?/p>

对话接口?LLM 与现实世界沟通的重要渠道Q大?AI 需求实际上是在与模型q行一轮或多轮对话实现的?/p>

例如业务希望通过 LLM 排查U上故障的潜在原因,单来说就是将应用的各可观测指标、故障期间的日志记录或应用上下游的变更记录以对话形式告知 LLMQƈ?LLM 输出一D便于程序理解的l果表达模式Q让 LLM 从模型数据中计算出符合直觉潜在故障原因?/p>

11.3 通用文本向量QEMBEDDINGQ?/h3>

通用文本向量QEMBEDDINGQ接口的核心功能是将文本转化为高l向量,捕捉其语义特征。这在需要进行大规模信息(g)索、匹配和知识理的场景中ؓ(f)关键?/p>

11.4 提示词模板(CHAT_TEMPLATEQ?/h3>

提示词模板是一U结构化的对话生成方式,允许业务通过讄预定义的模板来生成系l化的回复。这U方式将语言模型的生成能力与模板化结构相l合Q业务能够以普?API 的方式进行请求交互,q可以更集中化地控制生成内容的样式和格式?/p>

同时我们也支持内嵌函敎ͼ以方便在提示词模板进行处理内容:(x)

  • 1Q?/em>len(v any) string
  • 2Q?/em>jsonify(v any) string
  • 3Q?/em>make_json_object(v ...any) map[string]any
  • 4Q?/em>slice_to_index_map(v any, startBy int) map[int]any

以评论内容翻译的场景Q?/strong>

- path: /v1/reply-to-en

  protocol: HTTP

  timeout: 300s

  middlewares:

  - name: v1_chat_template

    options:

'@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.ChatTemplateConfig

      provider: bilibili

      model_name: index

      prompt_template: |

        你的dQ以下给定文本是一个B站视频的相关文本信息Q可能ؓ(f)标题、简介、弹q或评论Q请你将l定的文本逐条译成英文。输入ؓ(f)一个json格式Qkey为序Pvalue为待译的弹q,一共有{{ len .reply_list }}个文本。示例如?

        输入: {"1": "xxx", "2": "xxx"}

 

        输出: {"1": "xxx", "2": "xxx"}

 

        注意Q用{dyn:xxx}W号包裹的是囄引用Q不需要翻译,直接保留。用[xxx]包裹的是表情W号Q不需要翻译,直接保留。现在请Ҏ(gu)上述要求完成如下片段的翻译,输出一共{{ len .reply_list }}个翻译后的结果,直接输出译后的英文Q不要进行Q何解释?/p>

 

        输入: {{ jsonify (slice_to_index_map .reply_list 1) }}

 

        输出:

提示词模版接口实际上是基于对话接口的一U高效对接模式。众所周知Q自 OpenAI 发布 ChatGPT 后,提示词工E(Prompt EngineeringQ本w被当作一U技术\U而提出。提C工程主要x提示词开发与优化Q帮助用户将大语a模型用于各场景和研究领域。研Ih员可利用提示工程来提升大语言模型处理复杂d场景的能力,如问{和术推理能力?/p>

对于接入 LLM 的业务研发而言Q他可能本n不具备很强的提示词工E能力;甚至提示词的优化本n也取决于模型的P代更新。因此对于解决特定领域的业务场景QAI 工程师往往?x)基于最优模型写出最_և的提CQ通过 AI |关的提C模版接口发布。业务提交简?JSON KV 对后Q渲染出最有效的完整提CQLLM Z有效提示词输出最_的结果?/p>

11.5 模型上下文协议(MODEL_CONTEXT_PROTOCOLQ?/h3>

MCP (Model Context ProtocolQ模型上下文协议) 是由 Anthropic ?2024 q底推出的一U开攑֍议,旨在让大型语a模型QLLMQ能够以标准化的方式q接到外部数据源和工兗该协议抽象q标准化?Resources、Prompts、Tools {资源及(qing)其接入方式,允许 LLM Client 应用以一致的方式q接到各U数据源和工P如文件、数据库、API {?/p>

配置转发到注册中心的 MCP 服务Q?/strong>

- path: /example-mcp/*

  protocol: HTTP

  timeout: 300s

  middlewares:

  - name: v1_mcp_server

    options:

      '@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.MCPServerConfig

      proxy:

        name: example-mcp

        upstreams:

        - url: 'discovery://infra.example.example-mcp'

- path: /example-mcp/*

  protocol: HTTP

  timeout: 300s

  middlewares:

  - name: v1_mcp_server

    options:

      '@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.MCPServerConfig

      proxy:

        name: example-mcp

        upstreams:

        - url: 'discovery://infra.example.example-mcp'

12、MCP市场与API接入

MCP 市场其实是一个公司内部的资源׃n和协作^台。简单来_(d)它可以看作是企业内的型“App Store”Q专门用来提供各U服务和资源的接入入口。可以让业务通过q个q_L获取、整合、用这些资源,使业务对接更加地单?/p>

用户可以把自q MCP 服务快速发布到市场上,q且接入?MCP Gateway 后即可用?/p>

当前?MCP 协议中主要有两个端点Q?/strong>

  • 1Q?/em>/sseQ是一?Events 长连接通知协议Q用于实旉知资源信息的变_(d)
  • 2Q?/em>/messageQ用?JSONRPC 通信端点Q能够以 JSONRPC 方式q行通信交互?/li>

而我们在 MCP Gateway 中,我们在企业内部将通过l一的域名进行提供业务接入,q且q行理每一?MCP服务的接口,例如Q?a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">https://mcp.example.com/logging-mcp?/p>

同时?MCP服务中,需要用相同的根\?/logging-mcpQ因为在 MCP 协议中,?x)先q接?/sse 端点Q再q回对应?/message 端点信息Q所以请求\径需要保持跟|关一致?/p>

13、本文小l?/h1>

AI |关通过l一接入、鉴权、配额管??模型调度支持Qؓ(f)大模型提供了高效、安全、定制的q接能力。同Ӟ支持?OpenAI 协议、提C模板 ?MCP 市场{功能,q一步扩展了 AI 技术在企业中的应用场景Qؓ(f)业务接入和资源整合提供了极高的便利性?/p>

14、相兌?/h1>

[1] Web端即旉讯技术盘点:(x)短轮询、Comet、Websocket、SSE

[2] SSE技术详解:(x)一U全新的HTML5服务器推送事件技?/a>

[3] |页端IM通信技术快速入门:(x)短轮询、长轮询、SSE、WebSocket

[4] 搞懂CWeb端即旉讯技术一文就够:(x)WebSocket、socket.io、SSE

[5] 全民AI时代Q大模型客户端和服务端的实时通信到底用什么协议?


Q本文已同步发布于:(x)http://www.52im.net/thread-4831-1-1.htmlQ?/a>



Jack Jiang 2025-05-22 14:08 发表评论
]]>红书APP的全新`蒙NEXT端性能优化技术实?/title><link>http://www.aygfsteel.com/jb2011/archive/2025/05/19/451622.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Mon, 19 May 2025 03:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/jb2011/archive/2025/05/19/451622.html</guid><wfw:comment>http://www.aygfsteel.com/jb2011/comments/451622.html</wfw:comment><comments>http://www.aygfsteel.com/jb2011/archive/2025/05/19/451622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jb2011/comments/commentRss/451622.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jb2011/services/trackbacks/451622.html</trackback:ping><description><![CDATA[<blockquote style="background-image: none; border-top: none; border-right: none; border-bottom: none; border-left-width: 3px; border-left-color: #e2dfdf; margin-right: 0px; margin-left: 0px; background-color: #eeeeee; width: 805.112px; color: #555555; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;"><p style="margin-top: 10px; margin-bottom: 10px;">本文来自QCon全球软g开发大?x)王劲鹏的技术分享,下文q行了排版优化和修订?/p></blockquote><h1>1、引a</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">性能和体验在 iOS / Android 双端场景下已l是一个较为成熟的话题Q但随着鸿蒙 OS 的发展,端侧开发者需要更多的x多端场景的差异性?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>本次分n的主题是红书在鸿蒙q_上的工程实践Q主要聚焦于性能优化和探索?/strong>Q?strong><span style="color: #ff00ff;">* PPT讲稿原文下蝲Q?/span></strong>?span style="color: #000080;"><a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;"><span style="color: #000080;"><span style="color: #3366ff;">红书`蒙OS下的性能优化探烦(ch)与实?PPT)[附g下蝲</span>]</span></a></span>》)(j)</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">先介l一下自q背景。之前一直从事大前端领域的工作,主要专注于跨端和容器化方案。也曾手写过一个跨端框Ӟ名ؓ(f) DoricQ它可以Ҏ(gu) React Native、Vue Native ?Flutter {。Doric 框架在落地时表现良好Q还支持了一些自研的 3D 引擎Ҏ(gu)。除此之外,我还有播攑֙内核研发l验Q以?qing)大前端常规体系?CI/CD 水U的工程l验。未来,我将持箋x大前端的演进Q尤其是鸿蒙q样的多端和跨端q_?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">?2023 q开始,鸿蒙的优势愈发明显,已经成ؓ(f)可与 iOS、安卓媲的W三大移动操作系l。从一些抖韌频中也可以看出,鸿蒙在流畅性方面甚臛_某些层面上超q了 iOS?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>今天的分享内容分为四个部分:(x)</strong></p><ul style="margin-left: 30px; padding-left: 0px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><li style="list-style: inherit;"><strong><em>1Q?/em></strong>介绍整个历程和背景;</li><li style="list-style: inherit;"><strong><em>2Q?/em></strong>介绍鸿蒙 OS 的相兌力和红书在该^C的优化实践;</li><li style="list-style: inherit;"><strong><em>3Q?/em></strong>通过鸿蒙 OS 提供的性能验证工具Q展C小U书在`蒙^C的性能优化验证Ҏ(gu)、优化后的性能提升以及(qing)具体的收益和l果Q?/li><li style="list-style: inherit;"><strong><em>4Q?/em></strong>ȝ和展望?/li></ul><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095629609-1968841729.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /></div><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"> </div><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"> </div><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><p style="margin-top: 10px; margin-bottom: 10px;"><strong>技术交:(x)</strong></p><div><div><div><p style="margin-top: 10px; margin-bottom: 10px;">- Ud端IM开发入门文章:(x)?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">新手入门一就够:(x)从零开发移动端IM</a>?/p><p style="margin-top: 10px; margin-bottom: 10px;">- 开源IM框架源码Q?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">https://github.com/JackJiang2011/MobileIMSDK</a>Q?a rel="noopener nofollow" target="_blank" style="color: #1d58d1; text-decoration-line: none;">备用地址Ҏ(gu)</a>Q?/p></div></div></div><p style="margin-top: 10px; margin-bottom: 10px;"><a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">Q本文已同步发布于:(x)http://www.52im.net/thread-4821-1-1.htmlQ?/a></p></div><h1>2、内容分享和整理</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">分n者:(x)王劲鹏,内容审校和编辑:(x)Kitty?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095636084-475085880.jpg" alt="" style="border: 0px; max-width: 100%; height: auto !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> <strong>王劲鹏:(x)</strong>红书`蒙工E师。目前主要负责小U书鸿蒙版的研发和工E徏设,曾从事过大前端架构设计、研发效能等方向的工作,在终端架构演q、性能优化以及(qing)跨端容器和动态化{方面具备长期实践及(qing)深厚l验Q持l关注大前端技术体p,鸿蒙以及(qing)多端的演q?/p></div><h1>3、版本历E和开发背?/h1><h3>3.1 红书P代历E?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>?2023 q年中开始,鸿蒙?#8220;千帆计划”正式启动Qƈ很快升?#8220;鸉K计划”?/strong>红书作?7 家头部合作商之一Q率先支持了鸿蒙Qƈ?2023 q?11 月中旬上U了一个基版的 beta 版本 APP。这个版本主要包含笔记浏览和视频W记览两大功能Q以?qing)一些简单的个h讄。当Ӟ红书的动作非常q速,可以说是头部应用厂商中对华ؓ(f)支持最为积极的品牌之一?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>在整个`飞计划中Q我们规划了三个核心里程:(x)</strong>除了 2023 q?11 月的 beta 版本外,q包?2024 q?6 月的 HDC 版本?2024 q?9 月的商用版本。HDC 版本主要是针对华为正式宣发`?3QHarmonyOS NextQ开发者测试的情况。在 HDC 版本中,我们上线了许多小U书Ҏ(gu)的存量功能,包括视频拍摄、图文拍摄以?qing)多讑֤协同{创新特性。而到?2024 q?9 月的商用版本交付Ӟ红书的核心功能已经基本与主端对齐。考虑到`蒙的开发周期仅有一q_(d)红书的鸿蒙 APP 在这一q中要对齐开发了十年甚至十几q的安卓?iOS 版本Q难度和压力都非常巨大?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">?2024 q?9 月,除了寚w双端的所有功能外Q我们还开发了许多其他功能Q包括华为支持的创新Ҏ(gu),例如拖拽——用户可以图片拖拽到中{站或艺{场景。此外,商用版本q支持了用户呼声较高?HDR ?Moonlight Photo 拍摄能力?/p><h3>3.2 U血鸿蒙与安卓的区别</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">我从几个l度来对比一下纯血鸿蒙和安?OS 的主要区别?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>内核架构U血鸿蒙的本质是微内核,而安卓是Z Linux 宏内核?/strong>微内核只提供基础的内存和文g理能力Q驱动和其他pȝ能力都在 OS 之外。这样做的好处是pȝE_性极高,即应用崩溃Q也不会(x)D整个pȝ崩溃Qsystem crashQ。而在 Linux 宏内怸Q应用的不当行ؓ(f)可能?x)直接导致系l崩溃?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>多设备适配鸿蒙目前支持多种讑֤cdQ?/strong>包括 Mate 60 Pro q样的直板手机、Mate X5 或非凡大?XT q样的双折叠和三折叠手机、^板电(sh)脑、R机,甚至华ؓ(f)正在研发的`?PC。`蒙真正实CcM iOS 的多端整合能力,通过一套代码实现多端部|Ӏ其工程体系和架构支持单 HAPQHarmony Ability PackageQ多 HSPQHarmony Service PackageQ模块,指o(h)集适配?ARM64 {多U架构,开发者只需Ҏ(gu)讑֤寸适配 UI 展示卛_。例如,?2024 q?9 ?的华为全场景讑֤发布?x)上Q余承东展示了小U书在从直板机到双折叠、三折叠讑֤上的适配能力Q完全实C响应式编E,不同讑֤形态下有不同的览体验?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>开发工具和~程模型鸿蒙的开发工具和~程模型与安卓差异较大?/strong>鸿蒙更类g Flutter 的嵌套型容器布局Q而不是安卓那U面向对象的开发方式。在语言层面Q`蒙完全封装了底层逻辑Q采用类似前?Flux 单向数据模式,通过数据变更驱动 UI h。这U模式类g前端 Redux ?MobX 框架中的 state 理 ?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>?2024 q?10 ?8 日公开始,鸿蒙的应用生态正在逐渐J荣?/strong>不过Q目前像微信q样的应用还处于抢先体验阶段。相比之下,安卓的生态已l相Ҏ(gu)熟。`蒙的最l目标是打造全场景讑֤生态,늛所有终端设备,以及(qing)Z OpenHarmony 内核开发的物联|终端。它q支持多U芯片体p,例如瑞芯?RK3568 {?/p><h3>3.3 红书`蒙应用架构层U?/h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">红书经q一q的q代Q其整体应用架构已经基本成熟。目前,整体代码量接q?200 万行Q达C一个较高的复杂度。在一般成熟的 APP 架构中,通常?x)包含一些基底层能力Q例如网l、磁盘存储、埋点体pRAPMQ应用性能理Q系l,以及(qing)一些通用lg和能力。对于`蒙^収ͼ红书还具备一些特D的公共通用能力?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>我们开发了一?#8220;一多框?#8221;</strong>Q这是一个支持一套代码多端部|的具体框架体系。通过q个框架Q我们实C多设备的断点控制功能。用户可以根据设备的寸和类型进行适配Q因为华备支持多端投屏。例如,用户可以在手Z览红书,然后内Ҏ(gu)屏到车机上。比如用戯C一辆问界汽车,可以在R内通过车机l箋览手机上的红书内容,q种场景在驾驶时其有用?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">除了底层框架Q对于上层业务,<strong>红书还有一套自研的lg库方?/strong>Q这套组件库承蝲了上层业务的多种功能Q包括图文笔记、视频笔记浏览,以及(qing)一?Hybrid 容器能力。小U书本质上在跨端开发中仍然使用?React NativeQRNQ和c?Web 技术。RN 引擎由华为内部合作提供,采用了自研的 ohos Ҏ(gu)Q用于解?React Native ?bundle ?JS 加蝲以及(qing)渲染问题。此外,q包括品定制层Q这里涵盖了所有相关的讑֤适配内容?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095644107-55583946.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"><strong> 3.4 性能优化与实?/strong></p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">目前Q安卓和 iOS 在性能优化斚w已经相当成熟Q包括如何分析性能热点问题、有哪些工具以及(qing)最?jng)_늭。然而,对于鸿蒙来说Q它是一个全新的pȝ。直?2024 q年中,鸿蒙的稳定性和畅性都q存在一些问题。这里重点讲q小U书?2024 q与华ؓ(f)一赯行了哪些实践Q以提升应用的性能和用户体验?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">我们定义了一个性能指标场景。这个指标体pL红书与华ؓ(f)共同探讨的结果,因ؓ(f)华ؓ(f)有一个性能工厂Q它Ҏ(gu)个应用的评都有一?S 标标准。小U书与华ZL(fng)定了针对红书场景需要观的具体指标。性能优化的核心是慢函数指标,它主要包含两部分Q过E时长和应用体验的流畅性?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>q程旉主要包含以下三点Q?/strong></p><ul style="margin-left: 30px; padding-left: 0px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><li style="list-style: inherit;"><strong><em>1Q?/em></strong><span style="color: #800000;">冷启动时长:(x)</span>q是用户最兛_的指标之一Q即从点d用图标到应用完成动画q展C第一帧的旉。对于多数应用,首页通常有缓存机制。例如,红书会(x)~存用户上次h的笔讎ͼ淘宝?x)缓存用户上ơ浏览的商品内容Q?/li><li style="list-style: inherit;"><strong><em>2Q?/em></strong><span style="color: #800000;">场景完成旉Q?/span>指完成某个特定场景所需的时_(d)</li><li style="list-style: inherit;"><strong><em>3Q?/em></strong><span style="color: #800000;">应用响应旉Q?/span>指用h作界面后Q界面真正发生变化的旉Q即响应时g?/li></ul><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">畅性方面,最基础的观指标是q_ FPSQ率)(j)Q包括丢帧数、最大连l丢帧数、丢帧卡次C?qing)卡率?strong>卡顿率可以通过量化计算得出Q?/strong>当一个场景中出现丢Ӟ丢的时长与场景L长的比值即为卡率Q它是一个小?1 的百分比数倹{?/p><h3>3.5 OS 能力 & 优化实践</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">首先Q针?IO 场景Q我们进行了相应的优化?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>鸿蒙 OS 的系l能力主要分Z下三个方面:(x)</strong></p><ul style="margin-left: 30px; padding-left: 0px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><li style="list-style: inherit;"><strong><em>1Q?/em></strong>q行化能力`?OS 提供了两Uƈ行化能力QWorker ?TaskPool。Worker cM于传l的U程模型Q每?Worker 都有自己的内存空间和执行单元Q支持通过消息QmessageQ进行通信。TaskPool 则类g协程或线E池Q能够动态管理线E数量,支持标记?@concurrent 的函数直接在d池中调度和运行。这两种机制都支持线E间隔离Q内存不׃nQ?/li><li style="list-style: inherit;"><strong><em>2Q?/em></strong>多线E通信和数据传输在多线E通信斚wQ`?OS 支持序列化数据传输和Z消息QmessageQ的通信机制。此外,q引入了事g发射器(EmitterQ用于系l事件的发布和订阅。这U机制允许线E间通过消息传递来实现复杂的交互逻辑Q?/li><li style="list-style: inherit;"><strong><em>3Q?/em></strong>同步转异步机刉`?OS 支持Z Promise 的异步编E模型,包括 async ?await 语法Q以?then ?catch Ҏ(gu)。这U机制能够有效提升应用的响应性和用户体验?/li></ul><h1>4、ƈ行化能力</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在ƈ行化能力斚wQ`?OS 提供了两套基实现方式。开发者可以通过 RTSQ运行时pȝQ实现ƈ行化Q也可以通过底层库(?C++ 标准库中的)(j)实现。不q,如果完全依赖底层库,可能?x)导致开发效率下降。ؓ(f)了满业务需求,鸿蒙 OS 在年初引入了 Worker ?TaskPool 能力。Worker cM于传l的U程模型Q每?Worker 都有独立的内存空间和执行单元Q支持通过消息q行通信。消息可以包含可序列化的数据Q也可以通过指针直接q移数据。TaskPool 则类gU程池,能够动态管理线E数量,支持标记?@concurrent 的函数直接在d池中调度和运行。与安卓q_的线E池不同Q`?OS ?TaskPool ?x)根据硬件条件和d负蝲动态调整线E数量。这U机刉免了安卓q_中因U程池数量过多而导致的pȝ资源消耗问题?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>接下来我们对比`?OS ?Worker q行化能力和安卓端的相关Ҏ(gu)?/strong>从多个维度来看,W(xu)orker 本质上不推荐手动创徏Q而是通过pȝ配置 build-provider.json l定 ETS 文g来实现创建。这一点与安卓端ƈ无明昑ַ异,安卓端可以通过 THREAD {方式启动线E?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在`?OS 5.0 以下版本Q如 4.2 版本Q中Q主要运行的仍然是安卓系l。这U情况下Q安卓线E数量存在上限,q对应用开发者来说是一个挑战。如?SDK 集成q多Q线E数可能标Q进而导致应用被pȝ强制l止Q或出现业务场景异常崩溃{稳定性问题?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>数据传输斚wQ?/strong>鸿蒙 OS Z优化 Worker 的性能和负载,?Worker 的数量和单个 Worker 的传输上限进行了限制。`?Worker 的单个传输上限类g安卓中的 Binder 机制Q也存在cM的传输限制。不q,安卓U程通常没有严格限制Q因为线E本质上是一个内存拷贝过E,除非开发者通过指针{方式自定义U程间数据传输?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>在传输格式上Q?/strong>鸿蒙 OS 支持通过 Sendable 接口q行数据传输。Sendable 是一U注解方式定义的数据l构Q具有传染性,卛_果一个类被标Cؓ(f) SendableQ其兌属性也必须?Sendable cd。`?OS 支持基础数据cdQ如 number、stringQ和集合cd作ؓ(f) Sendable 传输的内宏V对于跨模块调用Q`?OS 不允?Worker ?HAP 或跨 HSP 调用。相比之下,安卓应用通常q行在一个或多个 Dex 文g中,允许?Dex 或跨模块的线E间调用?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>TaskPool cM于双端的协程概念Q是一U轻量U程Q仅存储函数?/strong>不过QTaskPool 与协E有所不同Q它独立于Q务维度,且Q务执行时长有限制Q超q?3 分钟?x)被pȝ自动回收Q。安卓^台可以通过 ASM 插桩技术对U程的创建和执行q行监控和优化,但轻量U程或协E的实现通常依赖于线E池或协E机制?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">TaskPool 中的d默认支持数据转移QtransferQ,不支持拷贝。此外,TaskGroup 不支?SDK 初始化包的加载。某些同学习(fn)惯在异步U程中触?SDK 的行为,在`?OS 上可能会(x)?TaskPool 生命周期l束而导致变量被释放?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>关于q行化数据传输的 Sendable 概念Q?/strong>Sendable 通过pȝ提供?SharedHeapQ共享堆Q实C输。共享堆与本地堆Qlocal HeapQ的区别在于Q共享堆支持 Sendable 化数据的传输Q而本地堆则需要序列化。共享堆的管理和控制耗费了华Z家大量时间和_֊Q其中还涉及(qing)复杂的异步锁Qasync lockQ机制。在 RTS q发实例期间Q包?Worker、TaskPool {)(j)Q数据可以通过 Sendable 传递,?Worker 需要用单独的 API。TaskPool 则完全支?Sendable 的直接传输。这U异步锁机制允许?TaskPool ?Worker 中锁定其他Q务中的某些函敎ͼ实现U程间的同步Q类g安卓中的 synchronized 或其他锁机制?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095652084-1773569795.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /></div><h1>5、小U书典型q行化场?/h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>红书在一些典型化场景中已l实Cq行化处理?/strong>例如Q网l请求是一个典型的耗时操作Q因求过E中涉及(qing)验签和安全能力的处理Q这些操作如果在ȝE中同步完成Q可能会(x)D应用掉。当用户滑动Ӟ掉现象?x)非常明显,q通常是由于大量计引L(fng)。ؓ(f)了解册一问题Q我们采用了 Worker 化的方式Q将q些操作Ud Worker U程中,从而避免主U程的卡ѝ?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在进行埋Ҏ(gu)Q可能会(x)涉及(qing)数据库的 IO 操作Q这些操作也不徏议在ȝE中执行。通过这些操作放?Worker U程中,可以有效避免对主U程的媄(jing)响?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">针对双列布局中的囄和资源预加蝲Q我们采用华研的 RCP |络解决Ҏ(gu)Q类g HTTPQ,通过 Worker U程在远端进行下载,q在完成后将l果q回CU程。此外,TaskPool 的应用场景也非常q泛Q例如文件上传、多媒体操作以及(qing)启动d的编排等。TaskPool 的优势在于轻量化Q避免了U程上下文切换带来的不必要耗时?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>关于冷启动和首刷场景的优化?/strong>q部分主要包括两个方面:(x)模块的懒加蝲和动态组件的复用池。懒加蝲是应用开发中常见的优化手D,cM于安卓端?class order 机制。当应用不需要某个类Ӟ可以延迟加蝲该类Q直到真正需要用时才加载。这U方式可以显著提高冷启动阶段的代码加载效率,从而大q降低冷启动旉?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>动态组件和lg复用池则是ؓ(f)了解?UI lg重复创徏的问题?/strong>在应用中Q可能会(x)有多U相同类型的 UI lgQ例如小U书中的W记lgQ。ؓ(f)了避免重复创建带来的开销Q我们希望在q行时尽量复用已有的lgQ而不是频J地创徏和销毁?/p><h1>6、类前端视角下的模块懒加?/h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>我们通过特定的分析工具对懒加载进行了深入分析?/strong>如图所C,我们能够识别出启动过E中加蝲的各U模块,包括 RNOHQReact Native on HarmonyQ、Web engineQ网引擎)(j)、Red PlayerQ播攑֙Q等lg。这些模块的加蝲q程涉及(qing)到多?so 文gQ即׃n对象文g?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095658657-2113307207.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> 通过自上而下的分析方法,我们可以清晰地看到每个模块加载的具体耗时。进一步分析这?so 文g?RTSQ运行时pȝQ的兌Q以?qing)它们所引入?Napi ?TS 文g。我们进行了懒加载潜在对象的分析Q发现许?RTS 实际上ƈ不需要的cL件已l被加蝲。这是因为开发者在~写代码Ӟ可能q未充分考虑到导入一个类或方法对应用启动延迟的媄(jing)响?/p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">Z优化q一q程Q我们的目标是减字节码中需要加载的cL件数量,从而加快应用的冷启动速度。华为提供的~译器能够将 RTS ~译?Ark bytecodeQ方舟字节码Q,q是一U高效的字节码格式。通过减少需要加载的cL件数量,我们可以显著提高应用的启动速度?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">华ؓ(f)q提供了一U懒加蝲的导入方式,只有在真正需要用某个类Ӟ它才?x)被加蝲。这U懒加蝲机制有助于减应用启动时的资源消耗。这引发了一个问题:(x)Z么华Z默认采用全懒加蝲方式Q即只有在用时才加载类文g呢?我已l将q个问题反馈l华为,q且pȝ侧可能会(x)考虑在未来的版本中默认采用懒加蝲方式Q同时仍然允许用h动选择非懒加蝲的方式进行类文g的加载?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095706195-1478026318.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /></div><h1>7、动态组?/h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>在小U书的首场景中Q笔记卡lg在多个场景中被复用?/strong>Z避免重复创徏 UI D的性能消耗,我们采用了动态组件的概念。动态组件的核心原理是利用占位符来gq组件的创徏Q这?Android 开发中使用 Stub 模式的概늛伹{在q种模式下,可以使用一个代理对象(stubQ来代表未初始化的lgQ从而gq组件的创徏q程。当真正需要渲染组件时Q再渲染内容填充进去,从而避免每ơ调用构建函敎ͼ?buildQ时的耗时?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">占位逻辑通过pȝ?API 实现Q涉?qing)?NodeContainer ?NodeController 的绑定关pRContainer ?Controller 一一映射Q由 NodeCore q行理。Container 仅管理当前展现的内存部分Q用完毕后需要将其放回池中进行回收和再利用。以冷启动首刷ؓ(f)例,在启动阶D可以先获取盘上的W记内容Q然后在 BuilderNode 中预先创建多?Image lg。这P在等待网l或推荐接口响应ӞImage lg已经创徏完毕Q从而在首页h时可以立即用这些组Ӟq对于提高首刷非常有益?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095713990-2006155962.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> 对于lg复用池,当动态组件不再用时Q需要将其返回到lg池中。对于自定义lgQ通过 NoteContainer 占位方式Q由 NodeController q行理。在需要创建子lgӞ先在 NodePool 中查找,如果找不刎ͼ则创建新lgQ如果找刎ͼ则尝试复用。流E图展示了从 Container 装蝲 NodeItem 开始,通过 NodePool 查找Q如果找到则q行条g判断和复用?/p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">lg的新建和复用q程中,如果扑ֈ对应?NodeItemQ则调用 build Ҏ(gu)q更新自定义lg的状态,完成复用。如果有对应?NodeItemQ可以直接通过 update 函数更新内部状态ƈh UI。但要注意,update Ҏ(gu)可能?x)因状态变量过于复杂而导致更新gq,出现囑փD媄(jing)。因此,需要拆?stateQ其够小Q以保状态变更到通知 UI 的时间羃短,消除D媄(jing)?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">我们的策略是优先?NodePoolQ节Ҏ(gu)Q中查找可用?NodeItemQ节炚wQ。如?NodePool 中存在可用的 NodeItemQ我们就直接使用它,q过 getNode Ҏ(gu)q行 item l定Q随后更新其状态以实现复用。如?NodePool 中没有找到对应的 NodeItemQ那么我们将通过 makeNode Ҏ(gu)调用 build 函数来创建新的节炚w?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">完成lg的复用后Q我们需要将q些lgq回到缓存池中,以便在未来可以再ơ用。这个过E涉?qing)?NodeContainerQ节点容器)(j)?NodeControllerQ节Ҏ(gu)制器Q的销毁,q将 NodeItem 重新攑֛ NodePool 中。ؓ(f)了更有效地管理缓存,业务层可以利?LRUQ最q最用)(j)法Q或者`蒙系l提供的 LRUCache ?LiUHashMap {数据结构,来自定义~存的大,从而优化组件的复用和缓存策略?/p><h1>8、滑动类场景</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在小U书应用中,滑动cd景非常普遍,包括推荐늚子频道、个人页中的收藏点赞以及(qing)用户自己发布的笔讎ͼq有搜烦(ch)l果中的搜索结果和用户商品{,q些都是双列滑动场景。这些双列滑动场景占据了红书用户体验的 90% ?95%Q因此,滑动体验的流畅性对于用L(fng)整体体验臛_重要?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>Z提升滑动场景的流畅性,红书采用了 RCP 框架来优化网l资源的获取?/strong>RCP 是华为提供的一个系l组件能力,主要解决|络资源获取效率问题。通过 RCPQ开发者可以在需要时发v|络hQƈ自定义资源的写入地址Q如文g?ArrayBuffer。RCP 负责高效地将资源写入指定位置Q而在不需要时Q可以取?RCP hQ从而优化资源管理?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095720506-16141495.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> RCP 的核心能力在于能够取消请求,q对q场景q行了优化,其徏联过E优?HTTP 1.1 ?2.0。基?RCPQ小U书q应用了华ؓ(f)俄研所提供?Prefetch Ҏ(gu)。Prefetch Ҏ(gu)在瀑布组件的可见区变更时Q通过 worker U程Q如 prefetched workerQ启动资源获取,当不可见时关闭,从而优化快速滑动场景,减少不必要的带宽消耗?/p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在快速滑动过E中Q有?item 可能短暂消失Q对于双端场景,|络h可能已经发出且在途,无法取消Q导致带宽浪贏VPrefetch ?RCP l合的方式可以优化这U快滑场景,防止真正惌看的内容出现白块。Prefetched worker U程理多个 RCP hQ每个请求都有完整的生命周期。当通过 RCP h获取到所需资源Ӟ?x)通知ȝE,ȝE根据地址加蝲资源?Image lg或占位符 RQI lg中?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在小U书的开发过E中Q我们遇C一些性能热点问题Q这些问题大多是通过 Code LinterQ代码检查工P(j)(g)出来的。由于开发节奏快Q开发者在~写代码时可能难以关注到性能问题Q因此需?CIQ持l集成)(j)(g)查工h辅助(g)查?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>常见的性能热点包括Q?/strong></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>1Q?/em></strong><span style="color: #800000;">在列表场景中频繁使用?LadyForEach lgQ需要指?key 以实现列表复用?/span>如果开发者忘记指?keyQCode Linter ?x)报错提C;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>2Q?/em></strong><span style="color: #800000;">?onClick ?onVisible {函C~写I?callbackQ回调函敎ͼ(j)?/span>当这些空 callback U篏C定数量(如几百个或上千个Q时Q可能会(x)严重拖慢应用性能。Code Linter 可以扫描c问题;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>3Q?/em></strong><span style="color: #800000;">未?TaskPool 处理|络资源?/span>例如QImage Bitmap 直接传?URL q行同步加蝲Q当|络d时会(x)D UI U程卡顿Q?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>4Q?/em></strong><span style="color: #800000;">复杂?ETS lg在列表场景下未实现重用?/span>未设|重用的 ETS lg在列表滚动时需要重新构建,非常耗时。组件嵌套层U过׃?x)导致性能问题。在安卓端,布局(g)查器容器嵌套不超q四层;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>5Q?/em></strong><span style="color: #800000;">使用 JSON.stringify q行对象序列化?/span>JSON.stringify 有一定耗时Q尤其在处理 100KB 左右的数据时Q可能需?10 毫秒左右。Code Linter ?x)提C部分性能问题Q但是否需要{异步U程需要开发者自行判断;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>6Q?/em></strong><span style="color: #800000;">调用 Image ?syncLoadQ同步加载)(j)?/span>在某些场景下Q如转场动画Q需要同步加?image 以保证连贯性。但如果 image 是非盘资源Q如|络资源Q,?x)导致卡帧。Code Linter 可以扫描c问题;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>7Q?/em></strong><span style="color: #800000;">关于~译器的优化?/span>ETS lg应避免嵌套过深。如果嵌套过深,可以每层函数通过pȝ?builder param ?builder 函数转换。?@builder 注解标识的函C(x)在编译期间与 ETS 代码整合Q从而提高编译器优化效果?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">Code Linter 支持全量扫描和基?Git DIFF 的增量扫描,但目前华为的 Code Linter q不能与 Git Prehook 兌Q导致无法在水U上自动(g)查。虽?CI (g)查阶D已?Code LinterQ但本地代码提交阶段仍需手动q行脚本Q无法实现自动检查。我们正在催促华册一问题?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095727349-1682226898.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> </p></div><h1>9、UI 重蝲场景分Ҏ(gu)</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>在处?UI 重蝲场景Ӟ我们采用了一U称为分帧方案的Ҏ(gu)?/strong>分q个术语的含义是Q当应用在一帧内无法完成所有绘制工作,或者在多内都无法完成Ӟ?x)导致屏q卡现象。尽用户可以看到画面,但却无法q行滑动或操作。在q种情况下,分Ҏ(gu)显得尤为合适。虽然分帧方案可能看h不是最优雅的解军_法,但它实能够有效地解x能问题Q应用性能辑ֈ预期标准。分帧方案虽然看似是一U应急措施,但它能够帮助应用性能达标?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>分Ҏ(gu)的流E大致如下:(x)</strong>假设我们有数?a、b、c 需要渲染,未采用分帧方案前Q数?a、b、c ?x)同时到辑ƈ触发状态变_(d)q而驱动整?UI q行h。这?x)导致在一帧内需要绘制大?UI lgQ从而媄(jing)响应用性能。ؓ(f)了解册个问题,我们采用分Ҏ(gu)Q将数据 a、b、c 拆分开Q分别在不同的中进行渲染。例如,数据 a 在第一帧中渲染完成后,通过调用宏观指o(h)让其q入下一阶段Q然后在下一帧中更新数据 bQ依此类推?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095737895-546186029.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"> </p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>在小U书的图文笔记场景中Q分帧方案得C应用?/strong>当用户在首页的双列场景中点击一笔记进入笔记详情页Ӟq个q程涉及(qing)到许多组件的加蝲。我们可以将q些lg拆分成不同的帧,例如?a、 b 和 c。对于用戯(g)言Q他们通常希望在第一旉看到整个大屏的画面,因此我们?x)优先在?a 中展C大图。而在?b 和 c 中,我们再处理顶部导航栏或底部交互区{内宏V通过q种分{略Q我们能够确保用户在W一旉看到最关键的内容,同时避免了因Zơ性加载过多组件而导致的性能问题?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095744638-1715916034.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /></div><h1>10、`蒙NEXT调优工具</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong>传统的主观工具对于`?OS 的性能分析仍然适用?/strong>例如Q抖韛_红书都通过竞品分析来进行主观测评。这U能力主要是通过录屏来展C整个流E的耗时和时长,特别适合评估冷启动完成时延和转场q程的性能。通过录屏Q我们可以逐查看用户从点d始到l束的数和真实旉Q以此来衡量整个q程的持l时间?/p><h3>10.1 鸿蒙性能分析工具QIDE Profiler</h3><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">除了主观工具Q我们还可以使用 IDE 提供的性能分析工具Q如 ProfilerQ来分析慢函数。由?ArkTS ~程语言框架主要通过 RTS ?NAPIQ原生应用接口)(j)q行兌Q因此需要能够查?ArkTS ?NAPI 的整个堆栈层U。这与安卓有所不同Q因为当 Java 通过 Java Native API 与原生代码交互时Q堆栈ƈ不那么容易查看?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在小U书的性能分析中,我们展示了一个整体线E分析的例子。在左侧Q可以看到小U书的主U程Q如 com 点开头的U程Q、Daemon U程、Worker U程以及(qing) FFRT U程。FFRT 是一U运行函数流的线E,可以执行 TaskPool 上的函数。在下图右侧Q我们可以看到在 RTS 环境下的分析l果Q其中顶部显CZ NAPI 调用Q底部则是一?C++ 函数。整个调用栈和它们的执行旉是通过一U自上而下的视图来展示的。利用这U视图,我们可以_地识别出哪些慢函数是造成界面卡顿的原因?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095751591-1532375318.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"><strong>10.2 性能场景试工具QDevEco Testing</strong></p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">DevEco Testing 是一个性能试工具Q它的功能非常全面,性能试只是其中的一部分。除了性能试Q它q支持多U测试场景,包括 debug testing。在 debug testing 场景中,用户可以自定义业务场景,监测 CPU 的耗时和负载、GPU 的耗时和负载、设备发热情况以?qing)功耗等问题?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095758308-470924747.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;">使用 DevEco Testing q行性能试的过E如下:(x)首先定义试场景Q然后捕获主帧数据。一旦开始捕P可以观到 FPSQ率)(j)、GPU 负蝲以及(qing)整体功耗等数据。完成性能数据捕获后,工具?x)生成一份报告,为用h供了一个完整的场景分析。不q,目前场景定义q缺乏脚本化能力Q需要h工操作辅助。未来,我们期望能够实现场景定义的脚本化配置Q类g自动化测试。这P可以通过自动化工P实现更高效的试程?/p></div><h1>11、小l与展望</h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">在对性能场景q行优化后,我们可以看到显著的收益。在实验室环境下的测试显C,冷启动时间可以降?50%Q响应时延可以低?100 毫秒Q完成时延则保持与双端持qx更优。在畅性方面,在多场景和重载场景下均实C 0 丢的成果。需要注意的是,q里的测试是在非重蝲模式下进行的Q即没有同时q行多个资源密集型应用,如《王者荣耀》或《和q精英》等。在q种条g下,我们的核心场景,如冷启动、搜索和个h늭Q都能够与双端完全对齐?/p><div style="font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><img src="https://img2024.cnblogs.com/blog/1834368/202505/1834368-20250519095805977-1776350243.png" alt="" style="border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) 0s !important;" /><p style="margin-top: 10px; margin-bottom: 10px;"><strong>展望未来Q有几个方向Q?/strong></p></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>1Q?/em></strong><span style="color: #800000;">首先</span>Q我们希望能够在全场景下实现lg复用Q以最大程度地实现 UI 复用。这样可以在多个业务之间的{场或 UI 创徏q程中,不必要?UI 创徏和消耗降到最低?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>2Q?/em></strong><span style="color: #800000;">其次</span>Q我们正在考虑代码延迟加蝲?lazy 机制。华为内部可能将其作为通用的解x案,但在实施q程中我们发C许多问题Q例如全 lazy 加蝲可能?x)?jing)响第三方 SDKQ如支付宝等Q因为它们可能进行了额外的二q制优化Q导致加载失败或无法响应。因此,我们期望通过代码延迟加蝲来实现持l治理,但目前它可能q不适合全场景的 lazy import?/p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong><em>3Q?/em></strong><span style="color: #800000;">最?/span>Q我们关注防劣化问题Q即在每个版本发布时Q我们不希望性能指标出现劣化。我们希望能够在开发阶D就定义劣化指标和具体数据,以防止应用劣化。这部分可能需要借助 DevEco Testing 和主观测评的方式来实现。包括我们关注的指标Q例如冷启动和流畅性等Q未来可能会(x)U_防劣化场景。目前,我们?CI 环节?RC 环节Q包括流水线的性能控和代?CR 机制Q都能够规避q类问题?/p><h1>12、相兌?/h1><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[1] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">鸿蒙NEXT官方开发指?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[2] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">一q撸完百万行代码Q企业微信的全新鸿蒙NEXT客户端架构演q之?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[3] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">鸿蒙NEXT如何保证应用安全Q详解`蒙NEXT数字{֐和证书机?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[4] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">开源IM聊天E序HarmonyChatQ基于`蒙NEXT的WebSocket协议</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[5] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信U血鸿蒙版正式发布,295天走完微?4q技术之路!</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[6] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">x通讯框架MobileIMSDK的`蒙NEXT端详l介l?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[7] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">x通讯框架MobileIMSDK的`蒙NEXT端开发者手?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[8] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">拥抱国化:(x)转{APP的`蒙NEXT端开发尝鲜之?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[9] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信Windows端IM消息数据库的优化实践Q查询慢、体U大、文件损坏等</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[10] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信技术分享:(x)揭秘微信后台安全特征数据仓库的架构设?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[11] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">IM跨^台技术学??Q全面解密新QQ桌面版的Electron内存优化实践</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[12] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">企业微信针对百万U组l架构的客户端性能优化实践</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[13] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">揭秘企业微信是如何支持超大规模IMl织架构?#8212;—技术解dl关p链</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[14] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信团队分nQ详解iOS版微信视频号直播中因帧率异常D的功耗问?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[15] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信团队分nQ微信后端v量数据查询从1000ms降到100ms的技术实?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[16] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">大型IM工程重构实践Q企业微信Android端的重构之\</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[17] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">IM技术干货:(x)假如你来设计微信的群聊,你该怎么设计Q?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[18] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">微信团队分nQ来看看微信十年前的IM消息收发架构Q你做到了吗</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[19] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">L被低伎ͼ从未被超,揭秘QQ极致丝滑背后的硬核IM技术优?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[20] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">首次公开Q最新手机QQ客户端架构的技术演q实?/a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;">[21] <a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">大型IME_性监实践:(x)手Q客户端性能防劣化系l的之\</a></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ffffff;"><br /><a target="_blank" rel="noopener nofollow" style="color: #1d58d1; text-decoration-line: none;">Q本文已同步发布于:(x)http://www.52im.net/thread-4821-1-1.htmlQ?/a></p><img src ="http://www.aygfsteel.com/jb2011/aggbug/451622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jb2011/" target="_blank">Jack Jiang</a> 2025-05-19 11:24 <a href="http://www.aygfsteel.com/jb2011/archive/2025/05/19/451622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ﶫ</a>| <a href="http://" target="_blank">ൺ</a>| <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϰˮ</a>| <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">»</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">޼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">齭</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƥɽ</a>| <a href="http://" target="_blank">˴</a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank">¡Ң</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>