VSCode Update

  |  
 阅读次数

CODE SETTINGS SYNC UPLOAD SUMMARY

Version: 2.9.2


GitHub Token: a445a630bcdbb6a32670317533c559de9533d8f3

GitHub Gist: 12d91e8460e10f3c9083b82a25623363

GitHub Gist Type: Secret

Restarting Visual Studio Code may be required to apply color and file icon theme.


Files Uploaded:

javascript.json > snippets | javascript.json

Extensions Removed:

Extensions Added: \
Angular2 v6.0.0 \
background v1.1.17 \
beautify v1.3.0 \
bracket-pair-colorizer v1.0.48 \
code-gnu-global v0.2.2 \
code-settings-sync v2.9.2 \
cpptools v0.17.0 \
ejs-language-support v0.0.1 \
ejs-snippets v0.1.0 \
git-project-manager v1.5.1 \
githistory v0.4.0 \
gitlens v8.2.4 \
html-snippets v0.2.1 \
java v0.24.0 \
javascript-ejs-support v0.3.2 \
JavaScriptSnippets v1.6.0 \
jquerysnippets v0.0.1 \
language-stylus v1.9.2 \
mongoose-os-ide v0.3.0 \
mssql v1.3.1 \
node-module-intellisense v1.5.0 \
npm-intellisense v1.3.0 \
python v2018.4.0 \
tslint v1.0.28 \
vetur v0.11.7 \
view-in-browser v0.0.5 \
vscode-eslint v1.4.8 \
vscode-great-icons v2.1.31 \
vscode-html-css v0.2.0 \
vscode-icons v7.23.0 \
vscode-java-debug v0.9.0 \
vscode-language-babel v0.0.14 \
vscode-language-pack-zh-hans v1.23.4 \
vscode-map-preview v0.4.2 \
vscode-maven v0.7.0 \
vscode-mongodb v0.0.2 \
vscode-npm-script v0.3.4 \
vscode-preview-server v1.0.1 \
vue-vscode-snippets v1.3.0 \
weex v0.4.0 \
xml v1.9.2


Done.


2018年5月23日 14:37:12

CODE SETTINGS SYNC UPLOAD SUMMARY

Version: 2.9.2


GitHub Token: c49d7c88a2236d998b043830034a10d1b00ca5df

GitHub Gist: daeb8021fc8862ba3a1fe162cc301c7c

GitHub Gist Type: Secret

Restarting Visual Studio Code may be required to apply color and file icon theme.


Files Uploaded:

javascript.json > snippets|javascript.json

Extensions Removed:

Extensions Added:\
Angular2 v6.1.1\
background v1.1.17\
beautify v1.3.0\
bracket-pair-colorizer v1.0.53\
code-gnu-global v0.2.2\
code-settings-sync v2.9.2\
cpptools v0.17.3\
ejs-language-support v0.0.1\
ejs-snippets v0.1.0\
git-project-manager v1.6.1\
githistory v0.4.1\
gitlens v8.3.2\
html-snippets v0.2.1\
java v0.25.0\
javascript-ejs-support v0.3.2\
JavaScriptSnippets v1.6.0\
jquerysnippets v0.0.1\
language-stylus v1.9.2\
mongoose-os-ide v0.3.0\
mssql v1.3.1\
node-module-intellisense v1.5.0\
npm-intellisense v1.3.0\
python v2018.4.0\
tslint v1.0.29\
vetur v0.12.3\
view-in-browser v0.0.5\
vscode-eslint v1.4.10\
vscode-great-icons v2.1.32\
vscode-html-css v0.2.0\
vscode-icons v7.23.0\
vscode-java-debug v0.9.0\
vscode-language-babel v0.0.14\
vscode-language-pack-zh-hans v1.23.5\
vscode-map-preview v0.4.2\
vscode-maven v0.8.0\
vscode-mongodb v0.0.2\
vscode-npm-script v0.3.4\
vscode-preview-server v1.0.1\
vue-vscode-snippets v1.3.0\
weex v0.4.0\
xml v1.9.2


Done.

Node.js--process模块

  |  
 阅读次数

[转]Node.js的process模块

process模块用来与当前进程互动,可以 通过全局变量process 访问,不必使用require命令加载。它是一个EventEmitter对象的实例。

一、属性

process对象提供一系列属性,用于返回系统信息。

  • process.pid:当前进程的进程号。

  • process.version:Node的版本,比如v0.10.18。

  • process.platform:当前系统平台,比如Linux。

  • process.title:默认值为“node”,可以自定义该值。

  • process.argv:当前进程的命令行参数数组。

  • process.env:指向当前shell的环境变量,比如process.env.HOME

  • process.execPath:运行当前进程的可执行文件的绝对路径。

  • process.stdout:指向标准输出。

  • process.stdin:指向标准输入。

  • process.stderr:指向标准错误。

主要属性介绍

1. stdout\
process.stdout用来控制标准输出,也就是在命令行窗口向用户显示内容。它的write方法等同于console.log。

1
2
3
exports.log = function() {
process.stdout.write(format.apply(this, arguments) + '\n');
};

2. argv

process.argv 返回命令行脚本的 各个参数 组成的数组。

先新建一个脚本文件 argv.js。

1
2
3
4
// argv.js

console.log("argv: ",process.argv);
console.log("argc: ",process.argc);

在命令行下调用这个脚本,会得到以下结果。

1
2
3
> node argv.js a b c

# [ 'node', '/path/to/argv.js', 'a', 'b', 'c' ]

上面代码表示,argv返回数组的成员依次是命令行的各个部分。要得到真正的参数部分,可以把argv.js改写成下面这样。

1
2
3
4
// argv.js

var myArgs = process.argv.slice(2);
console.log(myArgs);

二、方法

process对象提供以下方法:

  • process.exit():退出当前进程。
  • process.cwd():返回运行当前脚本的工作目录的路径。_
  • process.chdir():改变工作目录。
  • process.nextTick():将一个回调函数放在下次事件循环的顶部。

1. process.chdir() 改变工作目录的例子:

1
2
3
4
5
6
7
process.cwd()
# '/home/aaa'

process.chdir('/home/bbb')

process.cwd()
# '/home/bbb'

2. process.nextTick() 指定下次事件循环首先运行的任务:

1
2
3
process.nextTick(function () {
console.log('Next event loop!');
});

上面代码可以用setTimeout改写,但是nextTick效率更高、描述更准确。

1
2
3
setTimeout(function () {
console.log('Next event loop!');
}, 0)

三、事件

1. exit事件

当前进程退出时,会触发exit事件,可以对该事件指定回调函数

这是一个用来 定时检查模块状态 的好钩子(hook)(例如单元测试), 当主事件循环在执行完'exit'的回调函数后将不再执行,所以在exit事件中定义的定时器可能不会被加入事件列表.

1
2
3
process.on('exit', function () {
fs.writeFileSync('/tmp/myfile', 'This MUST be saved on exit.');
});

2. uncaughtException事件

当前进程抛出一个没有被捕捉的意外时,会触发uncaughtException事件。

1
2
3
4
process.on('uncaughtException', function (err) {
console.error('An uncaught error occurred!');
console.error(err.stack);
});

阅读原文

JS执行机制与异步回调

  |  
 阅读次数

[转]理解JavaScript 执行机制及异步回调(setTimeout/setInterval/Promise)

javascript执行机制‘ / ‘代码执行顺序‘ / ‘函数生命周期加载‘ 等类似问题 都与javascript执行机制相关。

1. 关于JavaScript

JavaScript 是一门 单线程语言,在最新的HTML5中提出了Web-Worker,但JS 是单线程这一核心仍未改变。所以一切JS 版的"多线程"都是用单线程模拟出来的,一切 JavaScript 多线程 都是纸老虎

2. JavaScript事件循环

既然JS是单线程,排队 办理业务, js任务也要一个一个顺序执行。如 任务耗时过长,后一个任务必须等着。浏览新闻 超清图片加载慢 需要异步加载 任务分为两类:

  • 同步任务\
    打开网站,网页渲染 过程 就是 同步任务,比如 页面骨架页面元素渲染
  • 异步任务\
    加载 图片 音乐之类占用资源大耗时久的任务,就是异步任务

    关于这部分有严格的文字定义,但本文的目的是用最小的学习成本彻底弄懂执行机制,所以用导图来说明:
    js事件循环机制

    导图要表达的内容用文字来表述的话:

    同步异步任务分别进入不同的执行”场所”同步的进入主线程异步的进入Event Table并注册函数。当指定的事情完成时,Event Table会将这个函数 移入Event Queue主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。

    上述过程会不断重复,也就是所谓的 Event Loop(事件循环)

    我们不禁要问了,那怎么知道主线程执行栈为空啊?js引擎存在monitoring process进程,会持续不断检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数
    说了这么多文字,不如直接一段代码更直白:略

3. 又爱又恨的setTimeout

大名鼎鼎的setTimeout无需再多言,大家对他的第一印象就是异步可以延时执行,我们经常这么实现延时3秒执行:

1
2
3
setTimeout(() => {
console.log('延时3秒');
},3000)

随着setTimeout使用的增加,问题也出现了,有时候明明写的延时3秒,实际却5,6秒才执行函数,这是为何?

渐渐的setTimeout用的地方多了,问题也出现了,有时候明明写的延时3秒,实际却5,6秒才执行函数,这又咋回事啊?

先看一个例子:

1
2
3
4
setTimeout(() => {
task();
},3000)
console.log('执行console');

根据前面我们的结论,setTimeout是异步的,应该先执行console.log这个同步任务,所以我们的结论是:

1
2
//执行console
//task()

去验证一下,结果正确!
然后我们修改一下前面的代码:

1
2
3
4
5
setTimeout(() => {
task()
},3000)

sleep(10000000)

乍一看其实差不多,但把这段代码在chrome执行一下,却发现控制台执行task()需要的时间远远超过3秒,为何需要这么长时间?

这时候我们需要重新理解setTimeout的定义。我们先说上述代码是怎么执行的:

  • task()进入Event Table并注册,计时开始。

  • 执行sleep函数,很慢,非常慢,计时仍在继续。

  • 3秒到了,计时事件timeout完成,task()进入Event Queue,但是sleep也太慢了吧,还没执行完,只好等着。

  • sleep终于执行完了,task()终于从Event Queue进入了主线程执行。

上述的流程走完,我们知道setTimeout这个函数,是经过指定时间后,把要执行的任务(本例中为task())加入到Event Queue中,又因为是单线程任务要一个一个执行,如果前面的任务需要的时间太久,那么只能等着,导致真正的延迟时间远远大于3秒。

JS线程

  |  
 阅读次数

[转]从setTimeout/setInterval看JS线程

setTimeoutsetInterval延时最小间隔4ms(W3C在HTML标准中规定);

JavaScript没有任何代码是立刻执行的,但一旦进程空闲尽快执行

这意味着无论是setTimeout还是setInterval,所设置的时间都只是 n毫秒后被添加到队列中,而不是n毫秒后立即执行


阅读原文