如今,如果您要与全球受众打交道,即使是几分钟也无法离线,因为这会让您的竞争对手有机会证明他们领先于您。
如果您正在进行网络开发,缓存是一个重要因素。它确实有助于减轻 Web 服务器同时处理数千个(甚至数百万个)请求所需的繁重工作。现在有很多可用选项可以提高您的 Web 应用程序的性能,但缓存的基本概念保持不变。
您只需构建一个包含几个页面的静态 HTML 网站即可完成的日子已经一去不复返了。在这种情况下,您不必担心网站上产生的并发请求和大量流量,因为与需要大量服务器资源来构建的动态网页相比,发送这些静态 HTML 页面要快得多他们自己。
典型的动态页面有很多功能,从查询数据库到从第三方服务提供商获取数据。显示包含大量不同格式信息的页面需要大量工作。具体来说,随着流量的增加,您无法查询数据库来为每个请求获取相同的复杂信息。它很快就会使您的服务器资源紧张,在您可以执行某些操作之前它们就会消失!
因此,您需要介于两者之间的东西来加快速度,这就是缓存的用武之地。缓存的想法非常简单——您将计算/格式化的结果存储在某处,并在需要时获取它们,这样您就不必再次执行此操作。这个“某个地方”可以是任何地方:文件系统、内存或数据库本身。
此外,还有很多可用于缓存的选项——memcached、Redis、Varnish 等等。您可以根据需要使用这些组件,有时多个组件的组合也有助于成倍提高性能。
由于需要一个完整的系列来解释缓存的来龙去脉,而且这超出了本文的范围,因此我们将回到 OpenCart 上下文并在下一节中继续。
我们将使用最新版本的 OpenCart,因此请确保您已安装该版本以遵循代码。
缓存库是在核心本身中提供的,所以让我们立即探索它。继续并在您喜欢的文本编辑器中打开 system/library/cache.php
文件。
<?php class Cache { private $cache; public function __construct($driver, $expire = 3600) { $class = 'Cache\\' . $driver; if (class_exists($class)) { $this->cache = new $class($expire); } else { exit('Error: Could not load cache driver ' . $driver . ' cache!'); } } public function get($key) { return $this->cache->get($key); } public function set($key, $value) { return $this->cache->set($key, $value); } public function delete($key) { return $this->cache->delete($key); } }
从构造函数开始,它初始化构造函数参数中传递的缓存驱动程序。如果该类可用于请求的缓存适配器,它将被初始化为 $this->cache
属性,否则它将退出并显示错误消息。我们将在下一节中看到不同的缓存适配器。
此外,还有三个包装函数用于执行与缓存相关的所有操作。
get
方法用于从缓存中检索值。
$this->cache->get($key);
set
方法用于将值存储在缓存中。
$this->cache->set($key, $value);
delete
方法用于从缓存中删除键/值映射。
$this->cache->delete($key);
因此,在模块中使用缓存功能也非常简单。
前端有很多地方从缓存存储中获取数据。让我们列出其中一些:
对于文件缓存,您会发现所有缓存文件都存储在 system/cache
目录下。尽管 OpenCart 会在适当的事件时清除缓存,但您也可以手动清除这些文件以获取最新数据。
就缓存包装而言,这就是它。在下一节中,我们将看到核心中可用的不同缓存适配器以及它们完成的实际繁重工作。
OpenCart 的核心提供了三种缓存适配器:file、memcache 和 apc。 OpenCart 中使用的默认缓存适配器是 file。
这是来自 index.php
的代码片段,它使用默认缓存适配器初始化 $cache
对象。
// Cache $cache = new Cache('file'); $registry->set('cache', $cache);
不幸的是,没有可配置的方法允许您切换缓存适配器,因为它是硬编码的。话虽如此,您可以使用 OCMOD 更改默认缓存适配器,而无需更改核心文件。
由于每个缓存适配器的实现几乎相同,因此我们仅查看其中一个缓存适配器以了解发生了什么情况。我们以内存缓存为例。继续打开 system/library/cache/mem.php
。您还可以探索同一目录中的其他两个适配器 file.php
和 apc.php
。
<?php namespace Cache; class Mem { private $expire; private $cache; public function __construct($expire) { $this->expire = $expire; $this->cache = new \Memcache(); $this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT); } public function get($key) { return $this->cache->get(CACHE_PREFIX . $key); } public function set($key,$value) { return $this->cache->set(CACHE_PREFIX . $key, $value, MEMCACHE_COMPRESSED, $this->expire); } public function delete($key) { $this->cache->delete(CACHE_PREFIX . $key); } }
每个缓存适配器都在“Cache”命名空间下定义,以避免冲突。
回想一下我们在上一节中讨论过的那些方法——它们实际上就在这里结束。因此,当您在 Cache
类中调用 get
方法时,它实际上调用了实际适配器类中定义的 get
方法(在我们的示例中)这是 Mem
类。
操作缓存条目的实际逻辑发生在适配器类方法中。如您所见,在 Mem
类的构造函数中,我们初始化了 Memcache 对象,并使用 pconnect
方法建立了连接。最后,我们使用 Memcache 对象的 get、set 和 delete 方法来操作缓存条目。
另一方面,如果您查看文件缓存处理程序实现,您会发现使用文件系统函数存储和检索缓存条目需要花费一些精力。除此之外,实现上没有任何区别。
这就是 OpenCart 中涉及的缓存适配器。当然,如果需要,您可以继续创建自己的自定义缓存处理程序。您只需实现所需的方法即可完成。
今天就这样。我希望您喜欢本教程,并且它会鼓励您根据需要在自定义模块中使用缓存。
今天,我们讨论了 OpenCart 中的缓存。我们从缓存的基础知识开始,然后继续探索如何在前端使用缓存。最后,我们了解了 OpenCart 中可用的不同缓存适配器。
请随意使用下面的提要以查询和建议的形式表达您的想法。
以上是掌握 OpenCart 中的缓存艺术的详细内容。更多信息请关注PHP中文网其他相关文章!