通过 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 作业,而且比打开数据库连接、查询数据库和输出存储的数据快一点点。 .但不够大。所以你的偏好在那里更重要。