fetch API 简介

十多年来,我们一直使用 XMLHttpRequest(XHR)来发送异步请求,XHR 很实用,但并不是一个设计优良的 API,在设计上并不符合职责分离原则,输入、输出以及状态都杂糅在同一对象中,并用事件机制来跟踪状态变化。并且,基于事件的模型与最近流行的 Promise 和 generator 异步编程模型不太友好。

Fetch API 旨在修正上述缺陷,它提供了与 HTTP 语义相同的 JS 语法,简单来说,它引入了 fetch() 这个实用的方法来获取网络资源。

Fetch 规范中对 API 进行了定义,它结合 ServiceWorkers,尝试做到如下优化:

  1. 改善离线体验
  2. 保持可扩展性

写这篇文章时,Fetch API 已被 Firefox 39(Nightly)以及 Chrome 42(dev)支持。在 github 上有相应的 polyfill

弹性盒模型指南

Flexbox 布局是 CSS3 中一种新的布局模型,被称为弹性盒模型。该模型是为了改进容器中内容的对齐、方向和排序方式,即使是动态,甚至是未知大小的容器。弹性盒模型的主要特点是,可以在不同屏幕尺寸下以最佳的方式,修改其子项的高度或宽度来填充容器的可用空间。

许多设计师和开发人员认为这种布局使用起来更加简单,弹性盒模型的使元素的定位更加简单,从而某些复杂的布局可以用更少的代码来实现,进而简化了开发过程。Flexbox 布局算法是基于方向的,这与基于垂直和水平的 block 和 inline 布局不同。弹性盒模型可用于小应用或组建的布局,然而对于大型应用应该使用 Grid 布局

本文将用可视化的方式介绍 Flex 如何影响我们的布局。

创建自定义元素的最佳实践

越来越多的文章和讨论都是关于什么是 web 组件,什么是自定义元素,它们有什么好处以及如何使用它们,这些概念也逐渐进入开发人员的视野。如果你还不知道创建自定义元素的概念,请参考阅读详细介绍自定义元素

尽管这些新概念还没有在开发中大量使用,我认为是时候讨论一下使用它们的最佳实践。本文将通过对比分析两种创建自定义元素方法的优缺点,最后得出创建自定义元素的最佳实践。

自定义元素:在 HTML 中定义新元素

引言

现在的 web 严重缺乏表现力。你只要瞧一眼“现代”的 web 应用,比如 GMail,就会明白了:

现代 web 应用:使用 div 堆砌而成

堆砌 <div> 的方式一点都不现代。然而可悲的是,这就是我们构建 web 应用的方式。在现有基础上我们不应该有更高的追求吗?

说说 tabindex 的那些事儿

tabindex 属性用于管理键盘焦点,决定元素是否能被选中,以及按下 tab 键过程中被选中的顺序,使用得当能够极大的提高应用的易用性,然而,不恰当地使用时可以键盘用户对应用的可用性。到底如何使用?设置为 0 会有什么效果?设置为 -1 会有什么效果?本文将为你揭晓。

理解和解决 IE 内存泄露问题

在过去,内存泄漏并没有为 Web 开发人员带来巨大的问题。页面保持着相对简单,并且在页面之间的跳转时可以释放内存资源,即便还存在内存泄露,那也是小到可以被忽略。

现在,新的 Web 应用达到更高的水准,页面可能运行数小时而不跳转,通过 Web 服务动态检索和更新页面。JavaScript 语言特性也被发挥到极致,通过复杂的事件绑定、面向对象和闭包等特性构成了整个 Web 应用。面对这些变化,内存泄露问题变得越来越突出,尤其是之前那些通过刷新(导航)隐藏的内存泄露问题。

庆幸的是,如果你知道如何排查问题,内存泄露可以很轻易地被清除。即便是面对一些最麻烦的问题,如果你知道解决方案,也只需要少量的工作。虽然页面仍可能存在一些小的内存泄露,但是那些最明显的可以轻易地被清除。

Memory Leaks

如何修复那些奇怪的 JavaScript 错误

调试 JavaScript 也许是一场噩梦:一些错误非常难理解,并且给出的错误行号并不是总是很有帮助。如果有一个列表,列举这些错误的意思和如何修复它们,将对我们非常有帮助。

本文列举了 JavaScript 中一些奇怪的错误。对于相同的错误不同的浏览器可能给出不同的提示,所以分别给出了不同的例子。

在 Express 开发中使用 nodemon

nodemon

nodemon 是一款非常实用的工具,用来监控 NodeJS 源代码的任何变化和自动重启你的服务器,这样我们只需要刷新页面就能看到你的改动。这里还有个一个工具 supervisor 也能实现同样的功能,但相比起来 nodemon 更加灵活轻量,内存占用更少。

Partial Application in JavaScript

概述

Partial Application?不要被字面意思误解,这里要说的并不是 Application,而是 JavaScript 中的 function。可以这样来描述 Partial Application,一个接受多个参数的函数,预先给该函数绑定一些参数,并返回一个新的函数来接受剩下未绑定的参数。貌似有点像柯里化(currying)函数,但不尽然。

典型的柯里化函数定义如下:

1
2
3
4
5
6
7
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};

上面代码预先绑定函数参数列表左侧的参数到新返回的函数中,新函数接受右侧剩下的参数,相比起来 Partial Application 更加灵活。

go2top