使用JavaScript做开发,始终不能绕不过网络这一关。
目前主要的网络使用场景有以下两大块:
AJAX (browser)
HTTP client (server)
当然,如果正在开发一个isomorphic/universal应用,你可能需要一个能同时应付browser和server端的东西。
不管怎么样,直接使用XMLHttpRequest
是非常繁琐麻烦的,一个更简单的库来帮助我们简化编码是十分必要的。
很多人使用jQuery的$.ajax
,但如果只为了简化AJAX编码就引入整个jQuery未免有些太浪费了。
首先,让我们来列下都有哪些可用的AJAX/HTTP方法/库。
browser | node | promise | 单一职责 | 标准规范 | |
---|---|---|---|---|---|
XMLHttpRequest | O | X | X | O | O |
Node HTTP | X | O | X | O | O |
fetch | O | X | O | O | O |
node-fetch | X | O | O | O | O |
isomorphic-fetch | O | O | O | O | O |
superagent | O | O | X | O | X |
axios | O | O | O | O | X |
request | X | O | X | O | X |
jQuery | O | X | X | X | X |
reqwest | O | O | O | O | X |
从上表的对比,可以看出,时至今天(2016/02/15),如果要选择一个AJAX/HTTP库,符合标准规范的fetch
无疑是最好的选择。
当然,fetch也不是十全十美的,目前(2016/02/15)只有chrome/firefox/opera原生支持fetch
。
想在其他浏览器上使用,得引入一些polyfill,比如github的fetch
想在node上使用,得引入node-fetch
想在浏览器和node上同时使用,得引入isomorphic-fetch,它包含了fetch和node-fetch
另外,因为fetch
是基于promise
的,如果你的目标运行环境不支持promise
,还得引入es6-promise这个polyfill才行。
但是不管怎么样,紧跟标准规范总是不会错的,这些polyfill也总有一天会被移出,我们只是提前享受标准带来的好处而已,不是吗。