-
Notifications
You must be signed in to change notification settings - Fork 0
/
package.json
85 lines (85 loc) · 5.66 KB
/
package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{
"name": "setimmediate",
"description": "A shim for the setImmediate efficient script yielding API",
"version": "1.0.1",
"author": {
"name": "NobleJS"
},
"contributors": [
{
"name": "Domenic Denicola",
"email": "domenic@domenicdenicola.com",
"url": "http://domenicdenicola.com"
},
{
"name": "Donavon West"
},
{
"name": "Yaffle"
}
],
"license": "MIT",
"repository": {
"type": "git",
"url": "git://github.com/NobleJS/setImmediate.git"
},
"bugs": {
"url": "http://github.com/NobleJS/setImmediate/issues"
},
"main": "setImmediate.js",
"scripts": {
"lint": "jshint setImmediate.js",
"test": "mocha test/tests.js",
"test-browser": "opener http://localhost:9000 && zuul --server 9000 test/tests.js --wwwroot test/",
"test-browser-only": "opener http://localhost:9007/test/browserOnly/index.html && http-server . -p 9007"
},
"devDependencies": {
"jshint": ">= 0.9.1",
"mocha": ">= 1.7.4",
"zuul": ">= 0.0.1",
"http-server": ">= 0.5.3",
"opener": ">= 1.1.0"
},
"testling": {
"browsers": {
"ie": [
6,
7,
8,
9
],
"chrome": [
4,
23,
"canary"
],
"firefox": [
3,
3.5,
3.6,
4,
17,
"nightly"
],
"opera": [
10,
10.5,
11,
11.5,
11.6,
12,
"next"
],
"safari": [
"5.0.5",
5.1
]
},
"harness": "mocha",
"files": "test/tests.js"
},
"readme": "<a href=\"http://ci.testling.com/NobleJS/setImmediate\">\n <img src=\"http://ci.testling.com/NobleJS/setImmediate.png\" alt=\"Testling-CI badge showing browser compliance\"\n align=\"right\">\n</a>\n\n# setImmediate.js\n**A NobleJS production**\n\n## Introduction\n\n**setImmediate.js** is a highly cross-browser implementation of the `setImmediate` and `clearImmediate` APIs, currently\na [W3C draft spec][spec] from the Web Performance Working Group. `setImmediate` allows scripts to yield to the browser,\nexecuting a given operation asynchronously, in a manner that is typically more efficient and consumes less power than\nthe usual `setTimeout(..., 0)` pattern.\n\nsetImmediate.js runs at “full speed” in the following browsers and environments, using various clever tricks:\n\n * Internet Explorer 6+\n * Firefox 3+\n * WebKit\n * Opera 9.5+\n * Node.js\n * Web workers in browsers that support `MessageChannel`, which I can't find solid info on.\n\nIn all other browsers we fall back to using `setTimeout`, so it's always safe to use.\n\n## The Tricks\n\n### `process.nextTick`\n\nIn Node.js versions below 0.9, `setImmediate` is not available, but [`process.nextTick`][nextTIck] is, so we use it to\nshim support for a global `setImmediate`. In Node.js 0.9 and above, `setImmediate` is available.\n\nNote that we check for *actual* Node.js environments, not emulated ones like those produced by browserify or similar.\nSuch emulated environments often already include a `process.nextTick` shim that's not as browser-compatible as\nsetImmediate.js.\n\n### `postMessage`\n\nIn Firefox 3+, Internet Explorer 9+, all modern WebKit browsers, and Opera 9.5+, [`postMessage`][postMessage] is\navailable and provides a good way to queue tasks on the event loop. It's quite the abuse, using a cross-document\nmessaging protocol within the same document simply to get access to the event loop task queue, but until there are\nnative implementations, this is the best option.\n\nNote that Internet Explorer 8 includes a synchronous version of `postMessage`. We detect this, or any other such\nsynchronous implementation, and fall back to another trick.\n\n### `MessageChannel`\n\nUnfortunately, `postMessage` has completely different semantics inside web workers, and so cannot be used there. So we\nturn to [`MessageChannel`][MessageChannel], which has worse browser support, but does work inside a web worker.\n\n### `<script> onreadystatechange`\n\nFor our last trick, we pull something out to make things fast in Internet Explorer versions 6 through 8: namely,\ncreating a `<script>` element and firing our calls in its `onreadystatechange` event. This does execute in a future\nturn of the event loop, and is also faster than `setTimeout(…, 0)`, so hey, why not?\n\n## Usage\n\nIn the browser, include it with a `<script>` tag; pretty simple.\n\nIn Node.js, do\n\n```\nnpm install setimmediate\n```\n\nthen\n\n```js\nrequire(\"setimmediate\");\n```\n\nsomewhere early in your app; it attaches to the global.\n\n## Demo\n\n* [Quick sort demo][cross-browser-demo]\n \n## Reference and Reading\n\n * [Efficient Script Yielding W3C Editor's Draft][spec]\n * [W3C mailing list post introducing the specification][list-post]\n * [IE Test Drive demo][ie-demo]\n * [Introductory blog post by Nicholas C. Zakas][ncz]\n\n\n[spec]: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html\n[list-post]: http://lists.w3.org/Archives/Public/public-web-perf/2011Jun/0100.html\n[ie-demo]: http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html\n[ncz]: http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/\n[nextTick]: http://nodejs.org/docs/v0.8.16/api/process.html#process_process_nexttick_callback\n[postMessage]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#posting-messages\n[MessageChannel]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging\n[cross-browser-demo]: http://jphpsf.github.com/setImmediate-shim-demo\n",
"readmeFilename": "README.md",
"_id": "setimmediate@1.0.1",
"_from": "setimmediate@~1.0.1"
}