通过 Javascript/PHP 更快地阅读 RSS
Faster way to read RSS through Javascript/PHP
今天又给大家带来了一个有趣的。
我有工作代码,可以从各种 RSS 提要中提取信息,并根据其中的最新发布日期对它们进行排序。
我遇到的问题是速度很慢。它会减慢网站的加载速度。不仅如此,因为它全部托管在服务器端,如果多人同时访问该站点,它会减慢响应速度。
所以,我想将其转换为 JavaScript 函数,然后将标签的 innerHTML 填充到从数据库中拉回的内容或我希望任何人建议的其他选项(如果它更快)。
没有进一步的告别:代码:
PHP
function RSSFeeder() {
$client = buildCon();
//Query removed, simply gets the RSS URL from the database
$query = "";
$result = $client ->run($query);
$RSSList = array();
foreach($result ->getRecords() as $record)
{
$ComicArray = array();
$ComicName = $record ->value('Name');
$RSS = $record ->value('RSS');
$URL = $record ->value('URL');
$content = file_get_contents($RSS);
$x = new SimpleXmlElement($content);
for ($i = 0; $i < 1; $i++) {
$profile = $x ->channel ->item[$i];
$pubDate = $profile ->{ "pubDate"};
}
$ComicArray['URL'] = $URL;
$ComicArray['Comic'] = $ComicName;
$ComicArray['pubDate'] = $pubDate;
$RSSList[] = $ComicArray;
}
#usort($RSSList, "sortFunction");
usort($RSSList, "compareRSSTimes");
return $RSSList;
}
最后,你可能看到了 usort 方法,所以这里是:
function compareRSSTimes($a, $b) {
$a = strtotime($a['pubDate']);
$b = strtotime($b['pubDate']);
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
从那里,数组被发送回 PHP 脚本,该脚本根据更新的时间顺序构建输出。它工作正常。加载页面只需要一点时间,我担心我的 terribad 服务器的可持续性 if/when 更多用户访问该页面。
建议?
您可以经常这样做,而不是每次都这样做。如果不能使用数据库,使用仅将 'heavy bits' 包装在缓存文件存储中的老式方法可以非常快速地工作。
一个例子:
function RSSFeeder() {
$cachefile = '/path/to/RSSList.json';// <- must be local server path, not a URL
if (filemtime($cachefile) < strtotime('now -1 minute')) {
// if stale, rebuild it
// .. do your normal building of the $RSSList here ..
file_put_contents($cachefile,json_encode($RSSList));
return $RSSList;
} else {
// else output cache
return json_decode(file_get_contents($cachefile),true);
}
}
它可能更优雅...或者使用一个臃肿的顶级全功能库来做同样的事情。
但这行得通,是自我修复的,只在需要时更新,不需要 cron 作业,而且比打开数据库连接、查询数据库和输出存储的数据快一点点。 .但不够大。所以你的偏好在那里更重要。
今天又给大家带来了一个有趣的。
我有工作代码,可以从各种 RSS 提要中提取信息,并根据其中的最新发布日期对它们进行排序。
我遇到的问题是速度很慢。它会减慢网站的加载速度。不仅如此,因为它全部托管在服务器端,如果多人同时访问该站点,它会减慢响应速度。
所以,我想将其转换为 JavaScript 函数,然后将标签的 innerHTML 填充到从数据库中拉回的内容或我希望任何人建议的其他选项(如果它更快)。
没有进一步的告别:代码:
PHP
function RSSFeeder() {
$client = buildCon();
//Query removed, simply gets the RSS URL from the database
$query = "";
$result = $client ->run($query);
$RSSList = array();
foreach($result ->getRecords() as $record)
{
$ComicArray = array();
$ComicName = $record ->value('Name');
$RSS = $record ->value('RSS');
$URL = $record ->value('URL');
$content = file_get_contents($RSS);
$x = new SimpleXmlElement($content);
for ($i = 0; $i < 1; $i++) {
$profile = $x ->channel ->item[$i];
$pubDate = $profile ->{ "pubDate"};
}
$ComicArray['URL'] = $URL;
$ComicArray['Comic'] = $ComicName;
$ComicArray['pubDate'] = $pubDate;
$RSSList[] = $ComicArray;
}
#usort($RSSList, "sortFunction");
usort($RSSList, "compareRSSTimes");
return $RSSList;
}
最后,你可能看到了 usort 方法,所以这里是:
function compareRSSTimes($a, $b) {
$a = strtotime($a['pubDate']);
$b = strtotime($b['pubDate']);
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
从那里,数组被发送回 PHP 脚本,该脚本根据更新的时间顺序构建输出。它工作正常。加载页面只需要一点时间,我担心我的 terribad 服务器的可持续性 if/when 更多用户访问该页面。
建议?
您可以经常这样做,而不是每次都这样做。如果不能使用数据库,使用仅将 'heavy bits' 包装在缓存文件存储中的老式方法可以非常快速地工作。
一个例子:
function RSSFeeder() {
$cachefile = '/path/to/RSSList.json';// <- must be local server path, not a URL
if (filemtime($cachefile) < strtotime('now -1 minute')) {
// if stale, rebuild it
// .. do your normal building of the $RSSList here ..
file_put_contents($cachefile,json_encode($RSSList));
return $RSSList;
} else {
// else output cache
return json_decode(file_get_contents($cachefile),true);
}
}
它可能更优雅...或者使用一个臃肿的顶级全功能库来做同样的事情。
但这行得通,是自我修复的,只在需要时更新,不需要 cron 作业,而且比打开数据库连接、查询数据库和输出存储的数据快一点点。 .但不够大。所以你的偏好在那里更重要。