【发布时间】: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