Tôi có một bản cài đặt phức tạp của Joomla 3.4.4 với jSeblod và nhiều phần mở rộng khác. Chúng tôi đang lên kế hoạch sử dụng Varnish4 trước máy chủ web và vì điều đó cần phải bật các tiêu đề Cache-Control thích hợp.
Nhưng tôi dường như không thể bật bộ nhớ đệm. Đây là những gì tôi đã thử:
1)
configuration.php
public $caching = '1';
public $cache_handler = 'file';
public $cachetime = '30';
2) Quản trị viên-> Tiện ích mở rộng-> Plugin-> Bộ đệm trang được bật
Trong plugin, Trình duyệt bộ đệm được bật
3) Với trình gỡ lỗi, trình gỡ lỗi dừng trong bất kỳ plugin nào tôi thử, nhưng không phải trong plugin bộ đệm
4) Trong Quản trị viên-> Tiện ích mở rộng-> Quản lý Tôi có thể tìm thấy plugin Cache được cài đặt
5) Trong Quản trị viên-> Tiện ích mở rộng-> Khám phá, hiện đã được tìm thấy.
6) Trên trang web trực tiếp của riêng tôi, tôi nhận được kết quả tương tự, tuy nhiên tiêu đề Cache là "Kiểm soát bộ đệm: không có bộ đệm" thay vì "Kiểm soát bộ đệm: không lưu trữ, không có bộ đệm, phải xác nhận lại, kiểm tra sau = 0, kiểm tra trước = 0 "
7) Tôi đã xây dựng một plugin bật bộ nhớ cache ngay trước khi Phản hồi được gửi:
class plgSystemGtnocachies extends JPlugin
{
function plgSystemGtnocachies( &$subject, $config )
{
parent::__construct( $subject, $config );
}
function __destruct()
{
if (!headers_sent())
{
$this->setCacheHeaders();
}
}
public function onAfterRender()
{
JApplicationWeb::allowCache( true );
$this->setCacheHeaders();
}
private function setCacheHeaders()
{
JApplicationWeb::setHeader( 'Cache-Control', 'public, max-age=10800', true );
JApplicationWeb::setHeader( 'Vary', 'Cookie', true );
JApplicationWeb::setHeader( 'Pragma', '', true );
}
}
Tuy nhiên, điều tôi tìm thấy là khi hàm gọi trở lại
class JEventDispatcher extends JObject
{
public function trigger($event, $args = array())
{
$result = array();
/*
* If no arguments were passed, we still need to pass an empty array to
* the call_user_func_array function.
*/
$args = (array) $args;
$event = strtolower($event);
// Check if any plugins are attached to the event.
if (!isset($this->_methods[$event]) || empty($this->_methods[$event]))
{
// No Plugins Associated To Event!
return $result;
}
// Loop through all plugins having a method matching our event
foreach ($this->_methods[$event] as $key)
{
// Check if the plugin is present.
if (!isset($this->_observers[$key]))
{
continue;
}
// Fire the event for an object based observer.
if (is_object($this->_observers[$key]))
{
$args['event'] = $event;
$value = $this->_observers[$key]->update($args);
------->
}
// Fire the event for a function based observer.
elseif (is_array($this->_observers[$key]))
{
$value = call_user_func_array($this->_observers[$key]['handler'], $args);
}
if (isset($value))
{
$result[] = $value;
}
}
return $result;
}
JApplicationWeb::getInstance->response->cacheable
lại sai.
Bất cứ ý tưởng những gì đang xảy ra ở đây?