不幸的是,我不知道 PHP 中有标准化的全局缓存机制。这篇文章说,第三方加速器 Optimizer Plus 从版本 5.5 开始被包含在核心 PHP 中。不确定您使用的是什么版本,但您可以尝试一下。
另一方面,您是否考虑过安德鲁指出的文件存储?我认为在这种情况下它结合起来$_SESSION
真的可以帮助你。让我给你一个例子,它可以与你现有的 JSON 数据一起工作:
服务器端
将 JSON 数据存储在.json
PHP 服务器上的文件中:
{
"data": "some data",
"data2": "more data",
"data3": [
...
],
etc.
}
注意:确保正确格式化您的 JSON 数据。请记住,所有字符串都必须用双引号引起来"
。
在 PHP 中,使用 if 语句来决定适当的操作:
error_reporting(E_ALL);
ini_set("display_errors", "On");
session_start();
if(isset($_SESSION['dataCache'])) {
echo json_encode($_SESSION['dataCache']);
} else {
$file = 'data.json';
if (!is_file($file) || !is_readable($file)) {
die("File not accessible.");
}
$contents = file_get_contents($file);
$_SESSION['dataCache'] = json_decode($contents, true);
echo $contents;
}
因此,让我们再深入研究一下上面的编码。简而言之,这就是我们正在做的事情:
- 打开错误报告并启动会话支持。
- 检查我们是否已经读取了该用户的文件。
- 如果是这样,请从存储中提取值并将其回显并退出。如果没有继续下面。
- 保存文件名并做一些错误检查以确保 PHP 可以找到、打开和读取文件的内容。
- 读取文件内容。
- 将解码的 json(由于传递给 `json_decode` 的 `true` 参数不是数组)保存到您的 `$_SESSION` 变量中。
- 将内容回显到屏幕上。
这将为您节省解析 JSON 数据和/或在服务器上手动构建它的时间和麻烦。它将为用户缓存,session
以便他们可以使用它。
客户端
我假设您正在使用ajax
来获取信息?如果不纠正我,但我假设这就是你的一些 JavaScript 发挥作用的地方。如果是这样你可以考虑这个:
从服务器返回时,将返回的数据存储在sessionStorage
用户的浏览器中:
$.ajax({
...
success: function (res) {
localStorage.setItem("dataCache", JSON.stringify(res));
},
...
});
或者,如果您使用承诺对象:
$.ajax({
...
}).done(function (res) {
localStorage.setItem("dataCache", JSON.stringify(res));
});
当你需要阅读它时,你可以做一个简单的测试:
var data;
// This returns null if the item is not in local storage.
// Since JavaScript is truthy falsy, it will be evaluated as false.
if(localStorage.getItem("dataCache")) {
data = JSON.parse(localStorage.getItem("dataCache"));
} else {
// Make ajax call, fetch object and store in localStorage in the success or done callbacks as described above
}
笔记:
localStorage
是 HTML5 中的一项新功能,因此尚未在所有浏览器上完全支持。然而,大多数主要的都这样做,甚至可以追溯到 IE8(我认为)。但是,对于这些浏览器每个站点需要容纳多少,没有标准化的大小限制。
考虑到这一点很重要。我可以保证您可能无法将整个 30,000 行字符串存储在 localStorage 中。但是,您可以以此为起点。结合服务器端解决方案,您应该会看到性能提升。
希望这可以帮助。