如今,如果您要与全球受众打交道,即使是几分钟也无法离线,因为这会让您的竞争对手有机会证明他们领先于您。
如果您正在进行网络开发,缓存是一个重要因素。它确实有助于减轻 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中文網其他相關文章!