0

このスクリプトは ( http://w3lessons.info/2012/01/03/facebook-like-fetch-url-data-using-php-curl-jquery-and-ajax/ )から見つけました。複数の URL を持つループ内。

<link rel="stylesheet" type="text/css" href="style.css" />
    <!--[if lt IE 7]>
        <link rel="stylesheet" type="text/css" href="style-ie.css" />
    <![endif]-->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="js/jquery.livequery.js"></script>
<script type="text/javascript" src="js/jquery.watermarkinput.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        // delete event
        $('#attach').livequery("click", function(){

            if(!isValidURL($('#url').val()))
            {
                alert('Please enter a valid url.');
                return false;
            }
            else
            {
                $('#load').show();
                $.post("curl_fetch.php?url="+$('#url').val(), {
                }, function(response){
                    $('#loader').html($(response).fadeIn('slow'));
                    $('.images img').hide();
                    $('#load').hide();
                    $('img#1').fadeIn();
                    $('#cur_image').val(1);
                });
            }
        });
        // next image
        $('#next').livequery("click", function(){

            var firstimage = $('#cur_image').val();
            $('#cur_image').val(1);
            $('img#'+firstimage).hide();
            if(firstimage <= $('#total_images').val())
            {
                firstimage = parseInt(firstimage)+parseInt(1);
                $('#cur_image').val(firstimage);
                $('img#'+firstimage).show();
            }
        });
        // prev image
        $('#prev').livequery("click", function(){

            var firstimage = $('#cur_image').val();

            $('img#'+firstimage).hide();
            if(firstimage>0)
            {
                firstimage = parseInt(firstimage)-parseInt(1);
                $('#cur_image').val(firstimage);
                $('img#'+firstimage).show();
            }

        });
        // watermark input fields
        jQuery(function($){

           $("#url").Watermark("http://");
        });
        jQuery(function($){

            $("#url").Watermark("watermark","#369");

        });
        function UseData(){
           $.Watermark.HideAll();
           $.Watermark.ShowAll();
        }
    });

    function isValidURL(url){
        var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;

        if(RegExp.test(url)){
            return true;
        }else{
            return false;
        }
    }
</script>
<input type="hidden" name="cur_image" id="cur_image" />
<div class="wrap" align="center">
    <div class="box" align="left">
        <input type="text" name="url" size="64" id="url" />&nbsp;&nbsp;
        <input type="button" name="attach" value="Attach" id="attach" />
        <div id="loader">
        <div align="center" id="load" style="display:none"><img src="load.gif" /></div>
        </div>
</div></div>

ループして別の異なるURLを同時にロードできるものはありますか? 私を助けてください!

4

1 に答える 1

1

スレッドを作成できない JavaScript で。
したがって、これらすべての「異なる URL を同時に」取得することはできません。

しかし、イベント ループを使用して、HTTP 応答を待たずに 1 つずつすばやく要求することで、「ほぼ」同じことを実現できます。誰が非常に速くなるのですか?

たとえば、3 つの URL を取得したいとします。

  • www.mysite.com/myurl1
  • www.mysite.com/myurl2
  • www.mysite.com/myurl3

jQuery を使用して、そのようなものを書くことができます。

$.get('http://www.mysite.com/myurl1', function(data) {
  alert('html for site 1:' +data);
});

$.get('http://www.mysite.com/myurl2', function(data) {
  alert('html for site 2:' +data);
});

$.get('http://www.mysite.com/myurl3', function(data) {
  alert('html for site 3:' +data);
});

「ほぼ」同時に 3 ページを要求します。最初の HTTP リクエストは「alert('html for site x:...');」を呼び出します。
しかし、魔女が最初に到着するかどうかはわかりません。

とにかく、おそらくもっと柔軟なものが必要です。
200 の同時リクエストを使用して、「ほぼ」同時に 50,000 ページをリクエストしたいとします。
JavaScript では次のように記述できます。

function getNextUrl(){

    urlIndex ++;

    if(urlIndex >= stopAtIndex){
        //nothing to do anymore in the event loop
        return;
    }

    $.get('http://www.mysite.com/myurl'+urlIndex, function(data) {
        // html receivend here
        getNextUrl();
    });

}

/* program start here */
int urlIndex = 0;
int stopAtIndex = 50000;
int simultaneousRequest = 200;

for( var i = 0; i < simultaneousRequest; i++ ) {
    getNextUrl();
}
于 2013-07-04T16:20:53.077 に答える