我正在开发一个使用connect/express和node.js的应用程序.它使用像这样的"静态"中间件:
var express = require("express");
var io = require("socket.io");
var app = express.createServer(
express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
var listener = io.listen(app);
var lobby = listener.of("/lobby");
lobby.on("connection", function (socket) {
// etc etc etc
});
Run Code Online (Sandbox Code Playgroud)
在内部./static,有一个文件夹,./static/mp3包含应用程序使用的88个音频文件.
虽然回访的访问者已经缓存了这些文件,但令他疯狂的是他们仍然发送了88个http请求,询问他们的缓存副本是否已过期. 如何仅为此文件夹强制执行Expires或max-age缓存?
在file_put_contents()析构函数中调用时,它会导致文件写入SERVER_ROOT...(Yikes!)解决方法?
tldr:
我想缓存一个数组,可能包含序列化的类实例.我想,现在,我会编写一个使用unserialize()/file_get_contents()和实现缓存的类,serialize()/file_put_contents()然后在更通用的Cache类后面隐藏它的功能.(我不知道我的客户主机是否有共享内存或PEAR等)
<?php
class CacheFile {
private $filename;
private $data;
private $dirty = false;
function __construct($filename) {
$this->filename = $filename;
$this->load();
}
function __destruct() {
// Calling file_put_contents within a destructor causes files to be written in SERVER_ROOT...
$this->flush();
}
private function load() {
if(!file_exists($this->filename)) {
$this->data = array();
}
else {
$this->data = unserialize(file_get_contents($this->filename));
// todo
}
$this->dirty = false;
}
private function persist() {
file_put_contents($this->filename, serialize($this->data));
$this->dirty = false; …Run Code Online (Sandbox Code Playgroud)