有没有任何想法(库或方法)可以在JavaScript中创建多线程应用程序?
你能得到的最接近的解决方案是Web Workers(仅在FF 3.5 / HTML5中可用)。请查看以下链接:http://www.whatwg.org/specs/web-workers/current-work/
JavaScript实际上没有多线程能力,而且JavaScript程序员无法改变这一点。
但是,我们可以模拟多线程。请阅读本文章了解更多信息。
还有一个PDF链接,介绍了用于异步处理的JavaScript多线程框架论文。
我发现另一种线程模拟方法是使用图像,这种方法在浏览器中好像会在另一个线程中加载。但是你的回调JavaScript始终按顺序运行。
下面的示例加载了500个图像。
<html>
<head>
<title>so</title>
<style></style>
</head>
<script>
function callBack(img){
var i = 0, img, res = document.getElementById('res'),
fn = function(cnt){
var img = document.createElement('img');
img.onerror = function(ev){
res.innerHTML += cnt + ', ';
document.body.removeChild(img);
};
img.src = 'javascript:void(0)';
document.body.appendChild(img);
};
do{
fn(i++);
}while(i<500);
}
</script>
<body onload="callBack()">
<div id="res"></div>
</body>
</html>
您可以使用Web Workers创建后台线程。
Web Workers为Web内容提供了一种在后台线程中运行脚本的简单方式。工作线程可以执行任务,而不会干扰用户界面。此外,它们可以使用XMLHttpRequest执行I/O操作(尽管responseXML和channel属性始终为空)。创建后,工作者可以通过发布消息到由该代码指定的事件处理程序(反之亦然)向创建它的JavaScript代码发送消息。本文介绍了使用Web Workers的详细介绍。
Chrome: 4
Firefox(Gecko):3.5
Internet Explorer:10.0
Opera:10.6
Safari(WebKit):4
JavaScript是一种动态编程语言,可用于许多不同的事情。如果它不是从浏览器中使用,您可以完全依赖于诸如多线程、事件循环等功能。您应该查看node.js。
不幸的是,浏览器只提供了语言的严格功能集。