Timer

从JS执行机制说起

浏览器(或者说JS引擎)执行JS的机制是基于事件循环。

由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。

为了避免因为某些长时间任务造成的无意义等待,JS引入了异步的概念,用另一个线程来管理异步任务。

同步任务直接在主线程队列中顺序执行,而异步任务会进入另一个任务队列,不会阻塞主线程。等到主线程队列空了(执行完了)的时候,就会去异步队列查询是否有可执行的异步任务了(异步任务通常进入异步队列之后还要等一些条件才能执行,如ajax请求、文件读写),如果某个异步任务可以执行了便加入主线程队列,以此循环。

玩转npm
In JavaScript,Node.js,Web开发 on 2016年03月10日 by view: 11,262
19

NPM

npm本来是Node.js的包管理工具,但随着JS这几年的蓬勃发展,现在的npm已经成了几乎所有跟JS相关的工具和软件包的管理工具了,并且还在不断发展完善中。

本文从笔者的经验,总结了npm安装/卸载、更新、发布这几个最主要功能的正确使用姿势和一些小技巧,顺便从官网搬来了npm3处理依赖的重大变化。

Hey async, await me
In JavaScript,Web开发 on 2015年12月18日 by view: 3,543
5

背景

笔者在前面的文章介绍过如何使用generator来解决callback hell,尽管现在多数浏览器特别是移动端浏览器还不支持该ES2015新特性,但你可以通过Babel等转换工具转化成ES5兼容的等效代码,从而在生产环境使用。

不过使用generator来解决callback hell似乎有点不务正业,毕竟generator是生成器,属于Iterator的一种,设计之初是用来生成一种特殊的迭代器的。

另外还有两点也可以算是generator解决callback hell问题的缺陷:

  1. generator需要从generator function执行得到,而generator function执行之后只会返回一个generator,不管里面是怎样的代码,与我们通常对函数的认知存在差异
  2. 如果想执行generator function的函数体,需要不断调用返回的generator的next方法,这样就决定了必须依赖cobluebird.coroutine等其他辅助代码或者手动执行next,来保证generator不断next下去

Tips:文章ES6 Generator介绍有介绍generator和generator function,以及它们之间的关系和区别。

Strong Mode下严格的属性访问
In Web开发 on 2015年10月30日 by view: 355
1

最近在着手把手上的Nodejs代码全面升级到strong模式,strong模式是V8实现的一种新的模式,主要的变化我在前面的文章中已经写过。

从报错开始

然而事情并没有想象中顺利,将所有文件第一行的'use strict'换成'use strong'之后,一运行,立马出现一个报错TypeError: In strong mode, accessing missing property 'NODE_ENV' of #<Object> is deprecated。

查看代码发现是这行

看起来似乎是很莫名其妙的错误,就换了个模式而已,好端端的代码怎么报这样一个闻所未闻见所未见的奇葩错误呢?

在Web中使用ES 2015

想要在浏览器端使用ES 2015最新语法,其实很简单,只需要一个转换器即可,Babel是ES 2015最流行的转换器之一,Babel加上各种插件和polyfill能基本上支持绝大部分新语法。

在你的构建中,插入一步使用Babel将ES 2015的代码转换成完全兼容ES5的代码的任务,你甚至都不必了解Babel的具体用法,就可以爽爽的开始写ES 2015代码了。

使用gulp-babel在需要的地方转换一下即可。

 



不得不说的废话

随着前端工程化的推进,相信越来越多的项目都用上了自动化构建。
对前端构建来说,使用最多的莫过于gruntgulp

本文的主角是gulp,所以花一两句话来介绍gulp还是有必要的。

gulp是一款基于stream的前端构建工具,由于底层使用stream,可以将多个任务无缝串连在一起,相比使用临时文件的grunt要快不少;同时也不用像grunt一样写一大堆配置文件,每一个任务都可以可编程的来完全控制逻辑。

gulp比grunt“快”这是公认的事实,这里不再过多比较两者之间的差异,还是那句话,各有千秋吧。

Strong Mode介绍
In JavaScript,Node.js,Web开发 on 2015年06月30日 by view: 795
7
If it is too strong, then you are too weak.

就算是背景吧

随着ES2015的到来,JavaScript引进了许多新特性,很多很强大的特性完全可以弥补JS本身语法上的弱点,比如让很多初次尝试JS的程序员感到不习惯的变量提升问题、没有块级作用域问题等问题。

strong mode

ES5增加了strict mode,现在V8又实现了一种新的模式——strong mode

strong modestrict mode的升级版,在语法要求上更严格了,同时正因为这些严格的要求,让开发者得以规避语言本身一些糟粕或者让人困惑的地方。

Promise

Promise

Promise是ES6的新特性,在ES6之前各大浏览器、各种polyfill和各种js执行环境都针对Promise进行了自己的实现,不过实现上大同小异。

callback hell

(图片来源于互联网)

回调地狱

相信每一个JS程序员都曾被或者正在被回调地狱所折磨,特别是写过Nodejs代码的程序员。

 

ES6 Generator介绍
In HTML5,JavaScript,Node.js,Web开发 on 2015年03月30日 by view: 7,811
5