【问题标题】:Which one is faster php File based caching or Opcache哪个是更快的 php 基于文件的缓存或 Opcache
【发布时间】:2015-08-03 07:10:38
【问题描述】:

我最近刚刚在 php 中获得了关于 Opcache 的更新,我对 Codeigniter 中基于文件的缓存不太熟悉。

但我认为目前基于文件的缓存比其他缓存技术更快,因为不会有任何数据库访问,它直接连接到生成的 html 文件进行加载。所以它应该比其他技术快。

所以我在 Google 和一些 websites compared 中搜索了缓存速度,通过对其进行基准测试,他们提到与其他缓存技术 memcache 和 Opcache php 相比,文件缓存的检索速度很慢,我对报告感到困惑。

我知道每种缓存技术都有自己的优缺点。就这种情况向我提出建议,这样我的页面就不需要实时数据,目前我正在使用基于文件的缓存。那么是用 Opcache 还是 Memache 好吗?

【问题讨论】:

  • PHP 是一种解释型语言,而不是一种编译型语言,换句话说,当 PHP 尝试使用您的某个文件时,它首先会读取它并将其转换(也称为编译)成类似于机器代码的东西然后它可以运行。每次请求都会发生这种情况。 opcache 所做的是将此机器代码存储在缓存中,以便 PHP 可以立即使用它,而不是读取和解析您的 PHP 文件。对于复杂的网站,由此带来的速度提升可能非常出色。
  • 如果您呈现的页面不需要实时/动态数据,那么从服务器的角度来看,您需要的是文件/页面缓存。设置过期标头,以便客户端从客户端的角度缓存它。
  • @Kevin - 在一个主要方面是错误的 - PHP 不是 一种解释型语言;它是一种编译语言……但它是 JIT(即时)编译的,这可能会让你感到困惑
  • @MarkBaker 不,没错stackoverflow.com/questions/1514676/… PHP 本身是编译的(用 C 写的),但是你写的代码是解释的
  • 好的,所以您是说 JIT 编译器与解释器是一样的……事实并非如此。当一个 PHP 文件被加载时,整个文件被编译成字节码(并且可选地缓存在 OpCache 中),类似于 Java.... 它不会被解释为一行一次以传统解释语言(如 BASIC)的方式......这会产生很大的不同

标签: php caching memcached opcache


【解决方案1】:

Opcache 和 Memcached 将数据存储在内存中。在绝大多数情况下,从内存中检索数据比从文件系统中检索数据要快。缺点?运行 Memcached 并使用 opcache 显然会耗尽服务器的一些内存。

【讨论】:

  • 所以你是说在 Opcache 中数据库结果也存储在内存中?并且没有更多时间执行数据库查询?
  • @Yadheendran - OpCache 存储纯脚本字节码,而不是任何类型的数据,因此数据库结果永远不会存储在 OpCache 中
【解决方案2】:

OPcache 通过将预编译的脚本字节码存储在共享内存中来提高 PHP 性能,从而消除 PHP 在每个请求上加载和解析脚本的需要。
基于文件的缓存 您正在谈论的是关于将您的变量缓存到文件中并在以后获取它。 (通常在获取数据的时间很慢时使用)
因此,您仍然可以使用基于文件的缓存来存储变量并使用 Opcache 来缓存脚本.但是,将数据缓存到内存会快得多。在这种情况下,试试 Memcached/Redis 或任何你能找到的东西。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2014-06-29
    • 2013-01-08
    • 1970-01-01
    • 2019-09-09
    • 2011-05-28
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多