2019-2021 美团技术年货 前端篇Flutter 在美团外卖商家端的储备 MTFlutter 是美团外卖搭建起的公司级 Flutter 研发生态,它的架构图如下图所示: MTFlutter 架构图 如图所示,MTFlutter 已涵盖研发、调试、测试、发布、线上运维及工程管理整套闭 环,同时落地了动态化解决方案,支撑了公司多个业务发展。在大前端融合的趋势 下,美团外卖商家端持续在探索更优的多端复用方案,通过 MTFlutter 生态的建设, Native 能力的库 (如 dart:io)是无法被转译的,因此 前端 < 19 需要有对平台进行兼容的方法,下面介绍两种在 Dart Package 中分平台编程的方案。 代码级别分平台 针对代码级别的分平台,我们可以借助 Flutter SDK 提供的一个常量 kIsWeb。使用 方法如下: 查看源码可知,kIsWeb 之所以能被用于判断 Web 平台,是利用了 JavaScript ‘package:flutter/foundation.dart’; if (kIsWeb) { print(‘Web 端’) } else { print(‘其他端’); } 文件级别分平台 针对文件级别分平台,我们利用条件导入导出,其中条件导出具体用法如下: // tool.dart export ‘src/tool_native.dart’ // 兜底导出,即没有命中条件时导出的文件0 码力 | 738 页 | 50.29 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版克隆仓库与下载代码 第三步:运行源代码。如图 0‑5 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 (?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (let i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.js === /* 线性阶 */ function linear(n) { let count =0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.2.0 简体中文 JavaScript 版克隆仓库与下载代码 第三步:运行源代码。如图 0‑5 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 (?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 www.hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没 100000; for (let i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.js === /* 线性阶 */ function linear(n) { let count =0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.0.0 JavaScript版克隆仓库与下载代码 第三步:运行源代码。如图 0‑5 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 (?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (let i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.js === /* 线性阶 */ function linear(n) { let count =0 码力 | 376 页 | 17.57 MB | 1 年前3
JavaScript Promise迷你书(中文版)迷你书(中文版) 41 console.log(value); // => 'this is winner' }); 我们在前面代码的基础上增加了 console.log 用来输出调试信息。 执行上面代码的话,我们会看到 winnter和loser promise对象的 setTimeout 方法都会执 行完毕, console.log 也会分别输出它们的信息。 也就是说, 比如在使用Chrome浏览器的时候,Chrome的开发者工具提供了在程序发生异常的时候 自动在调试器中break的功能。 JavaScript Promise 迷你书(中文版) 69 Figure 13. Pause On Caught Exceptions 当我们开启这个功能的时候,在执行到下面代码中的 throw 时就会触发调试器的break 行为。 var promise = new Promise(function(resolve Promise(function(resolve, reject){ throw new Error("message"); }); 本来这是和调试没有关系的地方,也因为在Promise中的 throw 语句被break了,这也 严重的影响了浏览器提供的此功能的正常使用。 在then中进行reject 在Promise构造函数中,有一个用来指定 reject 方法的参数,使用这个参数而不是依靠0 码力 | 112 页 | 1010.02 KB | 1 年前3
Hello 算法 1.0.0b1 JavaScript版ZIP”直接下载代码压缩包,本地解压即可。 Figure 0‑5. 克隆仓库与下载代码 第三步:运行源代码。若代码块的顶部标有文件名称,则可在仓库 codes 文件夹中找到对应的 源代码文件。源 代码文件可以帮助你省去不必要的调试时间,将精力集中在学习内容上。 0. 写在前面 hello‑algo.com 6 Figure 0‑6. 代码块与对应的源代码文件 0.2.5. 在提问讨论中共同成长 阅读本书时,请不要“惯 ?(?) = ?(?(?)) Figure 2‑2. 函数的渐近上界 本质上看,计算渐近上界就是在找一个函数 ?(?) ,使得在 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同的增 长级别(仅相差一个常数项 ? 的倍数)。 2. 复杂度分析 hello‑algo.com 17 � 渐近上界的数学味儿有点重,如果你感觉没有完全理解,无需担心,因为在实际使用中我们只 需要会推算即可,数学意义可以慢慢领悟。 = 100000; for (let i = 0; i < size; i++) count++; return count; } 线性阶 ?(?) 线性阶的操作数量相对输入数据大小成线性级别增长。线性阶常出现于单层循环。 // === File: time_complexity.js === /* 线性阶 */ function linear(n) { let count = 0;0 码力 | 185 页 | 14.70 MB | 1 年前3
阮一峰 JavaScript 教程log('Hi!'), true); 2. // Hi! 3. 4. value // true 上面代码中,先执行逗号之前的操作,然后返回逗号后面的值。 JavaScript 各种运算符的优先级别(Operator Precedence)是 不一样的。优先级高的运算符先执行,优先级低的运算符后执行。 1. 4 + 5 * 6 // 34 上面的代码中,乘法运算符( * )的优先性高于加法运算符 )可以用来提高运算的优先级,因为它的优先级是最高 的,即圆括号中的表达式会第一个运算。 1. (4 + 5) * 6 // 54 上面代码中,由于使用了圆括号,加法会先于乘法执行。 运算符的优先级别十分繁杂,且都是硬性规定,因此建议总是使用圆括 号,保证运算顺序清晰可读,这对代码的维护和除错至关重要。 顺便说一下,圆括号不是运算符,而是一种语法结构。它一共有两种用 法:一种是把表达式放在 面则是调用函数。 圆括号之中,只能放置表达式,如果将语句放在圆括号之中,就会报 错。 1. (var a = 1) 2. // SyntaxError: Unexpected token var 对于优先级别相同的运算符,大多数情况,计算顺序总是从左到右,这 叫做运算符的“左结合”(left-to-right associativity),即 左结合与右结合 其他运算符,运算顺序 - 198 -0 码力 | 540 页 | 3.32 MB | 10 月前3
Hello 算法 1.0.0b5 JavaScript版克隆仓库与下载代码 第三步:运行源代码。如图 0‑5 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 0.2.4 在提问讨论中共同成长 在阅读本书时,请不要轻易跳过那些没学明白的知识点。欢迎在评论区提出你的问题,我和小伙伴们将竭诚 (?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 图 2‑8 函数的渐近上界 第 2 章 复杂度分析 hello‑algo.com 29 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (let i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.js === /* 线性阶 */ function linear(n) { let count =0 码力 | 375 页 | 30.68 MB | 1 年前3
[试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 中; 第 05 行代码通过 console.log()函数向浏览器控制台输出调试信息(表达式变量“s”的运 算结果)。 运行测试【代码 2-1】所指定的 HTML 页面,并使用浏览器控制台查看调试信息,页面效 果如图 2.1 所示。在浏览器控制台中输出了【代码 2-1】中第 05 行 JS 代码所定义的调试信息。 图 2.1 ECMAScript 变量声明 2.2.3 行代码分别通过 console.log()函数向浏览器控制台输出调试信息(变量初始化的 数据内容); 第 05 行代码通过表达式将变量“s”的数据内容赋给了变量“i”。注意这里的数据类型是 不一致的,如果是变量强类型的编程语言(C 语言和 Java 语言),肯定会报错了。但是, ECMAScript 语法规范却是允许的,读者看后面的调试结果就知道了。 第 07~08 行代码再次分别通过 console console.log()函数向浏览器控制台输出调试信息(变量改变 后的数据内容)。 运行测试【代码 2-2】所指定的 HTML 页面,并使用浏览器控制台查看调试信息,页面效 果如图 2.2 所示。在浏览器控制台中分别输出了【代码 2-2】中第 03~04 行与第 07~08 行 JS 代码所定义的调试信息,改变了数据类型的变量内容也被成功输出了。 图 2.2 改变 ECMAScript0 码力 | 52 页 | 3.83 MB | 1 年前3
前端开发者指南(2017)几乎人人都意识到开发网页的时候必须考虑多设备适配策略。 使用其他语言的开发者持续涌入 JS 领域,他们也带来了一些东西:例如类型检测,和对 类语法以及面向对象思想的执念。 前端开发引入了热模块替换技术和时间旅行调试。 原生 JS 浏览器模块加载器更受期待了。 Enforcing CSS 和 JS 格式规范变得更受重视(就 ES3 到 ES6 编码以及 CSS 预处理语 法两者的变化而论)。 少部分开发者开始在 HTTPS,嗯,这个我们很重视 BASH 在 windows 系统上展露头脚。 通知功能 API 可以被使用了,并在 chrome 上有些滥用,但这只会发生在你授予它权限 之后。 FireBug 调试工具退出历史舞台。 2016年,CSS 20 岁了。 Immutability 概念发展势头正旺。 2016 前端开发回顾 15 展望2017 Web Assembly 有望达到一个新的高度。 Javascript APIs [文章] 学习设计 JS API 78 学习web开发工具 Web开发工具可以让web开发者们对自己的代码进行测试和调试。这些工具并不支持直 观的创建web页面,也使得它们与站点集成工具和IDEs工具不一样, 更确切的说,它们是 用来调试开发者所面对的web网站或web应用接口的工具。 Web开发工具一般是浏览器的附加软件或内置在web浏览器中。时下最受欢迎的浏览器 如:谷歌浏览器0 码力 | 164 页 | 6.43 MB | 1 年前3
共 11 条
- 1
- 2













