aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-10-14 14:37:50 +0200
committerGravatar GitHub <noreply@github.com> 2018-10-14 14:37:50 +0200
commit5b030dcc6ff1393e29ecc6e5c76f129c7ad6c914 (patch)
tree6f067da3d9cc3c9691053ebae6c25750c79a4eb3
parent1f3953715892a3944895f80c4dce559b7e4e86d4 (diff)
Ensure fast flush of HTTP headers and HTML head (#2045)
* Ensure fast flush of HTTP headers and HTML head The fast flush optimisation done in https://github.com/FreshRSS/FreshRSS/pull/1133 does not seem to work anymore (need to check if it is related to a PHP version). Work-around when PHP flush() is not working Can be tested by adding a `sleep(5);` after: https://github.com/FreshRSS/FreshRSS/blob/ee902ee7c4370421802768c3105ba269a4f97b16/app/layout/layout.phtml#L27 Follow-up of the performance checks of https://github.com/FreshRSS/FreshRSS/pull/2040 * output_buffering in .user.ini for PHP CGI / FPM * Reuse .user.ini for Docker PHP config * Longer flush Flush a bit later, to be compatible with the default value of 4096 for PHP output_buffering, and thus avoid the need of tuning the value.
-rwxr-xr-xapp/Controllers/indexController.php26
-rw-r--r--app/layout/layout.phtml21
-rw-r--r--app/views/index/global.phtml5
-rw-r--r--app/views/index/normal.phtml5
-rw-r--r--app/views/index/reader.phtml5
5 files changed, 43 insertions, 19 deletions
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php
index 8b905c881..fa914ef87 100755
--- a/app/Controllers/indexController.php
+++ b/app/Controllers/indexController.php
@@ -32,7 +32,16 @@ class FreshRSS_index_Controller extends Minz_ActionController {
Minz_Error::error(404);
}
- $this->view->callbackBeforeContent = function ($view) {
+ $this->view->categories = FreshRSS_Context::$categories;
+
+ $this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title();
+ $title = FreshRSS_Context::$name;
+ if (FreshRSS_Context::$get_unread > 0) {
+ $title = '(' . FreshRSS_Context::$get_unread . ') ' . $title;
+ }
+ Minz_View::prependTitle($title . ' · ');
+
+ $this->view->callbackBeforeFeeds = function ($view) {
try {
$tagDAO = FreshRSS_Factory::createTagDao();
$view->tags = $tagDAO->listTags(true);
@@ -40,7 +49,13 @@ class FreshRSS_index_Controller extends Minz_ActionController {
foreach ($view->tags as $tag) {
$view->nbUnreadTags += $tag->nbUnread();
}
+ } catch (Exception $e) {
+ Minz_Log::notice($e->getMessage());
+ }
+ };
+ $this->view->callbackBeforeEntries = function ($view) {
+ try {
FreshRSS_Context::$number++; //+1 for pagination
$entries = FreshRSS_index_Controller::listEntriesByContext();
FreshRSS_Context::$number--;
@@ -67,15 +82,6 @@ class FreshRSS_index_Controller extends Minz_ActionController {
Minz_Log::notice($e->getMessage());
Minz_Error::error(404);
}
-
- $view->categories = FreshRSS_Context::$categories;
-
- $view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title();
- $title = FreshRSS_Context::$name;
- if (FreshRSS_Context::$get_unread > 0) {
- $title = '(' . FreshRSS_Context::$get_unread . ') ' . $title;
- }
- Minz_View::prependTitle($title . ' · ');
};
}
diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml
index b244639a4..2e16672e6 100644
--- a/app/layout/layout.phtml
+++ b/app/layout/layout.phtml
@@ -18,13 +18,7 @@
<meta name="msapplication-TileColor" content="#FFF" />
<?php if (!FreshRSS_Context::$system_conf->allow_referrer) { ?>
<meta name="referrer" content="never" />
-<?php
- }
- flush();
- if (isset($this->callbackBeforeContent)) {
- call_user_func($this->callbackBeforeContent, $this);
- }
-?>
+<?php } ?>
<?php echo self::headTitle(); ?>
<?php
$url_base = Minz_Request::currentRequest();
@@ -43,10 +37,19 @@
<?php } ?>
</head>
<body class="<?php echo Minz_Request::actionName(); ?>">
-<?php $this->partial('header'); ?>
+<?php
+ flush();
+ $this->partial('header');
+?>
<div id="global">
- <?php $this->render(); ?>
+ <?php
+ flush();
+ if (isset($this->callbackBeforeFeeds)) {
+ call_user_func($this->callbackBeforeFeeds, $this);
+ }
+ $this->render();
+ ?>
</div>
<?php
diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml
index 2f25b6dc2..3566abe7e 100644
--- a/app/views/index/global.phtml
+++ b/app/views/index/global.phtml
@@ -1,6 +1,11 @@
<?php
$this->partial('nav_menu');
+ flush();
+ if (isset($this->callbackBeforeEntries)) {
+ call_user_func($this->callbackBeforeEntries, $this);
+ }
+
$class = '';
if (FreshRSS_Context::$user_conf->hide_read_feeds &&
FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ) &&
diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml
index ac2ea812d..d5ae8e2f9 100644
--- a/app/views/index/normal.phtml
+++ b/app/views/index/normal.phtml
@@ -3,6 +3,11 @@
$this->partial('aside_feed');
$this->partial('nav_menu');
+flush();
+if (isset($this->callbackBeforeEntries)) {
+ call_user_func($this->callbackBeforeEntries, $this);
+}
+
if (!empty($this->entries)) {
$display_today = true;
$display_yesterday = true;
diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml
index a92767f1c..c15b936ee 100644
--- a/app/views/index/reader.phtml
+++ b/app/views/index/reader.phtml
@@ -1,6 +1,11 @@
<?php
$this->partial('nav_menu');
+flush();
+if (isset($this->callbackBeforeEntries)) {
+ call_user_func($this->callbackBeforeEntries, $this);
+}
+
if (!empty($this->entries)) {
$lazyload = FreshRSS_Context::$user_conf->lazyload;
$content_width = FreshRSS_Context::$user_conf->content_width;