1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
wasm.md 7.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:06 5767d61

Будущее Flutter Web: приближается Wasm Native

Еще в прошлом году во время презентации Flutter 3.10 на конференции Google I/O было объявлено, что будущее Flutter Web будет связано с Wasm Native. Тогда команда Flutter заявила, что

"Flutter Web не предназначен для использования как универсальная платформа для веб-разработки."

Альтернативные веб-фреймворки уже существуют, поэтому Flutter будет ориентирован на использование

"первым фреймворком, который архитектурно спроектирован вокруг новых веб-технологий, таких как CanvasKit и WebAssembly."

С момента этого заявления прошло почти год, и недавно был сделан ключевой коммит для Flutter Wasm Native: b8cd317. Поддержка команды flutter build web --wasm больше не находится в экспериментальном режиме.

Иллюстрация

На данный момент Flutter и Dart поддерживают добавление WebAssembly как целевой точки компиляции при создании веб-приложений. Однако если вы хотите использовать Wasm в своих Flutter приложениях, вам потребуется браузер, поддерживающий WasmGC:

Chromium и V8 начали поддерживать WasmGC в стабильной версии Chromium 119, Firefox поддерживает WasmGC в версии 120 (хотя есть некоторые проблемы), а Safari пока не поддерживает WasmGC.

ИллюстрацияНекоторые могут удивиться, почему сейчас снова говорят о использовании WebAssembly как цели компиляции, если Flutter Web всегда поддерживал компиляцию в WebAssembly для отрисовки через CanvasKit?

Здесь стоит упомянуть Dart native, до этого времени поддержка WebAssembly в Flutter была направлена на использование Wasm для выполнения runtime CanvasKit, а Dart-код компилировался в JavaScript. Теперь же, благодаря внедрению реализации сборщика мусора WasmGC, Dart начал поддерживать прямую компиляцию в нативный Wasm.

Если вам сложно понять это, обратите внимание на следующие две диаграммы. Диаграмма 1 показывает старый способ отрисовки через CanvasKit, а диаграмма 2 — новый способ отрисовки в Dart native. Самое значительное изменение заключается в том, что размер значительно уменьшился, что всегда было слабым местом старого подхода с CanvasKit.

Более компактный, быстрый и мощный!

Для Flutter Web новое Dart Native здесь аналогично созданию нового "Skwasm" движка отрисовки. Для максимизации производительности Skwasm использует wasm-to-wasm привязки, чтобы скомпилированный код был непосредственно связан с пользовательским модулем CanvasKit Wasm. Это также первая версия многопоточной отрисовки Flutter Web, что ещё больше улучшает время кадра.Кроме того, с выпуском Dart 3.3 Flutter Web завершил выполнение некоторых ранее обещанных функций:

  • Двойная компиляция: Генерирует выходные данные в виде Wasm и JavaScript, а также активирует функциональное тестирование во время выполнения для адаптации к браузерам, поддерживающим и не поддерживающим Wasm-GC, то есть переходный период совместной работы CanvasKit.
  • Интероперабельность JavaScript: Новый механизм взаимодействия между JavaScript и Dart, основанный на расширенных типах, который позволяет Dart-разработчикам безопасно и эффективно взаимодействовать с JavaScript через типизированное API, что обеспечивает четкую границу между двумя языками.
  • Поддержка API браузера для Wasm: Новый пакет package:web, заменивший dart:html (и связанные библиотеки), будущие библиотеки браузера будут сосредоточены на package:web.

![](http://img.cdn.guoshuyu.cn/2 Yöntem 1_web/image5.png)

Чтобы поддерживать компиляцию Wasm, Dart изменил способ взаимодействия с браузером и API JavaScript с помощью js-interop. Этот переход требует поддержки API браузера для Wasm:

  • package:web, заменяет dart:html (и другие сетевые библиотеки)
  • dart:js_interop, заменяет package:js и dart:js

Подробнее можно посмотреть на https://dart.dev/interop/js-interop/package-web и https://dart.dev/interop/js-interop для миграции


Исправлено:

![](http://img.cdn.guoshuyu.cn/20240401_web/image5.png)

на

![](http://img.cdn.guoshuyu.cn/20240401_web/image5.png)
```В целом, хотя поддержка Wasm Native пока не получила широкого распространения, это уже определило переход Flutter Web с состояния "в раздумьях" до "решительно уверенного". Хотя неясно, как будет развиваться Wasm Native в будущем, для Flutter Web это уже значительное улучшение по сравнению с текущим положением дел.> Дополнительная информация доступна по адресу https://docs.flutter.dev/platform-integration/web/wasm

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/CarGuo-GSYFlutterBook.git
git@api.gitlife.ru:oschina-mirror/CarGuo-GSYFlutterBook.git
oschina-mirror
CarGuo-GSYFlutterBook
CarGuo-GSYFlutterBook
master