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> ?源自真正q营的商业品:(x)RainbowChat-Web的技术源于真实运营的商业产品?br /> ?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> 1?/em>支持文本消息、查?span style="color: #a0522d;">语音留言消息 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的情况下仍可很好地工2、品质说?/h1>
?它不是个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>
4、功能简?/h1>
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;
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> 聊天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>6、支持的聊天消息cd
7、好友聊?/h1>
8、群聊聊?/h1>
9、发?#8220;名?#8221;消息
10、发?#8220;位置”消息
11?#8220;消息撤回”
12?#8220;消息转发”
12?#8220;消息引用”
14?#8220;@”功能
15、其它特性和l节
本文来自哔哩哔哩通用技术团队分享,下文q行了排版优化和修订?/p>
随着 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> AI |关是一个用于统一接入和调度大语言模型QLLMQ服务的pȝQ支持多供应商、多模型、负载均衡调度的理。同时具备统一鉴权、Token 配额理、安全审计与可观能力,保 API 调用的安全性和E_性。负载均衡模块,能够Ҏ(gu)提供商多U\、多模型 ?API Key q行灉|路由Qƈ适用于多模型接入、多U户{复杂场景?/p> 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> 在鉴权机制中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> 在配额管理体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> 目前版本仅支持基?OpenAI API 的协议{发。以目前推理引擎发展和在U?AI 云服务而言Q兼?OpenAI API 协议已经成ؓ(f)业界pQ在此基上我们只需要实现根据用户需求的模型名,择优选择一个相应模型的上游 API 提供商(公司自徏 IDC或公有云Q,q替换成相应服务商的 API Key ?Upstream 域名可以进行负载均衡?/p> 对于公司 IDC 自徏的模型服务而言Q我们l沿用基?discovery {服务发现技术来发现推理引擎节点Q直接将h包装调度臌些自建模型?/p> 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> 业务主要通过 域名 + API Key q行讉K大模型推理,可以通过域名q行理Ҏ(gu)的接口\由,q行配置转发到指?Model Provider 服务。如果需要进行多业务隔离Q只需要通过不同的域名访问ƈ配置不同的{发目标?/p> 从业务视角,主要分ؓ(f) Gateway?Domain、Consumer、Provider、UserModel、UpstreamModel l度Q进行查询和观察h接口的可用率Q以?QPS、Latency?xx、Quota {指标?/p> ?AI |关中,我们主要?OpenAI 提供?API 作ؓ(f)基础协议Q让开发者基?OpenAI SDK 实现各种业务场景Ҏ(gu)?/p> 目前支持?API 协议有:(x) 业务可以Ҏ(gu)自己不同的场景进行选择对应的协议?/strong> 对话式模型交互是最基础的协议,用于构徏h复杂逻辑的对话交互。同?API 支持上下文感知的对话Q得模型能够理解和响应多轮交流Qƈ在对话中保持合理的逻辑和语境一致性?/p> 对话接口?LLM 与现实世界沟通的重要渠道Q大?AI 需求实际上是在与模型q行一轮或多轮对话实现的?/p> 例如业务希望通过 LLM 排查U上故障的潜在原因,单来说就是将应用的各可观测指标、故障期间的日志记录或应用上下游的变更记录以对话形式告知 LLMQƈ?LLM 输出一D便于程序理解的l果表达模式Q让 LLM 从模型数据中计算出符合直觉潜在故障原因?/p> 通用文本向量QEMBEDDINGQ接口的核心功能是将文本转化为高l向量,捕捉其语义特征。这在需要进行大规模信息(g)索、匹配和知识理的场景中ؓ(f)关键?/p> 提示词模板是一U结构化的对话生成方式,允许业务通过讄预定义的模板来生成系l化的回复。这U方式将语言模型的生成能力与模板化结构相l合Q业务能够以普?API 的方式进行请求交互,q可以更集中化地控制生成内容的样式和格式?/p> 同时我们也支持内嵌函敎ͼ以方便在提示词模板进行处理内容:(x) 以评论内容翻译的场景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> 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' MCP 市场其实是一个公司内部的资源׃n和协作^台。简单来_(d)它可以看作是企业内的型“App Store”Q专门用来提供各U服务和资源的接入入口。可以让业务通过q个q_L获取、整合、用这些资源,使业务对接更加地单?/p> 用户可以把自q MCP 服务快速发布到市场上,q且接入?MCP Gateway 后即可用?/p> 当前?MCP 协议中主要有两个端点Q?/strong> 而我们在 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> AI |关通过l一接入、鉴权、配额管??模型调度支持Qؓ(f)大模型提供了高效、安全、定制的q接能力。同Ӟ支持?OpenAI 协议、提C模板 ?MCP 市场{功能,q一步扩展了 AI 技术在企业中的应用场景Qؓ(f)业务接入和资源整合提供了极高的便利性?/p> [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大模型客户端和服务端的实时通信到底用什么协议?2、系列文?/h1>
3、AI|关技术概?/h1>
4、整体架构设?/h1>
5、鉴权认?/h1>
6、配额管?/h1>
7、多模型讉K
8、模型负载均?/h1>
9、多U户隔离
10、可观测能力
11、支持的API协议
11.1 概述
11.2 对话式模型交互(CHAT_COMPLETIONQ?/h3>
11.3 通用文本向量QEMBEDDINGQ?/h3>
11.4 提示词模板(CHAT_TEMPLATEQ?/h3>
11.5 模型上下文协议(MODEL_CONTEXT_PROTOCOLQ?/h3>
12、MCP市场与API接入
13、本文小l?/h1>
14、相兌?/h1>
Q本文已同步发布于:(x)http://www.52im.net/thread-4831-1-1.htmlQ?/a>
本文来自QCon全球软g开发大?x)王劲鹏的技术分享,下文q行了排版优化和修订?/p>
性能和体验在 iOS / Android 双端场景下已l是一个较为成熟的话题Q但随着鸿蒙 OS 的发展,端侧开发者需要更多的x多端场景的差异性?/p>
本次分n的主题是红书在鸿蒙q_上的工程实践Q主要聚焦于性能优化和探索?/strong>Q?strong>* PPT讲稿原文下蝲Q?/span>?span style="color: #000080;">红书`蒙OS下的性能优化探烦(ch)与实?PPT)[附g下蝲]》)(j)
先介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>
?2023 q开始,鸿蒙的优势愈发明显,已经成ؓ(f)可与 iOS、安卓媲的W三大移动操作系l。从一些抖韌频中也可以看出,鸿蒙在流畅性方面甚臛_某些层面上超q了 iOS?/p>
今天的分享内容分为四个部分:(x)
技术交:(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>
分n者:(x)王劲鹏,内容审校和编辑:(x)Kitty?/p>
王劲鹏:(x)红书`蒙工E师。目前主要负责小U书鸿蒙版的研发和工E徏设,曾从事过大前端架构设计、研发效能等方向的工作,在终端架构演q、性能优化以及(qing)跨端容器和动态化{方面具备长期实践及(qing)深厚l验Q持l关注大前端技术体p,鸿蒙以及(qing)多端的演q?/p>
?2023 q年中开始,鸿蒙?#8220;千帆计划”正式启动Qƈ很快升?#8220;鸉K计划”?/strong>红书作?7 家头部合作商之一Q率先支持了鸿蒙Qƈ?2023 q?11 月中旬上U了一个基版的 beta 版本 APP。这个版本主要包含笔记浏览和视频W记览两大功能Q以?qing)一些简单的个h讄。当Ӟ红书的动作非常q速,可以说是头部应用厂商中对华ؓ(f)支持最为积极的品牌之一?/p> 在整个`飞计划中Q我们规划了三个核心里程:(x)除了 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> ?2024 q?9 月,除了寚w双端的所有功能外Q我们还开发了许多其他功能Q包括华为支持的创新Ҏ(gu),例如拖拽——用户可以图片拖拽到中{站或艺{场景。此外,商用版本q支持了用户呼声较高?HDR ?Moonlight Photo 拍摄能力?/p> 我从几个l度来对比一下纯血鸿蒙和安?OS 的主要区别?/p> 内核架构U血鸿蒙的本质是微内核,而安卓是Z Linux 宏内核?/strong>微内核只提供基础的内存和文g理能力Q驱动和其他pȝ能力都在 OS 之外。这样做的好处是pȝE_性极高,即应用崩溃Q也不会(x)D整个pȝ崩溃Qsystem crashQ。而在 Linux 宏内怸Q应用的不当行ؓ(f)可能?x)直接导致系l崩溃?/p> 多设备适配鸿蒙目前支持多种讑֤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> 开发工具和~程模型鸿蒙的开发工具和~程模型与安卓差异较大?/strong>鸿蒙更类g Flutter 的嵌套型容器布局Q而不是安卓那U面向对象的开发方式。在语言层面Q`蒙完全封装了底层逻辑Q采用类似前?Flux 单向数据模式,通过数据变更驱动 UI h。这U模式类g前端 Redux ?MobX 框架中的 state 理 ?/p> ?2024 q?10 ?8 日公开始,鸿蒙的应用生态正在逐渐J荣?/strong>不过Q目前像微信q样的应用还处于抢先体验阶段。相比之下,安卓的生态已l相Ҏ(gu)熟。`蒙的最l目标是打造全场景讑֤生态,늛所有终端设备,以及(qing)Z OpenHarmony 内核开发的物联|终端。它q支持多U芯片体p,例如瑞芯?RK3568 {?/p> 红书经q一q的q代Q其整体应用架构已经基本成熟。目前,整体代码量接q?200 万行Q达C一个较高的复杂度。在一般成熟的 APP 架构中,通常?x)包含一些基底层能力Q例如网l、磁盘存储、埋点体pRAPMQ应用性能理Q系l,以及(qing)一些通用lg和能力。对于`蒙^収ͼ红书还具备一些特D的公共通用能力?/p> 我们开发了一?#8220;一多框?#8221;Q这是一个支持一套代码多端部|的具体框架体系。通过q个框架Q我们实C多设备的断点控制功能。用户可以根据设备的寸和类型进行适配Q因为华备支持多端投屏。例如,用户可以在手Z览红书,然后内Ҏ(gu)屏到车机上。比如用戯C一辆问界汽车,可以在R内通过车机l箋览手机上的红书内容,q种场景在驾驶时其有用?/p> 除了底层框架Q对于上层业务,红书还有一套自研的lg库方?/strong>Q这套组件库承蝲了上层业务的多种功能Q包括图文笔记、视频笔记浏览,以及(qing)一?Hybrid 容器能力。小U书本质上在跨端开发中仍然使用?React NativeQRNQ和c?Web 技术。RN 引擎由华为内部合作提供,采用了自研的 ohos Ҏ(gu)Q用于解?React Native ?bundle ?JS 加蝲以及(qing)渲染问题。此外,q包括品定制层Q这里涵盖了所有相关的讑֤适配内容?/p> 3.4 性能优化与实?/strong> 目前Q安卓和 iOS 在性能优化斚w已经相当成熟Q包括如何分析性能热点问题、有哪些工具以及(qing)最?jng)_늭。然而,对于鸿蒙来说Q它是一个全新的pȝ。直?2024 q年中,鸿蒙的稳定性和畅性都q存在一些问题。这里重点讲q小U书?2024 q与华ؓ(f)一赯行了哪些实践Q以提升应用的性能和用户体验?/p> 我们定义了一个性能指标场景。这个指标体pL红书与华ؓ(f)共同探讨的结果,因ؓ(f)华ؓ(f)有一个性能工厂Q它Ҏ(gu)个应用的评都有一?S 标标准。小U书与华ZL(fng)定了针对红书场景需要观的具体指标。性能优化的核心是慢函数指标,它主要包含两部分Q过E时长和应用体验的流畅性?/p> q程旉主要包含以下三点Q?/strong> 畅性方面,最基础的观指标是q_ FPSQ率)(j)Q包括丢帧数、最大连l丢帧数、丢帧卡次C?qing)卡率?strong>卡顿率可以通过量化计算得出Q?/strong>当一个场景中出现丢Ӟ丢的时长与场景L长的比值即为卡率Q它是一个小?1 的百分比数倹{?/p> 首先Q针?IO 场景Q我们进行了相应的优化?/p> 鸿蒙 OS 的系l能力主要分Z下三个方面:(x) 在ƈ行化能力斚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> 接下来我们对比`?OS ?Worker q行化能力和安卓端的相关Ҏ(gu)?/strong>从多个维度来看,W(xu)orker 本质上不推荐手动创徏Q而是通过pȝ配置 build-provider.json l定 ETS 文g来实现创建。这一点与安卓端ƈ无明昑ַ异,安卓端可以通过 THREAD {方式启动线E?/p> 在`?OS 5.0 以下版本Q如 4.2 版本Q中Q主要运行的仍然是安卓系l。这U情况下Q安卓线E数量存在上限,q对应用开发者来说是一个挑战。如?SDK 集成q多Q线E数可能标Q进而导致应用被pȝ强制l止Q或出现业务场景异常崩溃{稳定性问题?/p> 数据传输斚wQ?/strong>鸿蒙 OS Z优化 Worker 的性能和负载,?Worker 的数量和单个 Worker 的传输上限进行了限制。`?Worker 的单个传输上限类g安卓中的 Binder 机制Q也存在cM的传输限制。不q,安卓U程通常没有严格限制Q因为线E本质上是一个内存拷贝过E,除非开发者通过指针{方式自定义U程间数据传输?/p> 在传输格式上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> 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> TaskPool 中的d默认支持数据转移QtransferQ,不支持拷贝。此外,TaskGroup 不支?SDK 初始化包的加载。某些同学习(fn)惯在异步U程中触?SDK 的行为,在`?OS 上可能会(x)?TaskPool 生命周期l束而导致变量被释放?/p> 关于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> 红书在一些典型化场景中已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> 在进行埋Ҏ(gu)Q可能会(x)涉及(qing)数据库的 IO 操作Q这些操作也不徏议在ȝE中执行。通过这些操作放?Worker U程中,可以有效避免对主U程的媄(jing)响?/p> 针对双列布局中的囄和资源预加蝲Q我们采用华研的 RCP |络解决Ҏ(gu)Q类g HTTPQ,通过 Worker U程在远端进行下载,q在完成后将l果q回CU程。此外,TaskPool 的应用场景也非常q泛Q例如文件上传、多媒体操作以及(qing)启动d的编排等。TaskPool 的优势在于轻量化Q避免了U程上下文切换带来的不必要耗时?/p> 关于冷启动和首刷场景的优化?/strong>q部分主要包括两个方面:(x)模块的懒加蝲和动态组件的复用池。懒加蝲是应用开发中常见的优化手D,cM于安卓端?class order 机制。当应用不需要某个类Ӟ可以延迟加蝲该类Q直到真正需要用时才加载。这U方式可以显著提高冷启动阶段的代码加载效率,从而大q降低冷启动旉?/p> 动态组件和lg复用池则是ؓ(f)了解?UI lg重复创徏的问题?/strong>在应用中Q可能会(x)有多U相同类型的 UI lgQ例如小U书中的W记lgQ。ؓ(f)了避免重复创建带来的开销Q我们希望在q行时尽量复用已有的lgQ而不是频J地创徏和销毁?/p> 我们通过特定的分析工具对懒加载进行了深入分析?/strong>如图所C,我们能够识别出启动过E中加蝲的各U模块,包括 RNOHQReact Native on HarmonyQ、Web engineQ网引擎)(j)、Red PlayerQ播攑֙Q等lg。这些模块的加蝲q程涉及(qing)到多?so 文gQ即׃n对象文g?/p> 通过自上而下的分析方法,我们可以清晰地看到每个模块加载的具体耗时。进一步分析这?so 文g?RTSQ运行时pȝQ的兌Q以?qing)它们所引入?Napi ?TS 文g。我们进行了懒加载潜在对象的分析Q发现许?RTS 实际上ƈ不需要的cL件已l被加蝲。这是因为开发者在~写代码Ӟ可能q未充分考虑到导入一个类或方法对应用启动延迟的媄(jing)响?/p> Z优化q一q程Q我们的目标是减字节码中需要加载的cL件数量,从而加快应用的冷启动速度。华为提供的~译器能够将 RTS ~译?Ark bytecodeQ方舟字节码Q,q是一U高效的字节码格式。通过减少需要加载的cL件数量,我们可以显著提高应用的启动速度?/p> 华ؓ(f)q提供了一U懒加蝲的导入方式,只有在真正需要用某个类Ӟ它才?x)被加蝲。这U懒加蝲机制有助于减应用启动时的资源消耗。这引发了一个问题:(x)Z么华Z默认采用全懒加蝲方式Q即只有在用时才加载类文g呢?我已l将q个问题反馈l华为,q且pȝ侧可能会(x)考虑在未来的版本中默认采用懒加蝲方式Q同时仍然允许用h动选择非懒加蝲的方式进行类文g的加载?/p> 在小U书的首场景中Q笔记卡lg在多个场景中被复用?/strong>Z避免重复创徏 UI D的性能消耗,我们采用了动态组件的概念。动态组件的核心原理是利用占位符来gq组件的创徏Q这?Android 开发中使用 Stub 模式的概늛伹{在q种模式下,可以使用一个代理对象(stubQ来代表未初始化的lgQ从而gq组件的创徏q程。当真正需要渲染组件时Q再渲染内容填充进去,从而避免每ơ调用构建函敎ͼ?buildQ时的耗时?/p> 占位逻辑通过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> 对于lg复用池,当动态组件不再用时Q需要将其返回到lg池中。对于自定义lgQ通过 NoteContainer 占位方式Q由 NodeController q行理。在需要创建子lgӞ先在 NodePool 中查找,如果找不刎ͼ则创建新lgQ如果找刎ͼ则尝试复用。流E图展示了从 Container 装蝲 NodeItem 开始,通过 NodePool 查找Q如果找到则q行条g判断和复用?/p> lg的新建和复用q程中,如果扑ֈ对应?NodeItemQ则调用 build Ҏ(gu)q更新自定义lg的状态,完成复用。如果有对应?NodeItemQ可以直接通过 update 函数更新内部状态ƈh UI。但要注意,update Ҏ(gu)可能?x)因状态变量过于复杂而导致更新gq,出现囑փD媄(jing)。因此,需要拆?stateQ其够小Q以保状态变更到通知 UI 的时间羃短,消除D媄(jing)?/p> 我们的策略是优先?NodePoolQ节Ҏ(gu)Q中查找可用?NodeItemQ节炚wQ。如?NodePool 中存在可用的 NodeItemQ我们就直接使用它,q过 getNode Ҏ(gu)q行 item l定Q随后更新其状态以实现复用。如?NodePool 中没有找到对应的 NodeItemQ那么我们将通过 makeNode Ҏ(gu)调用 build 函数来创建新的节炚w?/p> 完成lg的复用后Q我们需要将q些lgq回到缓存池中,以便在未来可以再ơ用。这个过E涉?qing)?NodeContainerQ节点容器)(j)?NodeControllerQ节Ҏ(gu)制器Q的销毁,q将 NodeItem 重新攑֛ NodePool 中。ؓ(f)了更有效地管理缓存,业务层可以利?LRUQ最q最用)(j)法Q或者`蒙系l提供的 LRUCache ?LiUHashMap {数据结构,来自定义~存的大,从而优化组件的复用和缓存策略?/p> 在小U书应用中,滑动cd景非常普遍,包括推荐늚子频道、个人页中的收藏点赞以及(qing)用户自己发布的笔讎ͼq有搜烦(ch)l果中的搜索结果和用户商品{,q些都是双列滑动场景。这些双列滑动场景占据了红书用户体验的 90% ?95%Q因此,滑动体验的流畅性对于用L(fng)整体体验臛_重要?/p> Z提升滑动场景的流畅性,红书采用了 RCP 框架来优化网l资源的获取?/strong>RCP 是华为提供的一个系l组件能力,主要解决|络资源获取效率问题。通过 RCPQ开发者可以在需要时发v|络hQƈ自定义资源的写入地址Q如文g?ArrayBuffer。RCP 负责高效地将资源写入指定位置Q而在不需要时Q可以取?RCP hQ从而优化资源管理?/p> 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> 在快速滑动过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> 在小U书的开发过E中Q我们遇C一些性能热点问题Q这些问题大多是通过 Code LinterQ代码检查工P(j)(g)出来的。由于开发节奏快Q开发者在~写代码时可能难以关注到性能问题Q因此需?CIQ持l集成)(j)(g)查工h辅助(g)查?/p> 常见的性能热点包括Q?/strong> 1Q?/em>在列表场景中频繁使用?LadyForEach lgQ需要指?key 以实现列表复用?/span>如果开发者忘记指?keyQCode Linter ?x)报错提C; 2Q?/em>?onClick ?onVisible {函C~写I?callbackQ回调函敎ͼ(j)?/span>当这些空 callback U篏C定数量(如几百个或上千个Q时Q可能会(x)严重拖慢应用性能。Code Linter 可以扫描c问题; 3Q?/em>未?TaskPool 处理|络资源?/span>例如QImage Bitmap 直接传?URL q行同步加蝲Q当|络d时会(x)D UI U程卡顿Q?/p> 4Q?/em>复杂?ETS lg在列表场景下未实现重用?/span>未设|重用的 ETS lg在列表滚动时需要重新构建,非常耗时。组件嵌套层U过׃?x)导致性能问题。在安卓端,布局(g)查器容器嵌套不超q四层; 5Q?/em>使用 JSON.stringify q行对象序列化?/span>JSON.stringify 有一定耗时Q尤其在处理 100KB 左右的数据时Q可能需?10 毫秒左右。Code Linter ?x)提C部分性能问题Q但是否需要{异步U程需要开发者自行判断; 6Q?/em>调用 Image ?syncLoadQ同步加载)(j)?/span>在某些场景下Q如转场动画Q需要同步加?image 以保证连贯性。但如果 image 是非盘资源Q如|络资源Q,?x)导致卡帧。Code Linter 可以扫描c问题; 7Q?/em>关于~译器的优化?/span>ETS lg应避免嵌套过深。如果嵌套过深,可以每层函数通过pȝ?builder param ?builder 函数转换。?@builder 注解标识的函C(x)在编译期间与 ETS 代码整合Q从而提高编译器优化效果?/p> Code Linter 支持全量扫描和基?Git DIFF 的增量扫描,但目前华为的 Code Linter q不能与 Git Prehook 兌Q导致无法在水U上自动(g)查。虽?CI (g)查阶D已?Code LinterQ但本地代码提交阶段仍需手动q行脚本Q无法实现自动检查。我们正在催促华册一问题?/p> 在处?UI 重蝲场景Ӟ我们采用了一U称为分帧方案的Ҏ(gu)?/strong>分q个术语的含义是Q当应用在一帧内无法完成所有绘制工作,或者在多内都无法完成Ӟ?x)导致屏q卡现象。尽用户可以看到画面,但却无法q行滑动或操作。在q种情况下,分Ҏ(gu)显得尤为合适。虽然分帧方案可能看h不是最优雅的解军_法,但它实能够有效地解x能问题Q应用性能辑ֈ预期标准。分帧方案虽然看似是一U应急措施,但它能够帮助应用性能达标?/p> 分Ҏ(gu)的流E大致如下:(x)假设我们有数?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> 在小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> 传统的主观工具对于`?OS 的性能分析仍然适用?/strong>例如Q抖韛_红书都通过竞品分析来进行主观测评。这U能力主要是通过录屏来展C整个流E的耗时和时长,特别适合评估冷启动完成时延和转场q程的性能。通过录屏Q我们可以逐查看用户从点d始到l束的数和真实旉Q以此来衡量整个q程的持l时间?/p> 除了主观工具Q我们还可以使用 IDE 提供的性能分析工具Q如 ProfilerQ来分析慢函数。由?ArkTS ~程语言框架主要通过 RTS ?NAPIQ原生应用接口)(j)q行兌Q因此需要能够查?ArkTS ?NAPI 的整个堆栈层U。这与安卓有所不同Q因为当 Java 通过 Java Native API 与原生代码交互时Q堆栈ƈ不那么容易查看?/p> 在小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> 10.2 性能场景试工具QDevEco Testing DevEco Testing 是一个性能试工具Q它的功能非常全面,性能试只是其中的一部分。除了性能试Q它q支持多U测试场景,包括 debug testing。在 debug testing 场景中,用户可以自定义业务场景,监测 CPU 的耗时和负载、GPU 的耗时和负载、设备发热情况以?qing)功耗等问题?/p> 使用 DevEco Testing q行性能试的过E如下:(x)首先定义试场景Q然后捕获主帧数据。一旦开始捕P可以观到 FPSQ率)(j)、GPU 负蝲以及(qing)整体功耗等数据。完成性能数据捕获后,工具?x)生成一份报告,为用h供了一个完整的场景分析。不q,目前场景定义q缺乏脚本化能力Q需要h工操作辅助。未来,我们期望能够实现场景定义的脚本化配置Q类g自动化测试。这P可以通过自动化工P实现更高效的试程?/p> 在对性能场景q行优化后,我们可以看到显著的收益。在实验室环境下的测试显C,冷启动时间可以降?50%Q响应时延可以低?100 毫秒Q完成时延则保持与双端持qx更优。在畅性方面,在多场景和重载场景下均实C 0 丢的成果。需要注意的是,q里的测试是在非重蝲模式下进行的Q即没有同时q行多个资源密集型应用,如《王者荣耀》或《和q精英》等。在q种条g下,我们的核心场景,如冷启动、搜索和个h늭Q都能够与双端完全对齐?/p> 展望未来Q有几个方向Q?/strong> 1Q?/em>首先Q我们希望能够在全场景下实现lg复用Q以最大程度地实现 UI 复用。这样可以在多个业务之间的{场或 UI 创徏q程中,不必要?UI 创徏和消耗降到最低?/p> 2Q?/em>其次Q我们正在考虑代码延迟加蝲?lazy 机制。华为内部可能将其作为通用的解x案,但在实施q程中我们发C许多问题Q例如全 lazy 加蝲可能?x)?jing)响第三方 SDKQ如支付宝等Q因为它们可能进行了额外的二q制优化Q导致加载失败或无法响应。因此,我们期望通过代码延迟加蝲来实现持l治理,但目前它可能q不适合全场景的 lazy import?/p> 3Q?/em>最?/span>Q我们关注防劣化问题Q即在每个版本发布时Q我们不希望性能指标出现劣化。我们希望能够在开发阶D就定义劣化指标和具体数据,以防止应用劣化。这部分可能需要借助 DevEco Testing 和主观测评的方式来实现。包括我们关注的指标Q例如冷启动和流畅性等Q未来可能会(x)U_防劣化场景。目前,我们?CI 环节?RC 环节Q包括流水线的性能控和代?CR 机制Q都能够规避q类问题?/p> [1] 鸿蒙NEXT官方开发指?/a> [2] 一q撸完百万行代码Q企业微信的全新鸿蒙NEXT客户端架构演q之?/a> [3] 鸿蒙NEXT如何保证应用安全Q详解`蒙NEXT数字{和证书机?/a> [4] 开源IM聊天E序HarmonyChatQ基于`蒙NEXT的WebSocket协议 [5] 微信U血鸿蒙版正式发布,295天走完微?4q技术之路! [6] x通讯框架MobileIMSDK的`蒙NEXT端详l介l?/a> [7] x通讯框架MobileIMSDK的`蒙NEXT端开发者手?/a> [8] 拥抱国化:(x)转{APP的`蒙NEXT端开发尝鲜之?/a> [9] 微信Windows端IM消息数据库的优化实践Q查询慢、体U大、文件损坏等 [10] 微信技术分享:(x)揭秘微信后台安全特征数据仓库的架构设?/a> [11] IM跨^台技术学??Q全面解密新QQ桌面版的Electron内存优化实践 [13] 揭秘企业微信是如何支持超大规模IMl织架构?#8212;—技术解dl关p链 [14] 微信团队分nQ详解iOS版微信视频号直播中因帧率异常D的功耗问?/a> [15] 微信团队分nQ微信后端v量数据查询从1000ms降到100ms的技术实?/a> [16] 大型IM工程重构实践Q企业微信Android端的重构之\ [17] IM技术干货:(x)假如你来设计微信的群聊,你该怎么设计Q?/a> [18] 微信团队分nQ来看看微信十年前的IM消息收发架构Q你做到了吗 [19] L被低伎ͼ从未被超,揭秘QQ极致丝滑背后的硬核IM技术优?/a> [20] 首次公开Q最新手机QQ客户端架构的技术演q实?/a> [21] 大型IME_性监实践:(x)手Q客户端性能防劣化系l的之\3.2 U血鸿蒙与安卓的区别
3.3 红书`蒙应用架构层U?/h3>
3.5 OS 能力 & 优化实践
4、ƈ行化能力
5、小U书典型q行化场?/h1>
6、类前端视角下的模块懒加?/h1>
7、动态组?/h1>
8、滑动类场景
9、UI 重蝲场景分Ҏ(gu)
10、`蒙NEXT调优工具
10.1 鸿蒙性能分析工具QIDE Profiler
11、小l与展望
12、相兌?/h1>
Q本文已同步发布于:(x)http://www.52im.net/thread-4821-1-1.htmlQ?/a>