使用AJAX的Javascript/jQuery中的循环替代方案



我有下面一段代码,我担心它的性能。我不确定这样循环$.ajax是否是个好主意。有没有一种更有效的方法可以在jQueryajax中循环遍历数组?

这个代码应该做什么:

这个代码应该通过一个文本区域获取一堆URL,如果这些URL被分解成新行,那么每个URL都将是urls_ary数组的一部分。否则,如果没有换行,并且输入的文本区域值是URL,则该值将存储在single_url中。

现在,我需要将这些URL(或URL)发送到服务器端脚本(PHP)并处理这些链接。然而,如果数组urls_ary是通过AJAX发送数据的数组,我需要单独发送每个URL,这导致我在for循环中运行$.ajax调用,我认为这是低效的。

    var char_start  = 10;
    var index       = 0;
    var urls        = $('textarea.remote-area');
    var val_ary     = [];
    var urls_ary    = [];
    var single_url  = '';
    urls.keyup(function(){      
        if (urls.val().length >= char_start)
        {           
            var has_lbrs = /r|n/i.test(urls.val());
            if (has_lbrs) {
                val_ary = urls.val().split('n');
                for (var i = 0; i < val_ary.length; i++)
                {
                    if (!validate_url(val_ary[i]))
                    {
                        continue;   
                    }
                    urls_ary[i] = val_ary[i];
                }
            }
            else
            {
                if (validate_url(urls.val()))
                {
                    single_url = urls.val();
                }
            }
            if (urls_ary.length > 0)
            {
                for (var i = 0; i < urls_ary.length; i++)
                {
                    $.ajax({
                        // do AJAX here.                            
                    }); 
                }
            }
            else
            {
                $.ajax({
                    // do AJAX here.                                
                });     
            }
        }
    });
    function validate_url(url)
    {
        if(/^([a-z]([a-z]|d|+|-|.)*):(//(((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:)*@)?(([(|(v[da-f]{1,}.(([a-z]|d|-|.|_|~)|[!$&'()*+,;=]|:)+))])|((d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]))|(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=])*)(:d*)?)(/(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)*)*|(/((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)+(/(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)*)*)?)|((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)+(/(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)*)*)|((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)){0})(?((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|[uE000-uF8FF]|/|?)*)?(#((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|/|?)*)?$/i.test(url)){
          return true;
        }   
        return false;
    }

在循环中执行$.ajax调用并不是效率低下的部分。AJAX请求将排队等待一个可用的连接(每次只允许每个连接有一定数量的请求)。效率低下的是您正在执行多个AJAX调用。理想情况下,您可以在服务器上添加一次处理多个URL的功能,然后在客户端代码中发布一组URL,而不是执行多个请求。

因此,基本上,提高效率的唯一方法是更改服务器端代码,然后重写客户端代码应该很简单。

相关内容

  • 没有找到相关文章

最新更新