我什么时候应该创建不同尺寸的替代图像?

Currently when I upload an image on my website, I create 3 alternative images with different dimensions in my uploadImage(); function. I've been wondering if it is possible to create the images on demand only.

For example, only create 500px width version only when a user visits the route that actually requires this image. This way I wouldn't have to save all 4 images during the upload ( which I assume slows it down ) and I wouldn't have to save an image which might never be requested.

public function uploadImage(Request $request){
        $this->validate($request, [
            'name' => 'required|max:120',
            'description' => 'max:120|nullable',
            'image' => 'required'
        ]);

        $name = $request['name'];
        $description = $request['description'];
        $tag = $request['tags'];
        $userId = auth()->user()->id;
        $file = $request->file('image')->getClientOriginalName();
        $fileName = pathinfo($file, PATHINFO_FILENAME);
        $extension = $request->file('image')->getClientOriginalExtension();
        $fileNameToStore = $fileName.'_'.time().'.'.$extension;
        $fileNameToStore = str_replace(' ', '', $fileNameToStore);

        $request->file('image')->storeAs('public/uploads/images/',$fileNameToStore);
        $request->file('image')->storeAs('public/uploads/images/thumbnails/',$fileNameToStore);
        $request->file('image')->storeAs('public/uploads/images/specificImages/',$fileNameToStore);
        $request->file('image')->storeAs('public/uploads/images/miniImages/',$fileNameToStore);

        $thumbnail = InterventionImage::make('storage/uploads/images/thumbnails/'.$fileNameToStore )->resize(500, null, function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        });

        $thumbnail->save();

        $specificImage = InterventionImage::make('storage/uploads/images/specificImages/'.$fileNameToStore )->resize(1240, null, function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        });

        $specificImage->save();

        $miniImage = InterventionImage::make('storage/uploads/images/miniImages/'.$fileNameToStore )->fit(200, 200, function ($constraint) {
            $constraint->upsize();
        });

        $miniImage->save();

        $image = new Image();
        $image->name = $name;
        $image->description = $description;
        $image->user_id = $userId;
        $image->file_name = $fileNameToStore;

        $image->save();
        $image->tags()->attach($tag);

        return redirect()->route('home');
    }

My View that displays 500px image:

@extends('layouts.app')
@section('content')
<div class="specificStickyContainer">
    <h1 class='specificImageTitle'>{{$image->name}} by <a href='{{url("profile/".$author->username )}}'>{{$author->username}}</a></h1>
    <img class='specific-image' src='{{url("storage/uploads/images/specificImages/".$image->file_name)}}' alt='Random image' />
    @if(Auth::user())
        @if(Auth::id() === $image->user_id || Auth::user()->hasRole('Admin'))
        <div class='deleteButton'></div>
        <a class='deleteA' href='{{ route('deleteImage', ['image_id' => $image->id]) }}'>X</a>
        @endif
    @endif
</div>
@endsection