2019-2021 美团技术年货 前端篇CODE A BETTER LIFE 【前端篇】 前端 | 2021 1 让 Flutter 在鸿蒙系统上跑起来 1 FlutterWeb 在美团外卖的实践 14 FlutterWeb 性能优化探索与实践 36 设计稿(UI 视图)自动生成代码方案的探索 56 美团外卖终端容器无关化研发框架 74 一款可以让大型 iOS 工程编译速度提升 50% 的工具 96 从预编译的角度理解 中的实践 459 开源 React Native 组件库 beeshell 2.0 发布 473 React Native 在美团外卖客户端的实践 506 Android 静态代码扫描效率优化与实践 530 Probe:Android 线上 OOM 问题定位组件 560 活动 Web 页面人机识别验证的探索与实践 580 React Native 工程中 TSLint 静态检查工具的探索之路 ,会频繁计 算位置信息,引起滚动区域内容被重新创建,最终导致页面滚动性能较差。 2.2 MTFlutter 现状 虽然 MTFlutter 做了诸多 Flutter Native 层面的定制与优化,但在 Flutter Web 上 的建设才刚起步,具体表现在: ● MTFlutter 现有的基础依赖如:Request(请求封装)、Router(路由)、埋点、 容器桥、前端监控,尚未支持在0 码力 | 738 页 | 50.29 MB | 1 年前3
Hello 算法 1.2.0 简体中文 JavaScript 版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.5 重识搜索算法 . . . 时间效率:算法运行时间的长短。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.1.0 JavaScript版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.0.0 JavaScript版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。0 码力 | 376 页 | 17.57 MB | 1 年前3
Hello 算法 1.0.0b5 JavaScript版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。0 码力 | 375 页 | 30.68 MB | 1 年前3
前端开发者指南(2017)学习 HTTP/Networks(包括 CORS 和 WebSockets) 学习网页寄存(通称虚拟主机) 学习前端开发 学习用户界面/交互设计 学习 HTML 和 CSS 学习搜索引擎优化 学习 JavaScript 学习 Web 动画 学习 DOM、BOM 和 jQuery 学习网页字体 & 图标 2 1.6.1.14 1.6.1.15 1.6.1.16 1.6.1 API 学习web开发工具 学习命令行的使用 学习 Node.js 学习 JS 模块系统 学习模块加载和打包工具 学习包管理工具 学习版本控制 学习构建及任务自动化技术 学习网站性能优化 学习测试 学习无头浏览器 学习离线开发 学习网络/浏览器/应用的安全 多平台开发学习 导向学习 前端课程 前端开发学习的起点 前端资讯、新闻站和播客 第三部分:前端开发工具 Doc/API 学习 HTTP/Networks(包括 CORS 和 WebSockets) 学习网页寄存(通称虚拟主机) 学习前端开发 学习用户界面/交互设计 学习 HTML 和 CSS 学习搜索引擎优化 学习 JavaScript 学习 Web 动画 学习 DOM、BOM 和 jQuery 学习网页字体 & 图标 学习可访问性相关知识 学习 web/浏览器 API 学习 JSON (JavaScript0 码力 | 164 页 | 6.43 MB | 1 年前3
Hello 算法 1.0.0b1 JavaScript版时间效率,即算法的运行速度的快慢。 ‧ 空间效率,即算法占用的内存空间大小。 数据结构与算法追求“运行速度快、占用内存少”,而如何去评价算法效率则是非常重要的问题,因为只有知 道如何评价算法,才能去做算法之间的对比分析,以及优化算法设计。 2.1.2. 效率评估方法 实际测试 假设我们现在有算法 A 和 算法 B ,都能够解决同一问题,现在需要对比两个算法之间的效率。我们能够想到 的最直接的方式,就是找一台计算机, ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的 思路称为「以空间换时间」;反之,称之为「以时间换空间」 映射到一个桶索引。 为了缓解哈希冲突,一方面,我们可以通过哈希表扩容来减小冲突概率。极端情况下,当输入空间和输出空间 大小相等时,哈希表就等价于数组了,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示方式以缓解哈希冲突,常见的方法有「链式地址」和「开放寻址」。 6.2.1. 哈希表扩容 「负载因子 Load Factor」定义为 哈希表中元素数量除以桶槽数量(即数组大小),代表哈希冲突的严重程度。0 码力 | 185 页 | 14.70 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版Point(); p // { x: 0, y: 0 } 除了简洁,ES6 的写法还有两个好处:首先,阅读代码的人,可以立刻意识到哪些 参数是可以省略的,不用查看函数体或文档;其次,有利于将来的代码优化,即使 未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。 参数变量是默认声明的,所以不能用 let 或 const 再次声明。 function foo(x = 5) find, html } = jake; document.querySelectorAll("div.myClass") ::find("p") ::html("hahaha"); 尾调用优化 什么是尾调用? 尾调用(Tail Call)是函数式编程的一个重要概念,本身非常简单,一句话就能说 清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x){ return return m(x) } return n(x); } 函数的扩展 156 上面代码中,函数 m 和 n 都属于尾调用,因为它们都是函数 f 的最后一步操 作。 尾调用优化 尾调用之所以与其他调用不同,就在于它的特殊的调用位置。 我们知道,函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame), 保存调用位置和内部变量等信息。如果在函数 A0 码力 | 679 页 | 2.66 MB | 1 年前3
JavaScript 正则表达式迷你书 老姚 - v1.1match(regex)[0]); // => id="container" 当然,这样也会有个问题。效率比较低,因为其匹配原理会涉及到“回溯”这个概念(这里也只是顺便提一 下,第四章会详细说明)。可以优化如下: var regex = /id="[^"]*"/ var string = ''; console.log(string 和判空。那样的话,也许那个错误正则也就够用了。也可以进一步改写成: /^[+-]?(\d+)?(\.)?\d+$/,这样我们就需要考虑可读性和可维护性了。 6.4. 效率 保证了准确性后,才需要是否要考虑要优化。大多数情形是不需要优化的,除非运行的非常慢。什么情形正 则表达式运行才慢呢?我们需要考察正则表达式的运行过程(原理)。 正则表达式的运行分为如下的阶段: • 1. 编译; • 2. 设定起始位置; • 失败,返回 null。同时设 置 lastIndex 为 0,即,如要再尝试匹配的话,需从头开始。 从上面可以看出,匹配会出现效率问题,主要出现在上面的第 3 阶段和第 4 阶段。 因此,主要优化手法也是针对这两阶段的。 6.4.1. 使用具体型字符组来代替通配符,来消除回溯 而在第三阶段,最大的问题就是回溯。 例如,匹配双引用号之间的字符。如,匹配字符串 123"abc"456 中的0 码力 | 89 页 | 3.42 MB | 11 月前3
JavaScript 正则表达式迷你书 老姚 - v1.0match(regex)[0]); // => id="container" 当然,这样也会有个问题。效率比较低,因为其匹配原理会涉及到“回溯”这个概念(这里也只是顺便提一 下,第四章会详细说明)。可以优化如下: var regex = /id="[^"]*"/ var string = ''; console.log(string 和判空。那样的话,也许那个错误正则也就够用了。也可以进一步改写成: /^[-]?(\d)?(\.)?\d+$/,这样我们就需要考虑可读性和可维护性了。 6.4. 效率 保证了准确性后,才需要是否要考虑要优化。大多数情形是不需要优化的,除非运行的非常慢。什么情形正 则表达式运行才慢呢?我们需要考察正则表达式的运行过程(原理)。 正则表达式的运行分为如下的阶段: • 1. 编译; • 2. 设定起始位置; • 失败,返回 null。同时设 置 lastIndex 为 0,即,如要再尝试匹配的话,需从头开始。 从上面可以看出,匹配会出现效率问题,主要出现在上面的第 3 阶段和第 4 阶段。 因此,主要优化手法也是针对这两阶段的。 6.4.1. 使用具体型字符组来代替通配符,来消除回溯 而在第三阶段,最大的问题就是回溯。 例如,匹配双引用号之间的字符。如,匹配字符串 123"abc"456 中的0 码力 | 89 页 | 3.42 MB | 11 月前3
共 13 条
- 1
- 2













