2019-2021 美团技术年货 前端篇Flutter Web 页面要满足投产要求,还 有大量的工作(上图黄色部分所示),主要包括: ● 扩展基础依赖(如:Request、Router、埋点等)在 Web 侧的支持。 ● 完善工程化建设,例如:静态资源优化、构建与部署自动化。 ● 深入滚动性能与页面加载性能优化,使得 Flutter Web 能够满足基本的投产要求。 四、详细设计 4.1 基础依赖建设 企业级应用的基础开发依赖 Flutter 业 务代码到 Web 产物的整体流程,详细流程如下图所示: 编译流程 从流程中我们可以看到,Flutter 在 Web 端目前只支持 Dart–>JS 的转换,以及 UI 层的对齐,在工程化和性能优化方面做的工作并不多。 因此,我们必须解决以上的性能问题,才能保证我们的业务可以正常的交付。通过对 编译流程的仔细分析与梳理,我们在 AOT 产物生成之前对 Flutter SDK 进行定制, 页面滚动过程中会频繁进行位置信息的计算,在复杂的业务场景 (如页面存在大量动画) 仍然会暴露出一定的问题。因此对滚动性能的进一步优化也会 是我们未来的工作重心。 5.4 业务迭代效率 基于团队对 Flutter Web 工程化能力的建设和 Flutter 良好的跨平台特性,Flutter Web 在美团外卖商家学院改版需求的落地,大大提升了迭代效率,估算人效提升 40% 以上,计算公式为: 其中 E 代表人效提升,Ci0 码力 | 738 页 | 50.29 MB | 1 年前3
前端开发者指南(2017)SVG、canvas、webGL) 动画工具 JSON 工具 占位符内容工具 测试工具 前端数据存储工具 (例如客户端的数据存储方案) 模块加载/打包工具 模块/包管理工具 托管工具 项目管理以及代码托管工具 协作与沟通工具 内容管理 托管/API 工具 后端即服务工具 离线工具 安全工具 构建工具 部署工具 4 1.7.38 1.7.39 1.7.40 1.7.41 网站/应用监控工具 占位符内容工具 测试工具 前端数据存储工具 (例如客户端的数据存储方案) 模块加载/打包工具 Introduction 9 模块/包管理工具 托管工具 项目管理以及代码托管工具 协作与沟通工具 内容管理 托管/API 工具 后端即服务工具 离线工具 安全工具 构建工具 部署工具 网站/应用监控工具 JavaScript 错误报告/监控 性能工具 寻找工具的工具 可供使用。以下是一张关于所 有在开发网站或者网络应用时可以使用的公共接口的表。 — Mozilla 相关文档: Web API 公共接口 超文本传输协议 (HTTP) 超文本传输协议(HTTP)是一个为分布式的、协作的、多媒体的信息系统指定的应用协 议。HTTP 是万维网数据交流的基础。 — 维基百科 相关规范: 超文本传输协议 -- HTTP/1.1 HTTP/2 统一资源定位符 (URL) 统0 码力 | 164 页 | 6.43 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版因为它本身就包含了一个状态信息,即目前是否处于暂停态。 Generator与协程 Generator 函数的语法 427 协程(coroutine)是一种程序运行的方式,可以理解成“协作的线程”或“协作的函 数”。协程既可以用单线程实现,也可以用多线程实现。前者是一种特殊的子例程, 后者是一种特殊的线程。 (1)协程与子例程的差异 传统的“子例程”(subroutine)采用堆栈式“后进先出”的执行方式,只有当调用的子 函数的调用者,才能将程序 的执行权还给 Generator 函数。如果是完全执行的协程,任何函数都可以让暂停的 协程继续执行。 如果将 Generator 函数当作协程,完全可以将多个需要互相协作的任务写成 Generator 函数,它们之间使用 yield 表示式交换控制权。 应用 Generator 函数的语法 428 Generator 可以暂停函数执行,返回任意表达式的值。这种特点使得 那么,有没有更好的写法呢? Generator 函数 协程 传统的编程语言,早有异步编程的解决方案(其实是多任务的解决方案)。其中有 一种叫做"协程"(coroutine),意思是多个线程互相协作,完成异步任务。 Generator 函数的异步应用 438 协程有点像函数,又有点像线程。它的运行流程大致如下。 第一步,协程 A 开始执行。 第二步,协程 A 执行到一半,进入暂停,执行权转移到协程0 码力 | 679 页 | 2.66 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版所有工业领域,它要求我们在不同的优势和限制之间找到最佳平衡点。 总的来说,硬盘用于长期存储大量数据,内存用于临时存储程序运行中正在处理的数据,而缓存则用于存储 经常访问的数据和指令,以提高程序运行效率。三者共同协作,确保计算机系统高效运行。 如图 4‑10 所示,在程序运行时,数据会从硬盘中被读取到内存中,供 CPU 计算使用。缓存可以看作 CPU 的 一部分,它通过智能地从内存加载数据,给 CPU 提供0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.2.0 简体中文 JavaScript 版所有工业领域,它要求我们在不同的优势和限制之间找到最佳平衡点。 总的来说,硬盘用于长期存储大量数据,内存用于临时存储程序运行中正在处理的数据,而缓存则用于存储 经常访问的数据和指令,以提高程序运行效率。三者共同协作,确保计算机系统高效运行。 如图 4‑10 所示,在程序运行时,数据会从硬盘中被读取到内存中,供 CPU 计算使用。缓存可以看作 CPU 的 一部分,它通过智能地从内存加载数据,给 CPU 提供0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.0.0 JavaScript版存在于所有工业领域,它要求我们在不同的优势和限制之间找到最佳平衡点。 总的来说,硬盘用于长期存储大量数据,内存用于临时存储程序运行中正在处理的数据,而缓存则用于存储 经常访问的数据和指令,以提高程序运行效率。三者共同协作,确保计算机系统高效运行。 如图 4‑10 所示,在程序运行时,数据会从硬盘中被读取到内存中,供 CPU 计算使用。缓存可以看作 CPU 的 一部分,它通过智能地从内存加载数据,给 CPU 提供0 码力 | 376 页 | 17.57 MB | 1 年前3
阮一峰 JavaScript 教程JavaScript 代 多重继承 模块 对象的继承 - 466 - 本文档使用 书栈(BookStack.CN) 构建 码越来越庞大,越来越复杂。网页越来越像桌面程序,需要一个团队分 工协作、进度管理、单元测试等等……开发者必须使用软件工程的方法, 管理网页的业务逻辑。 JavaScript 模块化编程,已经成为一个迫切的需求。理想情况下, 开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模0 码力 | 540 页 | 3.32 MB | 10 月前3
共 7 条
- 1













