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);
}
}
我正在使用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);
}
}