From dda0fb438c40f2a5f63190be1c2062f3c4bda2d7 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Fri, 15 Feb 2019 00:57:46 -0500 Subject: [PATCH 1/3] Speed up docker build times and decrease image size --- contrib/docker/Dockerfile.fpm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/docker/Dockerfile.fpm b/contrib/docker/Dockerfile.fpm index 93676b10e..fc7524429 100644 --- a/contrib/docker/Dockerfile.fpm +++ b/contrib/docker/Dockerfile.fpm @@ -32,7 +32,7 @@ COPY . /var/www/ WORKDIR /var/www/ RUN cp -r storage storage.skel \ && cp contrib/docker/php.ini /usr/local/etc/php/conf.d/pixelfed.ini \ - && composer install --prefer-source --no-interaction \ + && composer install --prefer-dist --no-interaction \ && rm -rf html && ln -s public html VOLUME ["/var/www/storage", "/var/www/public.ext"] From a891bbcc9ae0ff3720885aa1165ac1381202d735 Mon Sep 17 00:00:00 2001 From: leuc Date: Fri, 15 Feb 2019 06:30:06 +0100 Subject: [PATCH 2/3] cache StatusTransform and invalidate on like, comment and share --- app/Http/Controllers/CommentController.php | 3 ++ app/Http/Controllers/LikeController.php | 2 + app/Http/Controllers/StatusController.php | 2 + app/Transformer/Api/StatusTransformer.php | 55 ++++++++++++---------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index ab3953848..e42c2d0ed 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Auth; +use Cache; use App\Comment; use App\Jobs\CommentPipeline\CommentPipeline; @@ -50,6 +51,8 @@ class CommentController extends Controller $profile = $user->profile; $status = Status::findOrFail($statusId); + Cache::forget('transform:status:'.$status->url()); + $reply = new Status(); $reply->profile_id = $profile->id; $reply->caption = e($comment); diff --git a/app/Http/Controllers/LikeController.php b/app/Http/Controllers/LikeController.php index 28fc590ef..ecb6b29d6 100644 --- a/app/Http/Controllers/LikeController.php +++ b/app/Http/Controllers/LikeController.php @@ -26,6 +26,8 @@ class LikeController extends Controller $profile = Auth::user()->profile; $status = Status::withCount('likes')->findOrFail($request->input('item')); + Cache::forget('transform:status:'.$status->url()); + $count = $status->likes_count; if ($status->likes()->whereProfileId($profile->id)->count() !== 0) { diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 7c0d34722..e18081969 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -218,6 +218,8 @@ class StatusController extends Controller $profile = Auth::user()->profile; $status = Status::withCount('shares')->findOrFail($request->input('item')); + Cache::forget('transform:status:'.$status->url()); + $count = $status->shares_count; $exists = Status::whereProfileId(Auth::user()->profile->id) diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index dfacd34d4..58ac69a99 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -4,6 +4,7 @@ namespace App\Transformer\Api; use App\Status; use League\Fractal; +use Cache; class StatusTransformer extends Fractal\TransformerAbstract { @@ -16,33 +17,35 @@ class StatusTransformer extends Fractal\TransformerAbstract public function transform(Status $status) { - return [ - 'id' => (string) $status->id, - 'uri' => $status->url(), - 'url' => $status->url(), - 'in_reply_to_id' => $status->in_reply_to_id, - 'in_reply_to_account_id' => $status->in_reply_to_profile_id, - 'reblog' => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null, - 'content' => $status->rendered ?? $status->caption, - 'created_at' => $status->created_at->format('c'), - 'emojis' => [], - 'reblogs_count' => $status->shares()->count(), - 'favourites_count' => $status->likes()->count(), - 'reblogged' => $status->shared(), - 'favourited' => $status->liked(), - 'muted' => null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary, - 'visibility' => $status->visibility, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'language' => null, - 'pinned' => null, + return Cache::remember('transform:status:'. $status->url(), 3, function() use($status) { + return [ + 'id' => (string) $status->id, + 'uri' => $status->url(), + 'url' => $status->url(), + 'in_reply_to_id' => $status->in_reply_to_id, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id, + 'reblog' => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null, + 'content' => $status->rendered ?? $status->caption, + 'created_at' => $status->created_at->format('c'), + 'emojis' => [], + 'reblogs_count' => $status->shares()->count(), + 'favourites_count' => $status->likes()->count(), + 'reblogged' => $status->shared(), + 'favourited' => $status->liked(), + 'muted' => null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary, + 'visibility' => $status->visibility, + 'application' => [ + 'name' => 'web', + 'website' => null + ], + 'language' => null, + 'pinned' => null, - 'pf_type' => $status->type ?? $status->setType(), - ]; + 'pf_type' => $status->type ?? $status->setType(), + ]; + }); } public function includeAccount(Status $status) From fd4eeb76218f0ab334eb2a281642f9c3284df786 Mon Sep 17 00:00:00 2001 From: leuc Date: Fri, 15 Feb 2019 21:15:02 +0100 Subject: [PATCH 3/3] Use an hour as default cache time for status transform, to avoid stale cache objects --- app/Transformer/Api/StatusTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index 58ac69a99..3710aa1ff 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -17,7 +17,7 @@ class StatusTransformer extends Fractal\TransformerAbstract public function transform(Status $status) { - return Cache::remember('transform:status:'. $status->url(), 3, function() use($status) { + return Cache::remember('transform:status:'. $status->url(), 60, function() use($status) { return [ 'id' => (string) $status->id, 'uri' => $status->url(),