摘要:
方法重载(overload)在传统的静态类型语言中是很常见的。JavaScript 作为动态语言, 是没有重载这一说的。一是它的参数没有类型的区分,二是对参数个数也没有检查。虽然语言层面无法自动进行重载,但借助其动态的特性,我们可以在代码中手动检查入参的类型,或者通过 arguments 获取到参数 阅读全文
摘要:
无疑,对于大型项目来说,Vanilla Js 无法满足工程需求。早在 2016 年 Anuglar 在项目中引入 TypeScript 时,大概也是考虑到强类型约束对于大型工程的必要性,具体选型考虑可参考这篇文章。然后可以看到 TypeScript 在社区中逐渐升温。但凡社区中举足轻重的库,如果不是 阅读全文
摘要:
日常作业中免不了频繁处理 GET/POST 的入参,你当然可以每个 action 中都重复地去做这些事情, 从 query 或 body 取出入参, 对可选的入参进行判空, 处理入参的类型转换, 对入参进行逻辑校验,数字是否超限,类型是否非法等... 但这些通用的逻辑可通过抽取到插件或服务中,避免代 阅读全文
摘要:
不像 express 中在末尾处注册一个声明为 (err, req, res, next) 中间件的方式,koa 刚好相反,在开头进行注册。 app.use(async (ctx, next) => { try { await next(); } catch (err) { ctx.statu 阅读全文
摘要:
网络中数据传输是很耗时的,数据要在漫长的路径中奔波,客户端在数据完整到达前只能等待。如果能够复用已经请求过的资源,势必会让整个页面加载高效许多。这可以通过合理地设置服务器的缓存,与浏览器的缓存机制配合以达到最优。 缓存设置得当不但可减少用户等待时间,提升体验,还节省服务器开销省流量带宽。 缓存的配置 阅读全文
摘要:
React 17 中事件系统有更新,以下内容中的示例适用于 17 之前的版本 在正式开始前,先来看看 JS 中事件的触发与事件处理器的执行。 JS 中事件的监听与处理 事件捕获与冒泡 DOM 事件会先后经历 捕获 与 冒泡 两个阶段。捕获即事件沿着 DOM 树由上往下传递,到达触发事件的元素后,开始 阅读全文
摘要:
限定项目运行所需的 Node.js 版本可保证项目在一个稳定可预期的环境中运行,减少不必要的故障。甚至有些依赖库只能工作于某些版本下。同时,不加以限制的话,在多人合作的项目中恐怕会引起环境不一致带来的兼容性问题,部署上也会存在相同的问题。 为项目指定 Node.js 的版本可通过版本管理器,或者通过 阅读全文
摘要:
如果你是个程序员, 如果你恰好用 mac 自带的 notes 来做笔记, 很大可能性, 你会在里面贴代码, 但是, Mac 的拼写检查和自动纠正功能,会把代码变成你不想要的样子, 比如, 它会为你首字母大写, 它会自动纠正拼写, 最不能忍的是,两个横线 会自动转成一个长的横线 —, 对于正常用户来说 阅读全文
摘要:
Puppeteer 是 Headless Chrome 的 Node.js 封装。通过它可方便地对页面进行截图,或者保存成 PDF。 镜像的设置 因为其使用了 Chromium,其源在 Google 域上,最好设置一下 npm 从国内镜像安装,可解决无法安装的问题。 推荐在项目中放置 .npmrc 阅读全文
摘要:
macOS Mojave 中引入了系统层面的黑色模式,Chrome 73 在应用中支行了这一模式,即系统设置为黑色模式时,Chrome 会自动适应切换到 Dark Mode。 Chrome 跟随系统设置的黑色模式 很酷对不? 但其实黑色模式下标题与顶部系统菜单融为一体,且黑色模式下 Chrome 标 阅读全文
摘要:
top 自带的 top 命令类似于平时我们使用的任务管理器,能够列出当前系统中的进程及资源的使用情况。 $ man top top display Linux tasks 使用起来很简单,不加任何参数的情况下已经很实用了。其输出大致是下面这个样子: top命令的输出界面 按 q 可退出该界面。 Ti 阅读全文
摘要:
ls 的输出会因各 Linux 版本变种而略有差异,这里只讨论一般情况下的输出。 下面是来自 man page 关于 ls 的描述: $ man ls ls list directory contents 列出文件夹中的内容。 但一般我们会配合着 l 参数使用,将输出展示成列表形式。 在 ls 的 阅读全文
摘要:
Accept 表示请求方希望的资源类型,或者能解析识别的类型 Content Type 表示实际发送的资源类型 这里资源类型通过 MIME types 表示。 Accept Accept 是浏览器发送的请求头,用于表示想要的资源类型。根据请求的上下文不同,所设置的 Accept 请求头会相应变化。服 阅读全文
摘要:
什么是 stream Stream 借鉴自 Unix 编程哲学中的 pipe。 Unix shell 命令中,管道式的操作 | 将上一个命令的输出作为下一个命令的输入。Node.js stream 中则是通过 .pip() 方法来进行的。 来看一个 stream 的运用场景:从服务器读取文件并返回给 阅读全文
摘要:
官方文档中有关于两者对比的信息,隐藏在 TypeScript Handbook 中,见 Interfaces vs. Type Aliases 部分。 但因为这一部分很久没更新了,所以其中描述的内容不一定全对。 比如, 区别点之一:Type Alias 不会创建新的类型,体现在错误信息上。 One 阅读全文
摘要:
页面流畅与 FPS 页面是一帧一帧绘制出来的,当每秒绘制的帧数(FPS)达到 60 时,页面是流畅的,小于这个值时,用户会感觉到卡顿。 1s 60帧,所以每一帧分到的时间是 1000/60 ≈ 16 ms。所以我们书写代码时力求不让一帧的工作量超过 16ms。 Frame 那么浏览器每一帧都需要完成 阅读全文
摘要:
0 node 正确的书写方式 为了防止后面出现混乱的各种书写,先来了解一下如何正确书写 node 的名称。 下面使用来自@bitandbang 推文中的图片展示如何正确书写 node 名称。 node 名称的正确书写方式 inspect 参数 本地开发,无论是 web 应用还是命令行工具,使用 in 阅读全文
摘要:
线上产品代码一般是编译过的,前端的编译处理过程包括不限于 转译器/Transpilers (Babel, Traceur) 编译器/Compilers (Closure Compiler, TypeScript, CoffeeScript, Dart) 压缩/Minifiers (UglifyJS) 阅读全文
摘要:
React 组件中处理 onClick 类似事件绑定的时候,是需要显式给处理器绑定上下文(context)的,这一度使代码变得冗余和难看。 请看如下的示例: class App extends Component { constructor() { super(); this.state = { i 阅读全文
摘要:
我们都知道浏览器有同源策略(same-origin policy)的安全限制,即每个站点只允许加载来自和自身同域(origin)的数据,https://a.com 是无法从 https://b.com 加载到资源的。每个站点被严格限制在了自已的孤岛上,自己就是一个沙盒,这样很安全,整个网络不会杂乱无章。主要地,它能解决大部分安全问题。假若没有同源策略,恶意代码能够轻松在浏览器端执行然后获取各种隐私信息:银行帐号,社交数据等。 阅读全文