javascript - javascript中函数的并行执行

标签 javascript jquery parallel-processing

我听说 javascript 是单线程的,对吗? 那么我怎样才能并行(同时)执行(多个)函数。

我有如下脚本,我想告诉你每个xml文件大小是4.6MB。

myfunction('sample1.xml');
myfunction('sample2.xml');
myfunction('sample3.xml');
    .
    .
myfunction('sample15.xml');

function myfunction(name) {

    $.ajax({
        type: "GET",
        url: name,
        dataType: "xml",
        success: parseXml
    });

    function parseXml(xml) {

        //searching the xml file 


    }

}

我的目标是加快搜索 xml 文件的过程,为此我认为并行执行很好。 那么是否有可能在 javascript 函数中并行执行,或者它们是否可以加快我的函数执行速度。

最佳答案

您可以根据需要触发任意数量的 ajax 请求,它们将并行触发,因为它们默认是异步的。问题是只要 ajax 请求准备就绪,您的浏览器就会执行 parseXML,因此您可能无论如何都会卡住浏览器。

您可以根据 Mark Gabriel 的响应推迟 parseXML 的执行

setTimeout(function(){ parseXML(xml) }, 0)

这将防止浏览器卡住,但最终会按顺序执行 parseXML。

根据您在 parseXML 中究竟想做什么,最好使用网络 worker 在并行浏览器进程中执行 XML 解析。这样您将打开一个后台进程来执行特定任务。您创建工作人员并将文件名作为消息发送,然后等待工作人员返回您对 parseXML 的期望

var worker = new Worker('/js/parseXML.js');
worker.addEventListener('message', function (e) {
        console.log('Webworker answer is',e);
    }, false);

worker.postMessage('sample1.xml'); // Send data to our worker.

parseXML.js 的内容是

importScripts("/js/jquery.js");

self.addEventListener('message', function (e) {
    console.log('Webworker received', e.data);
    $.ajax({
        type: "GET",
        url: e.data,
        dataType: "xml",
        success: parseXml
    });

    function parseXml(xml) {
        //searching the xml file 
        self.postMessage(parsedXML);
    };
}, false);

请记住,只有当您计划获取字符串、数组或散列作为 parseXML 的返回值时,此逻辑才有意义。您不能在 webworker 中对主脚本的全局对象进行操作,也不能返回复杂对象。

关于javascript - javascript中函数的并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939290/

相关文章:

jquery - 如何使用 jquery 从 URL 获取域名?

javascript - 使用serialize()函数发送表单并在ajax()中发送额外数据

c++ - 在 C++ 中复制和操作大型密集二维数组的最快方法是什么

c - MPI 基本示例不起作用

javascript - 使用 AngularJS 下载 zip 文件

javascript - 在 html5 canvas 中对图像进行像素化

javascript - 设置初始应用 View - Chrome App/Electron/JS

javascript - Vue2 : Page Is Not Rendered

javascript - jquery 将 post 值发送到另一个页面并在当前页面加载。显示更多,显示更多按钮

c# - Task.Factory.StartNew 与 Parallel.Invoke