首页
/ Angular @angular/platform-browser 公开 API 全解析:应用引导、水合(Hydration)、事件管理与 DOM 安全接口

Angular @angular/platform-browser 公开 API 全解析:应用引导、水合(Hydration)、事件管理与 DOM 安全接口

2026-09-07 15:49:52作者:苗圣禹Peter

本文以 @angular/platform-browser 包的公开 API 报告文件 goldens/public-api/platform-browser/index.api.md 为核心,逐一拆解该包对外暴露的全部公开符号——应用引导函数(bootstrapApplication/createApplication)、浏览器平台创建、水合特性开关、DOM 渲染与样式命名空间、事件管理插件体系、XSS 防护(DomSanitizer)以及调试工具,并结合 packages/platform-browser/src 下的源码实现说明每个 API 的默认行为、参数语义与冲突检测逻辑,帮助你在阅读 API Golden 报告或修改平台层代码时建立准确的接口心智模型。

一、这份 API 报告是什么:Public API Golden 文件

goldens/public-api/platform-browser/index.api.md 是一份由 API Extractor 自动生成的「API Report File for @angular/platform-browser」,文件开头明确标注 Do not edit this file——它是 @angular/platform-browser npm 包公开 API 表面的快照(Golden 文件),在每次 PR 和提交上作为 Bazel 测试的一部分参与校验(见 goldens/README.md)。当源码中的公开签名发生变化而 Golden 文件未同步时,测试会失败;开发者可以通过仓库提供的脚本检查或更新:

pnpm public-api:check    # 校验公开 API 与 golden 报告是否一致
pnpm public-api:update   # 重新生成 golden 报告

报告的结构是固定的:顶部是一组 import 声明(展示本包类型依赖了 @angular/core@angular/common 的哪些符号),随后是逐条导出声明,每条声明前带有 // @public// @public (undocumented)// @public @deprecated 的 API 审阅标注。// (undocumented) 表示该成员缺少文档注释。整个报告的入口是包的入口文件 packages/platform-browser/public_api.ts,它只重新导出 ./src/platform-browser;而 packages/platform-browser/src/platform-browser.ts 又按功能域拆分转发了全部公开符号:

  • 引导与平台:bootstrapApplicationBootstrapContextBrowserModulecreateApplicationplatformBrowserprovideProtractorTestingSupport(来自 ./browser
  • DOM 元数据:Meta/MetaDefinition./browser/meta)、Title./browser/title
  • 调试:disableDebugTools/enableDebugTools./browser/tools/tools
  • 调试查询:By./dom/debug/by
  • 渲染与样式:provideCssVarNamespacingREMOVE_STYLES_ON_COMPONENT_DESTROY./dom/dom_renderer)、CssVarNamespacer./dom/css_var_namespacer
  • 事件:EVENT_MANAGER_PLUGINSEventManager./dom/events/event_manager)、EventManagerPlugin./dom/events/event_manager_plugin
  • 水合:HydrationFeatureHydrationFeatureKindprovideClientHydration 及全部 with* 开关(./hydration
  • 安全:DomSanitizer 与全部 Safe* 标记接口(./security/dom_sanitization_service
  • 版本:VERSION./version

值得注意的是,入口文件在公开导出之外还执行了 export * from './private_export',额外暴露一批 ɵ 前缀的内部 API(ɵBrowserDomAdapterɵDomRendererFactory2ɵDomEventsPluginɵKeyEventsPluginɵSharedStylesHostɵDomSanitizerImplɵRuntimeErrorCode 等,见 private_export.ts)。这些 ɵ API 属于包内协作接口,不属于本报告跟踪的公开表面,业务代码不应直接依赖。

二、应用引导 API:bootstrapApplication、createApplication 与 platformBrowser

2.1 报告中的声明

// @public
export function bootstrapApplication(rootComponent: Type<unknown>, options?: ApplicationConfig, context?: BootstrapContext): Promise<ApplicationRef>;

// @public
export interface BootstrapContext {
    platformRef: PlatformRef;
}

// @public
export function createApplication(options?: ApplicationConfig, context?: BootstrapContext): Promise<ApplicationRef>;

// @public
export const platformBrowser: (extraProviders?: StaticProvider[]) => PlatformRef;
  • bootstrapApplication(rootComponent, options?, context?):以独立(standalone)组件为根组件引导应用,返回 Promise<ApplicationRef>options@angular/coreApplicationConfig(可携带 providerszoneOptions 等);context 用于传入已存在的平台注入器,典型场景是 SSR 中每个请求单独创建平台。
  • createApplication(options?, context?):只创建应用环境(平台与应用注入器)但不渲染任何组件,组件可稍后在返回的 ApplicationRef 上引导。适合需要把「环境创建」与「组件渲染」解耦的场景。
  • platformBrowser:传统 NgModule 引导方式使用的平台工厂函数,可接收额外 StaticProvider[]
  • BootstrapContext.platformRef:一个 PlatformRef 引用,用于把应用挂到已有平台上。

2.2 源码中的实现要点

packages/platform-browser/src/browser.ts 中,两个函数最终都汇入同一个私有函数 createProvidersConfig,它统一注入三层提供者:

function createProvidersConfig(options?: ApplicationConfig, context?: BootstrapContext) {
  return {
    platformRef: context?.platformRef,
    appProviders: [...BROWSER_MODULE_PROVIDERS, ...(options?.providers ?? [])],
    platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS,
  };
}

这解释了 Golden 报告里 bootstrapApplicationBrowserModule 的关联:独立组件引导实际上会自动把 BrowserModule 的提供者(BROWSER_MODULE_PROVIDERS)装入应用注入器,因此不需要再手动导入 BrowserModule。平台级提供者 INTERNAL_BROWSER_PLATFORM_PROVIDERS 包含三项关键绑定:PLATFORM_ID 设为浏览器平台标识、PLATFORM_INITIALIZER 注册 initDomAdapter(调用 BrowserDomAdapter.makeCurrent())、以及 DOCUMENT 的工厂(同时通过 ɵsetDocument(document) 把全局 document 告知编译器运行时)(见 browser.ts#L224-L228)。

platformBrowser 则由 createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS) 创建,即「核心平台 + 浏览器提供者」的工厂组合(见 browser.ts#L236-L237)。

另外,两个函数在 JIT 模式下都会先执行 resolveJitResources():当 ngJitMode 未定义或为真且存在 fetch 时,提前通过 fetch 解析组件模板/样式资源;失败只打印错误而不阻塞引导(见 browser.ts#L133-L135L174-L183)。

2.3 BrowserModule:NG 时代的等价物与「双导入」防护

报告中的 BrowserModule 声明为带 ɵfac/ɵinj/ɵmod 静态成员的 NgModule 类,其 ɵmod 显示它导出 CommonModuleApplicationModule。源码中(browser.ts#L295-L316):

@NgModule({
  providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
  exports: [CommonModule, ApplicationModule],
})
export class BrowserModule {
  constructor() {
    // 开发模式下检查 BROWSER_MODULE_PROVIDERS_MARKER 是否已存在
    // 若存在则抛出 BROWSER_MODULE_ALREADY_LOADED 运行时错误
  }
}

BROWSER_MODULE_PROVIDERS 是浏览器平台的核心提供者清单(browser.ts#L266-L284),包括:INJECTOR_SCOPE 标记为 'root'ErrorHandler 工厂、多提供者形式的 EVENT_MANAGER_PLUGINS(默认注册 DomEventsPluginKeyEventsPlugin)、DomRendererFactory2、共享样式宿主 SharedStylesHost(以 SHARED_STYLES_HOST 令牌提供并保留旧类名向后兼容)、EventManager 本身,以及 RendererFactory2 → DomRendererFactory2 的既有映射。

由于独立组件引导只导入这些提供者而不引用 BrowserModule 本身,Angular 用一个私有标记令牌 BROWSER_MODULE_PROVIDERS_MARKER 区分「提供者已装载」:BrowserModule 构造函数在开发模式(ngDevMode)下通过 inject(marker, {optional: true, skipSelf: true}) 探测,一旦发现已存在就抛出 BROWSER_MODULE_ALREADY_LOADED 运行时错误,提示「如果你只是需要 NgIf/NgFor 等公共指令,请导入 CommonModule」。这是报告读者应当了解的隐藏约束:bootstrapApplicationBrowserModule 二选一,不能同时使用。

2.4 provideProtractorTestingSupport:补齐 Testability

// @public
export function provideProtractorTestingSupport(options?: {
    usePendingTasksForStability?: boolean;
}): Provider[];

bootstrapApplication 默认不包含 Testability(Protractor 依赖的测试能力 API)。provideProtractorTestingSupport() 返回一组提供者:TESTABILITY_GETTER → BrowserGetTestabilityTESTABILITY → Testability(依赖 NgZoneTestabilityRegistryTESTABILITY_GETTER),并额外以 Testability 类本身为令牌再做一次向后兼容提供。可选参数 usePendingTasksForStability 用于覆盖 ɵUSE_PENDING_TASKS 令牌,从而让 isStable 的判定是否等待挂起任务(如未完成 Promise)可控。源码实现见 browser.ts#L196-L208

三、水合(Hydration)API 族:provideClientHydration 与全部 with* 开关

这是报告中条目最多、与 SSR 场景最相关的 API 簇。

3.1 类型与枚举

// @public
export interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {
    ɵkind: FeatureKind;
    ɵproviders: Provider[];
}

// @public
export enum HydrationFeatureKind {
    NoHttpTransferCache = 0,
    HttpTransferCacheOptions = 1,
    I18nSupport = 2,
    EventReplay = 3,
    IncrementalHydration = 4,
    NoIncrementalHydration = 5,
}

每个 with* 函数都返回一个带 ɵkind(唯一标识特性种类)与 ɵproviders(该特性要注入的提供者数组)的 HydrationFeature 对象;没有提供者的开关(如 withNoHttpTransferCache)仅充当「标志位」。枚举定义见 hydration.ts#L37-L44,数值与 Golden 报告完全一致。

3.2 默认特性与开关矩阵

provideClientHydration(...features) 的 JSDoc 明确了默认开启的三组特性:DOM 水合调和(reconciling DOM hydration)HttpClient 响应转移缓存(服务器上的请求结果随 HTML 转移给客户端,避免二次请求)、增量水合(incremental hydration)。源码实现(hydration.ts#L244-L312)在 makeEnvironmentProviders 中按以下规则拼装:

开关函数 报告标注 效果
withNoHttpTransferCache() @public 关闭 HTTP 转移缓存(默认开启),效果上同一请求会在服务端与浏览器各执行一次
withHttpTransferCacheOptions(options) @public 传入 HttpTransferCacheOptions 配置缓存参数,如携带哪些请求头(默认不携带)、是否缓存 POST、逐请求的缓存判定回调
withI18nSupport() @public(20.0 引入) 启用 i18n 块的水合支持
withEventReplay() @public 回放水合完成前发生的用户事件(如 click),水合后按序重放并触发对应监听器
withIncrementalHydration() @public @deprecated 启用 hydrate 触发器语法的增量水合;自 v22.0.0 起默认开启,标记弃用,计划 v24 移除(见 hydration.ts#L146-L148
withNoIncrementalHydration() @public(22.0 引入) 关闭默认的增量水合

开发模式下 provideClientHydration 内置了两组矛盾检测hydration.ts#L262-L278):

  1. 同时传入 withNoHttpTransferCache()withHttpTransferCacheOptions() → 抛出 HYDRATION_CONFLICTING_FEATURES 运行时错误;
  2. 同时传入 withIncrementalHydration()withNoIncrementalHydration() → 抛出同类错误。

此外还有两个容易被忽略的机制:其一,开发模式下注册一个 ENVIRONMENT_INITIALIZER 探测器,若检测到应用同时启用了 blocking initial navigation 与 hydration(两者语义矛盾)会打印警告;其二,provideClientHydration 注入 CACHE_ACTIVE 状态(初始 isActive: true)并注册 APP_BOOTSTRAP_LISTENER,在 appRef.whenStable() 后把缓存标记置为 false——这控制了转移缓存只在初始加载阶段生效。

典型用法(摘自源码 JSDoc):

// 独立组件引导
bootstrapApplication(App, {
  providers: [provideClientHydration(withEventReplay())],
});

// NgModule 方式:把 provideClientHydration 加入根模块的 providers
@NgModule({
  declarations: [RootCmp],
  bootstrap: [RootCmp],
  providers: [provideClientHydration()],
})
export class AppModule {}

四、DOM 渲染相关 API:样式宿主、CSS 变量命名空间与 REMOVE_STYLES_ON_COMPONENT_DESTROY

4.1 REMOVE_STYLES_ON_COMPONENT_DESTROY

// @public
export const REMOVE_STYLES_ON_COMPONENT_DESTROY: InjectionToken<boolean>;

该令牌控制「组件销毁时是否从 DOM 中移除其样式」,默认值为 true(常量 REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT),令牌自带 factory 返回默认值,因此不注入时行为就是移除。源码定义见 dom_renderer.ts#L57-L74

4.2 provideCssVarNamespacing 与 CssVarNamespacer

// @public
export function provideCssVarNamespacing(namespace?: string): EnvironmentProviders;

// @public
export class CssVarNamespacer {
    namespace(name: string): string;
}

provideCssVarNamespacingCSS_VAR_NAMESPACE 令牌注入一个由 APP_ID 推导的默认前缀:实现为 useFactory: (appId) => `${namespace ?? appId}_`——未显式传参时前缀为 <APP_ID>_,且下划线无条件追加(见 dom_renderer.ts#L93-L101)。CssVarNamespacer 是一个可注入服务,namespace(name) 方法把模板中引用 CSS 变量的名称重写为带命名空间的版本,避免多应用(如微前端、多个 Angular 实例同页)时 CSS 变量互相污染。报告中标注的 ɵfac/ɵprov 静态成员表明它由编译器生成根级可注入声明。

4.3 渲染器本体:DomRendererFactory2 及其辅助结构

渲染器实现类 DomRendererFactory2 本身经 private_export.tsɵDomRendererFactory2 名义暴露(源码见 dom/dom_renderer.ts),报告层面只体现为 BROWSER_MODULE_PROVIDERSRendererFactory2 → DomRendererFactory2 的既有绑定。从源码结构看,该文件还维护了视图封装的垫片属性常量(_nghost-%COMP%_ngcontent-%COMP%)与 SVG/MathML 等 NAMESPACE_URIS%COMP% 会被替换为组件短 ID——这正是浏览器 DOM 中可见封装属性的来源。样式宿主 SharedStylesHostdom/shared_styles_host.ts)负责把 <style> 去重挂接到 <head>

五、事件管理 API:EventManager 与插件体系

5.1 报告中的声明

// @public
export const EVENT_MANAGER_PLUGINS: InjectionToken<EventManagerPlugin[]>;

// @public
export class EventManager {
    constructor(plugins: EventManagerPlugin[], _zone: NgZone);
    addEventListener(element: HTMLElement, eventName: string, handler: Function, options?: ListenerOptions): Function;
    getZone(): NgZone;
}

// @public
export abstract class EventManagerPlugin {
    constructor(_doc: any);
    abstract addEventListener(element: HTMLElement, eventName: string, handler: Function, options?: ListenerOptions): Function;
    manager: EventManager;
    abstract supports(eventName: string): boolean;
}

5.2 插件调度顺序(源码证据)

EventManager 的构造函数(event_manager.ts#L49-L65)做了一件关键的事:DomEventsPlugin 之外的插件反转后排列,并把 DomEventsPlugin 强制置于队尾。原因是 DomEventsPlugin.supports() 恒返回 true,充当兜底插件,必须在最后尝试。addEventListener 调用经 _findPluginFor(eventName) 按顺序查找第一个声明支持的插件,并把结果缓存在 eventName → plugin 映射中;若全部不支持则抛出 NO_PLUGIN_FOR_EVENT 运行时错误(event_manager.ts#L95-L113)。getZone() 返回注册监听器的编译 zone,用于把事件回调包进 NgZone

浏览器平台默认注入两个插件(BROWSER_MODULE_PROVIDERS 中的多提供者绑定):

要扩展事件处理,只需向 EVENT_MANAGER_PLUGINS 多提供者注入自定义 EventManagerPlugin 子类(令牌定义见 event_manager.ts#L31-L33),这正是 Angular 官方文档「扩展事件处理」一节对应的机制。

六、DOM 安全 API:DomSanitizer 与 SafeValue 家族

6.1 报告中的声明

// @public
export abstract class DomSanitizer implements Sanitizer {
    abstract bypassSecurityTrustHtml(value: string): SafeHtml;
    abstract bypassSecurityTrustResourceUrl(value: string): SafeResourceUrl;
    abstract bypassSecurityTrustScript(value: string): SafeScript;
    abstract bypassSecurityTrustStyle(value: string): SafeStyle;
    abstract bypassSecurityTrustUrl(value: string): SafeUrl;
    abstract sanitize(context: SecurityContext, value: SafeValue | string | null): string | null;
}

// @public
export interface SafeHtml extends SafeValue {}
export interface SafeResourceUrl extends SafeValue {}
export interface SafeScript extends SafeValue {}
export interface SafeStyle extends SafeValue {}
export interface SafeUrl extends SafeValue {}
export interface SafeValue {}

六个 Safe* 接口全部是空标记接口(源码中 export interface SafeHtml extends SafeValue {} 等,见 dom_sanitization_service.ts#L40-L75),它们存在的意义是给字符串值打上「该安全上下文中已验证可信」的类型标记。DomSanitizer 抽象类实现了 @angular/coreSanitizer,通过 @Injectable({providedIn: 'root', useExisting: forwardRef(() => DomSanitizerImpl)}) 把注入请求转发给根级提供的具体实现 DomSanitizerImpl(以 ɵDomSanitizerImpl 名义导出,见 private_export.ts)。

6.2 行为语义与使用约束

源码 JSDoc(dom_sanitization_service.ts#L78-L108)说明了核心语义:

  • 典型场景:绑定 <a [href]="someValue"> 时,值会被净化,攻击者无法注入 javascript: 等可执行协议 URL;
  • sanitize(context, value):若值是已知 SafeValue 则直接解包返回;若安全上下文是 HTML 且值是普通字符串,则执行净化移除危险内容;其他上下文收到普通字符串则抛错;
  • bypassSecurityTrust* 系列:显式声明「我已核实该值安全」。JSDoc 强烈建议这类调用尽早、尽量贴近值来源执行,且只对真正可信的数据使用;值本身安全时(如普通 http URL、无危险片段的 HTML)无需也不建议绕过,净化器会让安全值原样通过。

七、DOM 元数据服务:Title 与 Meta

// @public
export class Title {
    constructor(_doc: any);
    getTitle(): string;
    setTitle(newTitle: string): void;
}

// @public
export class Meta {
    addTag(tag: MetaDefinition, forceCreation?: boolean): HTMLMetaElement | null;
    addTags(tags: MetaDefinition[], forceCreation?: boolean): HTMLMetaElement[];
    getTag(attrSelector: string): HTMLMetaElement | null;
    getTags(attrSelector: string): HTMLMetaElement[];
    removeTag(attrSelector: string): void;
    removeTagElement(meta: HTMLMetaElement): void;
    updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement | null;
}

// @public
export type MetaDefinition = {
    charset?: string; content?: string; httpEquiv?: string; id?: string;
    itemprop?: string; name?: string; property?: string; scheme?: string; url?: string;
} & { [prop: string]: string };

两者都是依赖 DOCUMENT 的可注入服务(实现见 browser/title.tsbrowser/meta.ts):Title 读写 document.titleMeta 提供对 <meta> 标签的增删改查,attrSelector 采用「属性名.属性值」形式的字符串选择器,MetaDefinition 除九个具名字段外允许任意字符串属性的索引签名扩展。forceCreation 控制 addTag 在已有同选择器标签时是替换还是强制新建。

八、调试与查询 API:enableDebugTools、disableDebugTools、By

// @public
export function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T>;
// @public
export function disableDebugTools(): void;
// @public
export class By {
    static all(): Predicate<DebugNode>;
    static css(selector: string): Predicate<DebugElement>;
    static directive(type: Type<any>): Predicate<DebugNode>;
}

enableDebugTools(ref) 接收组件 ComponentRef 并原样返回,副作用是把开发调试工具挂到该应用上(实现位于 browser/tools/tools.ts,与 @angular/core 的调试工具基础设施协作);disableDebugTools() 负责卸载。

By 是配合 DebugElement 查询使用的谓词工厂dom/debug/by.ts#L17-L57):

  • By.all():返回恒真谓词,匹配所有节点;
  • By.css(selector):基于 nativeElement 的 CSS 选择器匹配(内部走 DOM 选择引擎,nativeElement 为 null 的纯指令节点返回 false);
  • By.directive(type):检查节点 providerTokens 中是否包含给定指令类型,用于按指令定位调试树节点。

这些谓词通常传入 DebugElement.query(predicate) / queryAll(predicate),是组件测试中定位元素的常用手段。

九、版本符号与 API 变更的维护流程

报告末尾的 export const VERSION: Version;src/version.ts 提供,与包发布版本联动。结合 // @public (undocumented)// @public @deprecated 标注与 @publicApi <major> 的 JSDoc 标记(如 provideClientHydration 标注 17.0、withI18nSupport 标注 20.0、withNoIncrementalHydration 标注 22.0),可以还原各 API 的引入版本线,以及 withIncrementalHydration 「v22 默认开启、v24 移除」的弃用路线。

对该报告本身的维护遵循 goldens/README.md 的流程:Golden 文件在全部 PR 上由 Bazel 测试校验(构建入口见 goldens/BUILD.bazel),签名变更后运行 pnpm public-api:check 比对差异、pnpm public-api:update 重新生成。这意味着:任何修改 packages/platform-browser 公开签名的 PR 都必须同步更新该报告,否则 CI 会拦截——这正是阅读这份 API 报告时应当建立的上下文:它既是接口文档,也是 API 兼容性的测试基线。

十、小结

  • @angular/platform-browser 的公开表面按职责划分为六块:应用引导(bootstrapApplication/createApplication/platformBrowser/BrowserModule)、水合开关族(provideClientHydration + 六个 with*)、DOM 渲染与样式(REMOVE_STYLES_ON_COMPONENT_DESTROYprovideCssVarNamespacingCssVarNamespacer)、事件管理(EventManager + 插件)、安全(DomSanitizer + Safe* 标记接口)以及元数据/调试(TitleMetaBy、debug tools)。
  • 独立组件引导会自动注入 BrowserModule 提供者,与 BrowserModule 的显式导入互斥(开发模式下有标记令牌防护)。
  • provideClientHydration 默认开启 DOM 水合、HTTP 转移缓存与增量水合;with* 函数是细粒度开关,且开发模式下会对矛盾组合抛出 HYDRATION_CONFLICTING_FEATURES 错误。
  • EventManager 的插件链以 DomEventsPlugin 为恒定兜底排在末尾,KeyEventsPlugin 等专用插件优先生效,扩展点即 EVENT_MANAGER_PLUGINS 多提供者。
  • 该 API 报告是 CI 校验的 Golden 文件,接口变更必须经 pnpm public-api:update 同步,这使它同时承担了「文档」与「兼容性测试」双重角色。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389