专注性能的多端研发框架 - ice.js 3 正式发布!

news2025/2/6 9:05:27

e7d1bd24a46edf103b19ceda3b55f2ca.gif

ice.js 框架在之前的版本中,主要服务于中后台 / PC 的项目研发,而随着无线端以及多端能力的拓展,ice.js 3 将成为一套面向大淘宝技术的终端应用框架。因此在 ice.js 3 的版本中除了「开发者体验」之外,还围绕「用户体验」探索了大量技术方案。

ice.js 3 地址:https://v3.ice.work/

0b93c5f405890e7eab4e6995a681f0b1.png

ice.js 研发框架是什么

ice.js 研发框架是致力于简单、友好的应用研发框架,基于社区流行的 React 渲染,迄今已发布了两个大版本,并广泛服务于阿里内部和社区用户。截止 2022.11,框架在内部已服务近 9000 活跃项目,累计服务 5000+ 活跃用户。

相比于社区 Webpack、Vite 等工程构建工具和 Next.js、Remix 等应用框架,ice.js 会更加侧重在以下几个方面的建设和思考:

  1. 通过框架内置以及其插件化机制保证跨项目的一致性:对于中大型团队而言,跨团队跨项目的技术方案收敛和一致性能够更好地保证协同效率

  2. 开箱即用的框架能力,减少重复建设:除了基础工程能力的支持之外,框架会结合业务上的主流 SPA、微前端等应用模式,探究业务领域的实践,比如数据请求、状态管理、权限管理、KeepAlive 等

  3. 贴近业务实践,让复杂的技术方案更好地落地:对于 SSR、FaaS 一体化应用等业务解决方案,ice.js 能更好地降低接入成本,同时打通与其他基础建设之间的连接

c932787a745b70bfaa8bbbf5ac509def.png

ice.js 3 改进了什么

ice.js 框架在之前的版本中,主要服务于中后台 / PC 的项目研发,而随着无线端以及多端能力的拓展,ice.js 3 将成为一套面向大淘宝技术的终端应用框架。因此在 ice.js 3 的版本中除了「开发者体验」之外,还围绕「用户体验」探索了大量技术方案。在经历 150+ 个测试版本的迭代,以及部分内部项目的验证后,我们在 2022.11.21 正式发布 3.0 版本。这次的版本将带来以下重要特性:

  1. 多端研发:除了支持支持 PC / 无线的研发之外,还可以通过 ice.js 3 进行小程序的开发,并为多端研发提供解决方案

  2. 全新运行时:默认以 React 18 为基础 UI 框架,同时升级了路由系统默认以约定式方式进行配置,面向开发者提供更小的构建体积以及更加简单的运行时能力定制

  3. 专注性能优化:提供不同解决方案提升页面性能,包括全新的 SSR 设计、页面数据请求能力、资源预加载等

  4. 开发体验提升:引入 swc、esbuild 等原生前端工具链稳步提升构建性能,并且提供丰富的生态以便开始满足开发诉求

  多端研发

  • PC 和无线统一

在这个版本,ice.js 从原先服务中后台开发的基础上,也全面支持了无线端应用的开发。

f019c3f0ea66e876e366dfe1205798b1.png

框架将内置无线端开发的实践,比如 rpxvw 将作为框架默认的能力提供。而对于原 Rax 体系下的源码资产,也可以通过兼容模式,无缝在 ice.js 3 框架下运行。

对于无线搭建体系,通过 rax-compat 的兼容,我们也能使业务的 Solution 中能够无缝支持绝大部分的 Rax 模块 运行在 ice.js 3 之上。

当然,兼容模式只是在成本上对历史源码资产的支持;之后,我们将完全站在 Web 标准 & React 栈基础上建设面向 Web 开发者的研发基线和基础设施。

  • 小程序研发

ice.js 3 的小程序研发将以运行时方案为基础,让用户可以以一码多端的方式高效的进行业务研发。在引入小程序插件之后即可开启:

import { defineConfig } from '@ice/app';
import miniapp from '@ice/plugin-miniapp';


export default defineConfig({
  plugins: [
    miniapp(),
  ],
});

对于小程序窗体 window 和 导航 tabBar 相关的配置,可以在 src/app.ts 中进行配置

// src/app.ts
export const miniappManifest = {
  window: {
    defaultTitle: 'miniapp test',
  },
};

目前 ice.js 3 已支持阿里(支付宝、淘宝、钉钉等)及微信、百度、字节跳动、快手等端。

  全新的运行时

框架默认以 react@18 和 react-router@6 为基础依赖,提供更加强大的运行时 API 和路由系统。


在 ice.js 3 中默认推荐以约定式的路由进行开发,框架将内置对加载和渲染上进行优化,帮助业务构建性能更好的应用,同时也为开发者提供了更加便捷的方式基于路由进行能力定制。

e52ab60b2e6c4fe48289ea83b9873a4a.png

  专注性能优化

  • 资源加载

框架将对对应路由页面进行资源预加载,从原先只关心页面主 bundle 加载的场景转变为并行加载当前页面的资源。

705796dd61f8fa270b497753bfb347e9.png

并行加载的方式有利于更快的加载脚本,由于页面访问依赖前端构建的 HTML 内容,对于前后端一体化开发的应用可以无缝享受其带来的提升。而对于常规的前后端分离项目,我们也推荐通过构建产物中的 assets-manifest.json 来预加载当前页面依赖的资源,以获得更好的页面体验。

  • 数据加载

除了资源的并行加载之外,框架对页面数据加载的编码规范做出了约定,来提前页面的数据加载时机。


通过以下方式定义的页面数据将会不在依赖主 bundle 和页面资源的加载:

import { defineDataLoader, useData } from 'ice';


export default function Home() {
  // 通过 useData 消费页面级别定义的数据源
  const data = useData();
  return <div>{data.title}</div>;
}


export const dataLoader = defineDataLoader(
  () => fetch('https://api.github.com/repos/alibaba/ice')
);

50ca489b318d9299d234a685f57f7b63.png

‍‍

同一个项目,两种不同写法,数据请求发起时机的差异对比如下(测试环境 Chrome slow 3G):

b53dad86cddd94667644a5cc111cd3c9.gif

同时框架支持终端统一的数据预请求方案,从框架层面提供开发者统一的使用方法,降低开发者认知成本,抹平不同容器侧概念的差异,并在不同端内获得当前端最极致的体验。

  • 多种渲染模式

除常规的 CSR(Client Side Render) 之外,框架还支持 SSR(Server Side Render) / SSG(Static Site Generation)。框架也提供如 useMounted<BrowserOnly /> 的能力,方便应用完成差异化的渲染处理:

import { ClientOnly } from 'ice';


export function Home () {
  return (
    <ClientOnly fallback={<div>loading...</div>}>
      {() => <span>page url is {window.location.href}</span>}
    </ClientOnly>
  );
};

框架结合 Midway FaaS,进一步降低业务接入 SSR 应用的研发成本,除了基础的调试开发能力之外,也将在链路方案上给予支持:

1edb927e6ef291cab7b863f6a49609a5.png

后续我们也将为社区开发者打通阿里云、Vercel 等平台的部署流程,方便开发者能够低成本享受 SSR 带来的体验提升。

  稳步提升开发体验

  • 工程体验

开发者体验一直是框架重视的部分,3.0 的版本从多个维度去提升开发者的工程体验。除了默认应用 webpack 5 物理缓存之外,框架采用 swc 作为默认的编译工具来进一步提升编译时间:

191a84a4aff9791397668da894feeaa0.png

SSR 后续将作为推荐开启的链路,因此 server 端构建的体验也是 3.0 版本优化的重点,server 端构建基于 esbuild,并引入预编译及 ES Modules 的执行方式,让开发体验进一步得到提升:

efd7a87c7208b6179de15f05ba668243.png

  • 稳定的依赖

框架在原先的基础上进一步优化工程依赖,对相关依赖进行预编译,对比上一个版本(ice.js 2)减少 300+ 个依赖,大小减少 90M+。

关键依赖会被预打包和锁定版本,确保使用的每个小版本均是稳定可用。

  • 配置提示

框架默认的工程配置从 build.json 变更为 ice.config.mts。开发者在获得完善的配置类型提示的同时,可以非常便捷地添加本地插件或者定制运行时能力。开发者不必再为配置出错以及不清楚 API 的导出而困扰。

import { defineConfig } from 'ice';


export default defineConfig(() => {
  plugins: [
    minify: false,
    {
      name: 'custom-plugins',
      setup({ onGetConfig }) {
        onGetConfig(() => {});
      },
    },
  ],
});

45ec9ea86bf79911843358c629d017dc.png

下一步

ice.js 3.0 框架依旧有很多需要突破的地方,接下来将在开发者体验和用户体验持续进行打磨:

  1. 探索 React StreamingServer Components 在业务下的实践,提升页面的可交互体验

  2. 进一步推进终端统一的预请求模式,让页面性能再进一步

  3. 持续优化框架开发体验,以轻量方式应用原生前端工具链,给开发者带来极致的调试体验

同时我们也会进一步加强能力生态和周边的建设,如果对框架、工具、组件体系感兴趣的开发者,欢迎参与贡献。

fab0e01360d3b8f7309f3b49fd7ad7a1.png

相关链接

  1. 飞冰(ICE)站点:https://v3.ice.work/

  2. ice.js GitHub 仓库:https://github.com/alibaba/ice

  3. ICE PKG 组件开发站点:https://pkg.ice.work/

  4. ICE PKG Github 仓库:https://github.com/ice-lab/icepkg

  5. Midway:https://midwayjs.org/

  6. swc:https://swc.rs/

  7. esbuild: https://esbuild.github.io/

603d0caa15e60ded301094af2ab71df3.png

团队介绍

大淘宝技术跨端技术部终端框架团队致力建设简单友好的终端应用框架,希望通过研发框架和研发工具提升开发者体验,并降低研发成本。除了研发框架之外,我们还提供了 NPM 包开发解决方案 ICE PKG 以及开发调试工具。
如果对于框架体系、工程构建、组件工程和调试工具等领域有兴趣,欢迎通过 [Github Issue](https://github.com/alibaba/ice/issues) 或者[邮箱](mailto:xiawenwu41@gmail.com) 联系我们一起探讨。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拥抱实体经济,可以说是当下互联网参与者的首要选择

拥抱实体经济&#xff0c;绝对是当下互联网玩家们的首要选择。无论是头部的互联网企业来讲&#xff0c;还是新生的互联网玩家而言&#xff0c;它们都不约而同地将关注的焦点聚焦在了这样一个方向上。   透过这一点&#xff0c;我们可以非常明显地感受到&#xff0c;一个全新的…

1574_AURIX_TC275_SCU中的杂项控制

全部学习汇总&#xff1a; GitHub - GreyZhang/g_TC275: happy hacking for TC275! 接下来的这一段算是SCU章节最后的一次内容梳理了&#xff0c;剩下的内容也不是很多了。杂项并不是英文的直接翻译&#xff0c;算是我自己选择的一个表达方式。 这里涉及到的功能有CCU6&#x…

基于机器学习算法与历史数据预测未来的站点关闭(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 应用背景&#xff1a; 通过分析序列进行合理预测&#xff0c;做到提前掌握未来的发展趋势&#xff0c;为业务决策提供依据&am…

2023材料科学与工程国际会议(CoMSE 2023)

2023材料科学与工程国际会议&#xff08;CoMSE 2023&#xff09; 重要信息 会议网址&#xff1a;www.icomse.org 会议时间&#xff1a;2023年3月24-26日 召开地点&#xff1a;中国上海 截稿时间&#xff1a;2023年1月25日 录用通知&#xff1a;投稿后2周内 收录检索&…

手把手教你使用Appium进行IOS真机自动化测试

讲解方式&#xff1a; 课程内容条理清晰&#xff0c;目标明确&#xff0c;由浅入深&#xff0c;环环相扣。重点部分进行额外梳理和总结&#xff0c;更易理解和吸收。 教程推荐&#xff1a;使用Appium进行IOS真机自动化测试 课程亮点&#xff1a;1&#xff0c;讲解清晰&a…

VRRP多备份组+策略路由实现主备负载

上篇文章&#xff0c;我们介绍了VRRP单备份组和策略路由之间主备切换的差异&#xff08;&#xff09;&#xff0c;整体上看&#xff0c;单备份组VRRP的主备切换速度非常快&#xff0c;用过调整配置&#xff0c;可以轻轻松松将切换时间压缩到1秒钟以内&#xff1b;但是主备之间无…

【大数据技术Spark】DStream编程操作讲解实战(图文解释 附源码)

DStream编程 批处理引擎Spark Core把输入的数据按照一定的时间片&#xff08;如1s&#xff09;分成一段一段的数据&#xff0c;每一段数据都会转换成RDD输入到Spark Core中&#xff0c;然后将DStream操作转换为RDD算子的相关操作&#xff0c;即转换操作、窗口操作以及输出操作…

和冬天有关的歌

我写过关于四季《新朝花夕拾》&#xff0c;我也写过关于夏天的歌&#xff1a;《和夏天有关的歌》&#xff0c;所以我也想写写冬天。&#xff08;1&#xff09;北风当你想到冬天的时候&#xff0c;你会想起什么&#xff1f;我会想到&#xff1a;北风、北方。正好有这么一首歌&am…

神经网络架构搜索

神经网络架构搜索 定义内涵 神经网络架构搜索是为给定数据集自动找到一个或多个架构的任务&#xff0c;这些架构将为给定 的数据集生成具有良好结果的模型&#xff0c;其本质是在高维空间的最优参数搜索问题。 技术背景 深度学习模型的使用越来越大众化&#xff0c;在很多行…

免费内网穿透工具测评对比,谁更好用 3

文章目录1. 前言2. 对比内容2.1 TCP协议功能及操作对比2.1.1 网云穿的TCP设置2.1.2 cpolar的TCP设置1.2 使用感受对比3. 结语1. 前言 发布本地网页通常是内网穿透的主要作用之一&#xff0c;但并不是唯一作用&#xff0c;内网穿透还能将本地硬件发布到公共互联网上&#xff0c…

ASP.NET企业HR人力资源管理系统源码(带使用手册和操作说明)

中小型企业HR人力资源管理系统源码带使用手册和操作说明 【程序语言】&#xff1a;.NET 【数据库】&#xff1a;SQL SERVER 2008 【运行环境】&#xff1a;WINDOWSIIS 【其他】&#xff1a;前端bootstrap框架 了解更多HR源码事宜可私信我&#xff01; 系统运行环境&#x…

微信小程序云开发博客系统源代码,让写博客像发朋友圈一样简单,含使用部署教程

博客就两种&#xff1a;一是随笔&#xff0c;记录自己的成长历程&#xff0c;二是有目的的发文&#xff0c;例如搬运各种网赚文&#xff0c;我想大部分朋友做博客的初衷都是有一块自己的心灵净土&#xff0c;于是催生了wxapp-blog这款小程序。 完整代码下载地址&#xff1a;微…

零基础如何系统地自学Python?Python应该怎么学?

这次疫情让很多人&#xff0c;都发现自己真的适合群居&#xff0c;也让部分人觉得独居是个不错的选择&#xff0c;但是大部分人都会更明白工作的重要性。 如果没有收入&#xff0c;没有朋友&#xff0c;没有同事&#xff0c;没有那些鸡毛蒜皮的小事&#xff0c;会发现&#xf…

C++ Primer 第六章 函数

C Primer 第六章 函数6.1. Function BasicsParameters and Arguments6.2. Argument Passing6.2.3. const Parameters and Arguments6.2.4. Array Parameters6.2.6. Functions with Varying Parametersinitializer_list ParametersEllipsis Parameters6.3. Return Types and the…

Java多线程-线程的创建(Thread类的基本使用)

文章目录一. 线程和Thread类1. 线程和Thread类1.1 Thread类的构造方法1.2 启用线程的相关方法2. 创建第一个Java多线程程序3. 使用Runnable对象创建线程4. 使用内部类创建线程5. 使用Lambada表达式创建线程6. 多线程并发执行简单演示7. 多线程并发执行的优势二. Thread类的属性…

【专业数据】六.2020~2022年北京交通大学【新一代电子信息技术】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率

文章目录 1.专业介绍2.2020-2022年国家线/复试线/分数线差2.1.数据总览2.2.数据指标2.2.1.复试分数线2.2.2.分数线差3.2020-2022年计划招生数/复试数/录取数/复试比例/录取率3.1.数据总览3.2.数据指标3.2.1.复试比例3.2.2.录取率4.参考资料欢迎订阅本专栏:《北交计算机复试经验…

【数据结构】树和二叉树

半山腰很挤&#xff0c;你得去山顶看看 目录 1.树 1.1 树的概念 1.2 树的特征 1.3 树每个结点的关系 1.4 树的表示形式 2.二叉树 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 二叉树的基本操作 2.5.1 判断二叉树是否为空 2.…

JAVA类的继承和多态基础笔记(二)

1.继承的基本概念 父类中某一个属性是私有的&#xff0c;通过子类对象就不能访问父类的私有变量。 继承完之后拥有父类全部的东西&#xff0c;但是可以根据实际情况进行重写。 一般所有的类都是继承Object的&#xff0c;实现所有他的方法 像这样是重写了Object类的tostring方法…

[附源码]计算机毕业设计Python共享汽车系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

【Numpy基础知识】数组的创建

介绍 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录介绍导包【1】将Python序列转换为Numpy数组【2】通过已有的Numpy数组创建函数创建数组【3】复制、连接或者改变现有数组【4】从磁盘读取数组【5】使用字符串或缓冲区从原始字…