基于 Flutter 的 Web 渲染引擎「北海」

简介: Kraken 是一款基于 W3C 标准的高性能渲染引擎。Kraken 底层基于 Flutter 进行渲染,通过其自绘渲染的特性,保证多端一致性。上层基于 W3C 标准实现,拥有非常庞大的前端开发者生态。

前言


Kraken 是一款基于 W3C 标准的高性能渲染引擎。Kraken 底层基于 Flutter 进行渲染,通过其自绘渲染的特性,保证多端一致性。上层基于 W3C 标准实现,拥有非常庞大的前端开发者生态。raken 是一款基于 W3C 标准的高性能渲染引擎。Kraken 底层基于 Flutter 进行渲染,通过其自绘渲染的特性,保证多端一致性。上层基于 W3C 标准实现,拥有非常庞大的前端开发者生态。


官网:openkraken.com

Github:github.com/openkraken/…

文章参考来源:基于 Flutter 的 Web 渲染引擎「北海」正式开源


背景


互联网业务如火如荼地发展离不开跨平台技术,而最成熟的跨平台技术就是大家熟悉的浏览器了,它与生俱来的跨平台能力、开放的标准以及强大的生态使它成为炙手可热的容器之一。而由于其本身不是为了性能而设计的,并且历史包袱重、兼容性、厂商更新慢等问题,浏览器在移动端的表现并不突出。尽管网络以及硬件的发展带来了足够多的性能红利,但是日益复杂的业务总能把已有的性能吃透。


过去也有很多对跨平台方案的探索与实践,新的技术方案也随着历史的浪潮不断地发展。从最早的 H5 方案到 Hybrid 方案,以及后来的 Weex/React Native 方案,到现在如火如荼的 Flutter。

网络异常,图片无法展示
|
Flutter 由于其精简的渲染管线,高效的布局渲染能力,以及自绘渲染的特性,一跃成为这两年跨端届的新宠。而在 Flutter 出现之前,主流的方案还是用 React Native(Weex)的,这套方案的底层调用了原生的 View。正是因为如此,导致这套方案很难保证完全的多端一致性,因为原生 View 本身就存在一些限制,有限的能力不能满足开发者所有的需求,所以在实现 W3C 标准时有些牵强。而 Flutter 基于更底层的 Skia 做自绘渲染,可以很好地保证多端一致性。 熟悉 Flutter 的同学肯定知道 Flutter 是用 Dart 语言以及 Widget 来开发的,虽说 Dart 语言对熟悉 JavaScript 的前端同学来说上手成本并不是很高,对于 Widget 这种基于状态驱动的开发模式也已经是非常熟悉,但是整体上与已有基建与前端生态割裂的矛盾是无法接受的。再者,动态化能力对于互联网业务来说简直就是刚需,而目前来看 Flutter for Web 并不理想。


毕竟,引入一项新技术的第一步是解决引入这项新技术的成本问题。所以我们积极探索一种向上对接前端生态,向下使用原生渲染的跨平台方案。


于是诞生了这款基于 W3C 标准的高性能跨终端渲染引擎——北海(Kraken)。

网络异常,图片无法展示
|


特色


Web 标准开发

网络异常,图片无法展示
|
Kraken 依据 W3C 标准提供渲染能力,提供浏览器中常见的标签、CSS 能力、API,让你使用前端生态构建原生应用。

跨平台一致

网络异常,图片无法展示
|


基于 Flutter 的自绘渲染技术,不再受到平台能力制约,提供跨平台完全一致的 UI,同时支持桌面端 (macOS、Linux、Windows) 和移动端 (iOS、Android)等


原生性能


网络异常,图片无法展示
|
使用 AOT 构建技术将 Kraken 编译成机器码,提供更接近原生的性能;同步光栅化,支持无限列表流畅滚动且没有白屏。

强大的前端开发者生态

网络异常,图片无法展示
|
受益于基于 W3C 标准来开发,在 Kraken 上前端开发者完全可以使用目前熟悉的庞大的前端生态。


首先,在研发框架的选择上,无论开发者使用的是 Rax 或者 Vue ,还是 React 或者 Angular 的,都可以保证在 Kraken 上很好地完成渲染。Kraken 不限制上层开发者使用的框架。



再次,前端拥有非常繁荣的生态,社区海量的 NPM 包都可以在 Kraken 项目上直接使用,大量成熟的模块保证了业务开发的效率。

网络异常,图片无法展示
|
除此之外,开发者平时在开发项目使用的各式各样的工具,都可以在 Kraken 项目上直接使用,无需任何额外的熟悉以及学习成本。

网络异常,图片无法展示
|


创建一个 Kraken 应用,体验一下


macOS 用户


$ npm install -g @openkraken/cli


Windows 用户


Kraken 目前暂时没有提供可运行在 Windows 平台的 CLI 程序,请使用安卓手机下载 Kraken Gallery 以体验 Kraken 在移动端的表现。


Kraken 不限制上层开发者使用的框架,无论你是 Vue 开发者、Rax 开发者还是 React 开发者,都可以使用你最熟悉的框架来开发一个 Kraken 应用。


网络异常,图片无法展示
|


在知乎上看见有人操作了一下,自己也上手体验一下

网络异常,图片无法展示
|


个人上手体验


环境准备

构建 Kraken 需要安装特定的工具,开发环境准备每个平台的安装方式都不太一样,而且都不是很简单。

网络异常,图片无法展示
|


开发与调试


  • Kraken 的开发环境是一个 Flutter 应用的开发环境,不熟悉Flutter上手不易。
  • 需要额外安装 Flutter 插件
  • 在运行 Kraken 之前,还需要在本地构建 JS Bridge 的代码


框架开发

root 节点必须是 document.bod

由于 Kraken 没有 HTML,所以我们的 root 节点必须是 document.body。因此,开发者需要在入口文件中,将 ReactDOM.render 的入参改为 document.body。


import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.body,
);


// src/main.js
import { createApp } from 'vue';
import App from './App.vue';
createApp(App).mount(document.body);
Kraken 只支持内联样式
const styles = {
  App: {
    textAlign: 'center',
  },
  AppHeader: {
    backgroundColor: '#282c34',
    minHeight: '100vh',
    display: 'flex',
    flexDirection: 'column',
    alignItems: 'center',
    justifyContent: 'center',
    fontSize: '32px',
    color: 'white',
  },
};
function App() {
  return (
    <div style={styles.App}>
      <div style={styles.AppHeader}>Demo</div>
    </div>
  );
}
export default App;
<template>
  <div :style="style.home">
    demo
  </div>
</template>
<script>
  const style = {
    home: {
      display: 'flex',
      position: 'relative',
      flexDirection: 'column',
      margin: '27vw 0vw 0vw',
      padding: '0vw',
      minWidth: '0vw',
      alignItems: 'center',
    },
  };
  export default {
    name: 'App',
    data() {
      return {
        style,
      };
    },
  };
</script>


客户端、原生

暂无实操,有兴趣可以自己去操作看看。


社区协作机制


kraken 团队期望通过一种良好的社区协作机制,来与社区的众多开发者一起共建 Kraken 底层能力及生态。


kraken 团队期望通过协作者的方式来参与 Kraken 功能迭代以及 issue 讨论等工作。同时,通过由一部分协作者组成的技术委员会(TSC)来确定技术方向、发布以及定制标准等工作。


kraken 团队期望通过一种公平良好的协作机制,让社区的开发者能够更好地参与到对 Web 标准的容器技术的演进中去,让每个人的声音都能被听到,共同促进 Kraken 以及行业的发展。


查看更详细的协作机制可以查看原文移步github。


kraken 自我的未来展望


---原话来源于社区


以往我们在做前端性能优化的时候,往往优化到浏览器层面就优化不动了,很难向下进行进一步的优化。而 Kraken 的出现,给予了前端工程师新的机会与挑战,它提供了前端工程师一个重新定义浏览器的能力的机会,拥有非常大的想象空间:


  • 超越 Web 的能力,比肩 Native 的性能与体验。
  • 比浏览器厂商更快地实现标准,站在标准的前沿定义问题,通过实现的能力去反推标准,促进行业的发展。
  • 可以自顶向下看整个渲染链路的优化及体验,通过全链路的手段去优化性能以及定义一些新的渲染能力。
  • 目前日益复杂的前端应用导致 JS bundle 的已经显得越来越臃肿,开发者也可以把常用能力抽象复用并下沉到容器层面,渲染与公用能力的复用不再只依赖于 NPM,可以通过下沉通用能力来做更多事情。
  • 通过“云+端”的结合,也有机会去探索面向未来的新一代渲染技术。
  • 基于 Kraken,探索更多的可能性......


目录
相关文章
|
4月前
|
Dart 前端开发 Java
|
4月前
|
前端开发 JavaScript Android开发
Flutter 调用本地 web
Flutter 调用本地 web
39 0
|
6月前
|
监控 Serverless 持续交付
阿里云云效产品使用问题之如何让流水线支持构建 flutter web 应用到 OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
开发框架 Dart JavaScript
深入探讨Flutter中的Web支持功能,以及如何利用Flutter构建跨平台Web应用的最佳实践
【6月更文挑战第11天】Flutter,Google的开源跨平台框架,已延伸至Web支持,让开发者能用同一代码库构建移动和Web应用。Flutter Web基于Dart转JavaScript,利用WebAssembly和JavaScript在Web上运行。构建Web应用最佳实践包括选择合适项目、优化性能、进行兼容性测试和利用Flutter的声明式UI、热重载等优势。尽管性能挑战存在,Flutter Web为跨平台开发提供了更多机会和潜力。
96 1
|
5月前
|
机器人 开发工具 Android开发
flutter web 优化和flutter_admin_template
flutter web 优化和flutter_admin_template
|
6月前
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
|
6月前
|
Dart 前端开发 JavaScript
Flutter for Web:跨平台移动与Web开发的新篇章
Flutter for Web是Google的开源UI工具包Flutter的延伸,用于构建高性能、高保真的跨平台应用,包括Web。它基于Dart语言和Flutter的核心框架,利用Skia渲染引擎通过WebAssembly在Web上运行。开发流程包括安装SDK、创建项目、编写Dart代码和部署。性能优化涉及减少渲染开销、代码压缩等。与传统Web框架相比,Flutter for Web在开发效率和性能上有优势,但兼容性和生态系统尚待完善。
88 0
|
7月前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
【4月更文挑战第30天】Flutter,Google的开源跨平台框架,已延伸至Web领域,让开发者能用同一代码库构建移动和Web应用。Flutter Web通过将Dart代码编译成JavaScript和WASM运行在Web上。尽管性能可能不及原生Web应用,但适合交互性强、UI复杂的应用。开发者应关注性能优化、兼容性测试,并利用Flutter的声明式UI、热重载等优势。随着其发展,Flutter Web为跨平台开发带来更多潜力。
135 0
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
|
2月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
|
7天前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
21 2