今天为大家带来了另一件有趣的事情。
我有工作代码,可以从各种 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 服务器的可持续性。
建议?
最佳答案
您可能可以经常这样做,而不是每次都这样做。如果无法使用数据库,则使用仅将“重要位”包装在缓存文件存储中的老式方法可以非常快速地工作。
一个例子:
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);
}
}
它可能会更优雅......或者使用一个臃肿的功能齐全的库来做同样的事情。
但是这有效,是 self 修复的,仅在需要时更新,不需要 cron 作业,并且比打开数据库连接、查询数据库和输出存储的数据快一点...但是不够大。所以你的偏好在那里更重要。
关于javascript - 通过 Javascript/PHP 更快地阅读 RSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47720467/