从DB和会话中获取重复图像路径的好处和缺点

时间:2014-12-23 10:33:46

标签: php html mysql session

Curretly我使用这样的会话显示个人资料图片:

<img src="<?php if (isset($_SESSION['userimage'])){
echo $_SESSION['userimage']; }?>" />

直接从MySQL中获取它们的好处和缺点是:

<img src="<?php echo $row['userimage'] ?>"/>

它有任何性能影响吗?我看到很多程序员选择从会话中显示用户名来问候用户登录而不是从数据库中提取用户。

2 个答案:

答案 0 :(得分:2)

我假设您在数据库中有一个文件路径到图像,并且还需要获取一次,以进入会话。

如果您不需要数据库中的任何内容,至少从此用户那里,您应该将所有内容存储在会话中。

如果你仍然需要连接到数据库,特别是从用户行获取数据,你应该采用第二种方法。

它取决于用例及其成本。尝试一下基准测试。

还要考虑一个好的缓存机制。它可以带来更多的优化,然后就在这里。

我也会这样:

function showUserImage($url = null) {
    if (!isset($url)) {
        $url = 'standarduserpic.png';
    }
    echo '<img src="' . $url . '">';
}

答案 1 :(得分:1)

如果在生成每个页面时从数据库中获取路径,则会增加数据库与应用程序之间的流量。如果数据库在另一台服务器上,则需要一些时间,甚至可能需要一些带宽。

如果只从DB中获取一次并将其存储在会话中,则此开销不存在。但是,如果路径改变(例如,当用户改变他/她的简档图像时),则必须刷新会话中的值。保持会话和数据库之间的一致性可能需要一些努力 - 当您更改路径时,您需要更新DB 会话变量(或者为没有'的用户创建新图像有一个)。请注意,您必须在更新或使用会话变量之前调用session_start()

我个人会选择只从DB中获取一次值并将其缓存在会话中。如果尚未加载,我会在session_start()之后立即从DB加载路径,这样我就不需要在生成HTML时测试正在设置的会话变量。

<?php
…
session_start();
if (!isset($_SESSION['userimage'])) {
    $_SESSION['userimage'] = loadUserImageFromDB();
}
…
?>
…
<img src="<?php echo $_SESSION['userimage'];?>"/>
…