SimpleXMLElement 性能低下

SimpleXMLElement slow performance

我正在使用SimpleXMLElement()从网站获取数据,用于嵌入数据。我使用的代码如下:

$rss = new SimpleXMLElement('http://eliteprospects.com/rss_player_stats2.php?player='.$player_array[0]['embed_stats'], null, true);
foreach($rss->xpath('channel/item') as $item)
{
     echo  utf8_decode($item->description);
}

这很好用,除了一个问题,从另一个站点加载数据的速度特别慢。页面加载时间从大约 0.5-1 秒变为 2.5-3 秒。

是否有我可以使用的异步加载方法,或者我应该使用更快的函数来代替?

想到的一个想法是在初始页面加载后在 iFrame 中加载一个单独的页面,或者有更好的方法吗?

Is there a method that I can use, to load the asynchronously, or is there a faster function I should be using instead?

不幸的是,与长响应时间无关(假设连接速度不是过时的)。同时回显所有结果可能会减慢浏览器渲染速度,从而减慢页面加载时间。

AJAX 很适合这里 - 等待 window.onload 并触发对您的网络服务的 AJAX 调用(保留问题中的片段)准备输出缓冲区和 return 对浏览器的响应。然后 set/replace 所选 DOM 元素的 innerHTML 值与 response.responseText.

伪代码

window.onload = function()
{
    var url = 'http://example.com/webserice';

    Ajax.get(url, function(response)
    {
        var responseText = response.responseText;

        document.getElementById('someid').innerHTML = responseText;
    }  
}

我在纯 JS 中使用的片段,尽管 jQuery has a lot more appealing way to do it

Ajax = { 

    request : {},

    createRequest : function()
    {
        var request = false;

        if (window.XMLHttpRequest)
        {
            request = new XMLHttpRequest();
        }
        else
        {
            if (window.ActiveXObject)
            {
                request = new ActiveXObject('MSXML2.XMLHTTP.3.0');
            }
            else
            {
                request = false;
            }
        }

        return request;
    },

    get : function(page, callback)
    {
        var self = this;
        var request = this.createRequest();

        if (! page)
        {
            return false;
        }

        request.onreadystatechange = function()
        {
            if (request.readyState == 4 && request.status == 200)
            {
                delete self.request;

                if (typeof callback == 'function')
                {
                    callback(request);
                }
                else
                {
                    self.update(request, callback);
                }

                var regex = /<script\b.*?>([\s\S]*?)<\/scri/ig;
                var match;
                while (match = regex.exec(request.responseText))
                {
                    eval(match[1]);
                }
            }
        }

        request.open('GET', page, true);
        request.setRequestHeader('X-Requested-With', 'ajax');
        request.send(null);
    }
}