【问题标题】:Upsides and downsides to repeated image path fetching from DB vs from session从数据库与会话中重复获取图像路径的优缺点
【发布时间】:2015-02-21 11:45:56
【问题描述】:

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

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

像这样直接从 MySQL 获取它们有什么好处和坏处:

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

对性能有影响吗?我看到很多程序员选择从会话中显示用户名来迎接登录的用户,而不是从数据库中获取它。

【问题讨论】:

  • 你把你的图片存入数据库了吗?
  • "/> php } ?>
  • @OnlyMAJ no 我把文件放在文件夹中
  • 直接使用那个文件路径
  • 从会话中获取最好每次都获取。

标签: php html mysql session


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    如果您不需要数据库中的任何内容,至少来自此用户,您应该将所有内容存储在 Session 中。

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

    这取决于用例及其相关成本。尝试一些基准测试。

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

    我也会有这样的东西:

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

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2012-07-06
      • 2020-05-11
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多