0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Inertia.jsでクソデカJSONを取り扱う際にレスポンスが遅なってた

Posted at

大きなデータを取り扱う際に
ControllerとInertia.jsの間でパフォーマンスに問題が発生していた。

データ量を削減することは極めて難しく、最適化を試みても転送サイズが742.55KBとなってしまいました。
データの分散取得と並列処理を検討したのですが、全てのデータが揃わないと作れない画面でしたので、
まずは、MiddlewareでJSONを圧縮することを考えました。

namespace App\Http\Middleware;

class CompressJsonResponse
{
    public function handle(
        Request $request,
        Closure $next
    ): mixed {
        $response = $next($request);

        $content = $response->getContent();
        if (!is_string($content)) {
            return $response;
        }

        $compressedContent = gzencode($content, 9);
        if (!is_string($compressedContent)) {
            return $response;
        }

        $response->setContent($compressedContent);
        $response->headers->add(['Content-Encoding' => 'gzip']);
        $response->headers->set('Content-Length', (string) strlen($compressedContent));

        return $response;
    }
}

Kernel

protected $middlewareGroups = [
    'compressed' => [
        \App\Http\Middleware\CompressJsonResponse::class,
    ],
];

クソデカJSONを生み出しているRouteにmiddlewareを適用して...

転送サイズ: 34.17KB

小さくなりました。

多段VPN接続をしているので回線速度が遅いのもあるのですが
8秒くらいかかっていたものが、1.6秒になりました。


CDN, Nginx

いつもありがとな!!!!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?