网络渲染器

在为 Web 运行和构建应用时,你可以在两种不同的渲染器之间进行选择。此页面介绍了这两种渲染器以及如何为你的需求选择最佳渲染器。这两种渲染器是

HTML 渲染器
此渲染器比 CanvasKit 渲染器的下载大小更小,它使用 HTML 元素、CSS、Canvas 元素和 SVG 元素的组合。
CanvasKit 渲染器
此渲染器与 Flutter 移动设备和台式机完全一致,在小部件密度较高的情况下具有更快的性能,但下载大小增加了约 1.5MB。CanvasKit 使用 WebGL 渲染 Skia 绘制命令。

命令行选项

--web-renderer 命令行选项采用三个值之一,autohtmlcanvaskit

  • auto(默认) - 自动选择要使用的渲染器。当应用在移动浏览器中运行时,此选项选择 HTML 渲染器;当应用在台式机浏览器中运行时,此选项选择 CanvasKit 渲染器。
  • html - 始终使用 HTML 渲染器
  • canvaskit - 始终使用 CanvasKit 渲染器

此标志可与 runbuild 子命令一起使用。例如

flutter run -d chrome --web-renderer html
flutter build web --web-renderer canvaskit

当选择非浏览器(移动或台式机)设备目标时,此标志将被忽略。

运行时配置

若要在运行时覆盖 Web 渲染器

  • 使用 auto 选项构建应用。
  • 准备一个配置对象,其中 renderer 属性设置为 "canvaskit""html"
  • 将该对象传递给 Flutter Web 应用初始化 脚本中的 engineInitializer.initializeEngine(configuration); 方法。
<body>
  <script>
    let useHtml = true;

    window.addEventListener('load', function(ev) {
    _flutter.loader.loadEntrypoint({
      serviceWorker: {
        serviceWorkerVersion: serviceWorkerVersion,
      },
      onEntrypointLoaded: function(engineInitializer) {
        let config = {
          renderer: useHtml ? "html" : "canvaskit",
        };
        engineInitializer.initializeEngine(config).then(function(appRunner) {
          appRunner.runApp();
        });
      }
    });
  });
  </script>
</body>

main.dart.js 中开始 Flutter 引擎启动过程后,无法更改 Web 渲染器。

选择要使用的选项

如果你要优化移动浏览器上的下载大小,并优化桌面浏览器上的性能,请选择 auto 选项(默认)。

如果你要优化桌面和移动浏览器上的下载大小,而不是性能,请选择 html 选项。

如果你要优先考虑桌面和移动浏览器上的性能和像素级一致性,请选择 canvaskit 选项。

示例

使用默认渲染器选项(auto)在 Chrome 中运行

flutter run -d chrome

使用默认(自动)选项在发布模式下构建你的应用

flutter build web --release

使用仅 CanvasKit 渲染器在发布模式下构建你的应用

flutter build web --web-renderer canvaskit --release

使用 HTML 渲染器在分析模式下运行你的应用

flutter run -d chrome --web-renderer html --profile