Есть ли более эффективный способ написать этот PHP / JQuery - PullRequest
0 голосов
/ 29 августа 2011

У меня есть этот PHP:

<?php

$data = file_get_contents('http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/rss.xml');

$xml = simplexml_load_string($data);

$data1 = file_get_contents('http://www.skysports.com/rss/0,20514,11661,00.xml');

$xml1 = simplexml_load_string($data1);

$master[0] = $xml;
$master[1] = $xml1;

echo json_encode($master);

?>

А это jQuery:

    var myRSS =[];

function rssReader() {

    console.log('ran');

    $.getJSON('bbc.php', function(data){
        console.log(data);
        $.each(data[0].channel.item, function(index, item){
            // check if item title is stored in the array   
            if (jQuery.inArray(item.title, myRSS) != -1) { 
                //do nothing
            } else {
                // save item title in the array
                myRSS.push(item.title);

                // publish item  
                $('.container').prepend("<a target='_BLANK' href='" + item.link + "' class='title' data-date='" + item.pubDate + "'>" + item.title + "</a>");
                $("title").text('EMG: ' + item.title);
                $('#loader').remove();
            }
        });

        $.each(data[1].channel.item, function(index, item){
            // check if item title is stored in the array   
            if (jQuery.inArray(item.title, myRSS) != -1) { 
                //do nothing
            } else {
                // save item title in the array
                myRSS.push(item.title);

                // publish item  
                $('.container').prepend("<a target='_BLANK' href='" + item.link + "' class='title' data-date='" + item.pubDate + "'>" + item.title + "</a>");
                $("title").text('EMG: ' + item.title);
            }
        });

    });

}

rssReader();

setInterval(rssReader, 10000);

Кажется, что много повторяющегося кода и, следовательно, не очень СУХОЕ программирование. Возвращенный JSON на самом деле имеет ту же структуру, от BBC и Sky Sports, поэтому должен быть более эффективный способ написания этого.

Спасибо

Ответы [ 3 ]

1 голос
/ 29 августа 2011

Просто чтобы сделать вещи чище, вы можете сделать что-то вроде этого:

var myRSS =[];

var handleData = function(index, item) {
    // check if item title is stored in the array   
    if (jQuery.inArray(item.title, myRSS) != -1) { 
        //do nothing
    } else {
        // save item title in the array
        myRSS.push(item.title);

        // publish item  
        $('.container').prepend("<a target='_BLANK' href='" + item.link + "' class='title' data-date='" + item.pubDate + "'>" + item.title + "</a>");
        $("title").text('EMG: ' + item.title);
        $('#loader').remove();
    }
}


function rssReader() {
    console.log('ran');

    $.getJSON('bbc.php', function(data){
        console.log(data);
        $.each(data[0].channel.item, handleData);
        $.each(data[1].channel.item, handleData);
    });

}

rssReader();

setInterval(rssReader, 10000);

Но в том, что касается эффективности, я не думаю, что все по-другому. Но это, по крайней мере, чище.

1 голос
/ 29 августа 2011

Вы можете сократить ваши jquery до этого (не проверял, может быть опечатка):

  var myRSS =[];

    function rssReader() {

        console.log('ran');

        $.getJSON('bbc.php', function(data){
            console.log(data);
            $.each(data[0].channel.item, function(index, item){
                linkhandler(item)
                if (jQuery.inArray(item.title, myRSS) == -1) { 
                    $('#loader').remove();
                }
            });

            $.each(data[1].channel.item, function(index, item){
               linkhandler(item)
            });

        });

    }
    function linkhandler(item)
    { // check if item title is stored in the array   
       if (jQuery.inArray(item.title, myRSS) == -1) { 
             // save item title in the array
             myRSS.push(item.title);
             $('.container').prepend("<a target='_BLANK' href='" + item.link + "' class='title' data-date='" + item.pubDate + "'>" + item.title + "</a>");
             $("title").text('EMG: ' + item.title);
       }
    }
    rssReader();

    setInterval(rssReader, 10000);
0 голосов
/ 29 августа 2011

Просто обратите внимание, чтобы знать, попробуйте и вносите меньше последовательных изменений в DOM.В некоторых из ответов это в любом случае минимально, так что не слишком большая проблема.Но каждое изменение в них приводит к большим накладным расходам по сравнению с созданием пустых объектов и массовым их добавлением или массовым изменением списков и т. П.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...