【问题标题】:Page load time with Cookie vs Session in PHPPHP 中 Cookie 与 Session 的页面加载时间
【发布时间】:2010-11-26 04:24:58
【问题描述】:

我有一个社交网络类型的网站(会员网站)我在用户登录时将大量用户数据(如用户名、用户 ID 号、电子邮件、名字、照片 URL)存储到用户会话中以减少数量每页的数据库查询数。我有时会听到人们谈论在某些事情上使用 cookie,我意识到永远不应该将 cookie 用于用户名/密码,但主要问题是,cookie 会减慢页面加载时间吗?在用户的主页上,我有用户可以拖放以重新排列主页的块,我的第一个版本将块的位置存储在 cookie 中,我现在将此值存储在 mysql 中并构建块的位置在页面加载的 php 中,而不是使用 javascript 来设置初始位置。当我第一次使用 cookie 来设置位置时,尽管页面会加载并且块会在原始位置,然后页面会非常快速地从它从 cookie 中获得的值更改这些块的位置,但这很多速度较慢,并使页面加载速度看起来很慢。从那时起,我一直认为 cookie 很慢,但也许不是 cookie 让它变慢了。

那么 cookie 会减慢页面速度吗?

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    cookie 只是一个带有键/值对的额外 HTTP 标头。解析该标头并填充 $_COOKIE 数组不会增加显着的开销(它几乎肯定不会成为瓶颈)。

    如果您在 cookie 中存储了大量数据(即,不仅仅是会话 id),那么值得记住的是,这些数据会随着每个请求发送到您的域而发送,不仅针对 PHP 页面,还针对图像, CSS、JS 等。因此,在高流量站点中,您可能会安排这些“静态”元素从不同的域提供,以减少这种开销的影响。

    如果该 cookie 值是会话标识符,则 PHP 需要从文件系统、数据库或其他存储机制中检索该会话以填充 $_SESSION 数组。这可能需要一点时间,但这实际上取决于所使用的机制。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您是说您的页面在以下情况下运行缓慢:

      • 块的位置存储在 cookie 中
      • 并且块在页面加载时定位在 Javascript 中

      我认为“慢”部分不是来自 cookie:

      • 与页面大小相比,它们非常小
        • 是的,它增加了一些开销,但对于单个页面来说并不那么重要
        • 如果您有大量资产(图像、静态文件等),则变得更加重要,因为它们是随每个请求一起发送的
      • 它们不包含太多数据


      但是,使用该解决方案,可能会造成缓慢的印象是:

      • 页面在其默认位置加载了块
      • 执行一些 JS 代码来重新定位块
        • 这意味着在重新定位块之前稍等片刻
        • 执行 JS 代码需要一些处理时间
        • 这也意味着,对于浏览器来说,多次重新绘制页面(每次发生变化时)。


      恕我直言,现在让您的页面“更快”的是客户端接收到的整个页面的块已经定位良好——这意味着页面加载时根本没有处理:-)

      较小/不存在的 cookie 可能会产生很小的影响......但很小。


      如果您想了解更多关于 cookie 大小及其对加载时间的影响以及一些建议,您可以阅读来自 Yahoo 的这篇文章:Performance Research, Part 3: When the Cookie Crumbles;读起来很有趣,而且不难理解。

      【讨论】:

        【解决方案3】:

        Cookie 会稍微增加您网页的加载时间,因为每次请求都必须发送 Cookie 数据。

        对于 HTML 页面,这不会有太大的不同,但如果您将所有资产都放在同一个域中(通常情况下),则可能会产生显着差异。

        实际上在 PHP 中读取 cookie 不会花费太多时间。

        【讨论】:

        • 子域算作同一个域吗?我打算在 images.domain.com 上放置图像和内容
        • 如果你的主网站是 example.com 是的,如果你的主网站是 example.com 那么不是(虽然我相信如果你愿意,你可以在子域之间共享 cookie)
        • 第二个域是指 www.example.com 吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        相关资源
        最近更新 更多