我正在使用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-1s到2.5-3s。
是否有一种方法可以使用,异步加载,或者是否应该使用更快的函数?
想到的一个想法是在初始页面加载后在iFrame中加载一个单独的页面,还是有更好的方法?
答案 0 :(得分:0)
是否有我可以使用的方法,异步加载,或者是 我应该使用更快的功能吗?
不幸的是,与长响应时间无关(通常假设连接速度不太古老)。同时回显结果可能会减慢浏览器渲染速度,从而降低页面加载时间。
AJAX非常适合 - 等待window.onload
并触发对您的Web服务的AJAX调用(保留问题的片段)以准备输出缓冲区并将响应返回给浏览器。然后使用innerHTML
设置/替换所选DOM元素的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);
}
}