King Mui

用艺术的眼光发现技术的美

JS 语言不像 C/C++,让程序员自己去开辟或者释放内存,而是类似 Java,采用自己的一套垃圾回收算法进行自动的内存管理。作为一名资深前端工程师,需要对 JS 的内存回收机制非常清楚,以便在极端的环境下能够分析出系统性能的瓶颈,另一方面,学习这其中的机制,也对我们深入理解 JS 的闭包特性、以及对内存的高效使用,都有很大的帮助。

垃圾回收机制

V8 的垃圾回收策略基于分代回收机制,该机制又基于世代假说。该假说有两个特点:

  1. 大部分新生对象倾向于早死
  2. 不死的对象,会活得更久

基于这个理论,现代垃圾回收算法根据对象的存活时间将内存进行了分代,并对不同分代的内存采用不同的高效算法进行垃圾回收。

阅读全文 »

历史上,JS 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的 require、Python 的 import,甚至就连 CSS 都有 @import,但是 JS 任何这方面的支持都没有,这对开发大型复杂的项目形成了巨大障碍。

在 ES6 出来之前,社区制定了一些模块加载方案,最主要的有 CommonJSAMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性。

阅读全文 »

Deno 是使用 V8 引擎并用 Rust 语言编写的 JavaScript 和 TypeScript 的简单,现代且安全的运行时。它汇集了许多最佳的开源技术,并在一个小的可执行文件中提供了全面的解决方案。它还解决了 Ryan 在我对Node.js感到遗憾的十件事演讲中谈到的设计缺陷。

前言

不知道大家还记不记得两年前在 Github 发生的「学不动」事件。那次事件的起因便是著名的 Node 之父 Ryan Dahl 宣布新开一个叫 Deno 的项目,于是就有国人以一种类似于贴吧灌水的形式在 Deno 的 issiue 区里用中文大量发“学不动啦”,“求别更新”等帖子,顿时引起一片争论。如今两年时间过去了,ry 也带着他的 Deno 1.0 正式与我们会面。不论我们学的动还是学不动,技术就在那里,不以人的意志为转移。在这篇文章中,我们将会涵盖所有令人激动的 Deno 特性。

阅读全文 »

随着互联网的高速发展,网络迅速普及。人们在享受网络带来便捷的同时,也面临着日益严重的网络安全问题。在一些出名的案例中,上百万的密码、邮件地址和信用卡信息被泄露给了公众,导致网站用户面临个人尴尬和财务威胁。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持等新型安全问题。当然,浏览器自身也在不断地进化和发展,引入内容安全策略(Content Security Policy)、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端开发人员不断进行“查漏补缺”。

本文介绍以下几种常见的前端安全问题及其解决方案:

  1. 同源策略
  2. XSS
  3. CSRF
  4. SQL 注入
  5. 点击劫持
  6. window.opener 安全问题
  7. 文件上传漏洞
阅读全文 »

Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。

获取最新安装脚本到本地编辑

1
2
3
cd ~

curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install
阅读全文 »