If you haven’t heard about Octane, it’s a Laravel library that supercharges your application’s performance by booting your application once, keeping it in memory, and then feeding it requests at supersonic speeds.
Now, when combining Octane with Vapor’s on-demand auto-scaling, you get blazing-fast load times at any scale. Let’s take a look at some numbers using a Vapor project on the Amazon’s `us-west-1` region. This Vapor application is configured with 1024 MB of RAM and an RDS MySQL instance (db.t2.micro) with 1 VCPU and 1Gib RAM.
First, let’s take a look at an API endpoint that gets a user from the database. Using Octane, this endpoint is **88% faster and uses 44% less memory:**
“`
# Before Vapor’s Octane integration
Request Duration: 39.40 ms, Memory Used: 169 MB
Request Duration: 40.20 ms, Memory Used: 169 MB
Request Duration: 37.71 ms, Memory Used: 169 MB
Request Duration: 42.16 ms, Memory Used: 169 MB
Request Duration: 40.60 ms, Memory Used: 169 MB
Request Duration: 45.75 ms, Memory Used: 169 MB
# After Vapor’s Octane integration
Request Duration: 6.78 ms, Memory Used: 112 MB
Request Duration: 6.64 ms, Memory Used: 112 MB
Request Duration: 6.67 ms, Memory Used: 112 MB
Request Duration: 6.38 ms, Memory Used: 112 MB
Request Duration: 6.75 ms, Memory Used: 112 MB
Request Duration: 6.47 ms, Memory Used: 112 MB
“`
Next, let’s take a look at a “login” route which renders a static template. Using Octane, this endpoint is **60% faster and uses 35% less memory:**
“`
# Before Vapor’s Octane integration
Request Duration: 11.32 ms, Memory Used: 165 MB
Request Duration: 11.35 ms, Memory Used: 165 MB
Request Duration: 11.29 ms, Memory Used: 165 MB
Request Duration: 11.29 ms, Memory Used: 165 MB
Request Duration: 11.36 ms, Memory Used: 165 MB
Request Duration: 11.43 ms, Memory Used: 165 MB
# After Vapor’s Octane integration
Request Duration: 4.89 ms, Memory Used: 108 MB
Request Duration: 4.89 ms, Memory Used: 108 MB
Request Duration: 4.83 ms, Memory Used: 108 MB
Request Duration: 4.66 ms, Memory Used: 108 MB
Request Duration: 4.79 ms, Memory Used: 108 MB
Request Duration: 4.91 ms, Memory Used: 108 MB
“`
As you can see, using Octane decreases both request duration and memory usage. And, of course, because AWS applies 1ms billing granularity on Lambda, you will pay less for your HTTP function.
## How to get started
First, ensure you are using latest version of Laravel, Vapor Core, and Vapor CLI:
– Laravel Framework: ^8.62.0
– Vapor Cli: ^1.26.0
– Vapor Core: ^2.14.0
Next, install Octane in your Vapor project. Octane may be installed via the Composer package manager:
“`bash
composer require laravel/octane
“`
After installing Octane, you may execute the `octane:install` Artisan command, which will install Octane’s configuration file into your application:
“`
php artisan octane:install
“`
Next, if you haven’t tried Octane before in your application, you may want to test it locally. Of course, don’t forget to review important [Octane documentation](https://laravel.com/docs/8.x/octane) topics such as [dependency injection](https://laravel.com/docs/8.x/octane#dependency-injection-and-octane) and [managing memory leaks](https://laravel.com/docs/8.x/octane#managing-memory-leaks).
Finally, you may instruct Vapor to use Octane by setting the `octane` configuration option within your application’s `vapor.yml` file:
“`yaml
id: 1
name: my-application
environments:
staging:
memory: 1024
runtime: ‘php-8.0:al2’
octane: true
“`
In addition, if your project uses a database, you may use the `octane-database-session-persist` and `octane-database-session-ttl` options to instruct Octane that database connections should be reused between requests:
“`yaml
database: my-database
octane: true
octane-database-session-persist: true
octane-database-session-ttl: 10
“`
– The `octane-database-session-persist` option indicates that database connections should persist between requests. The main purpose of this option is to reduce the overhead involved on creating a database connection on each request.
– The `octane-database-session-ttl` option allows specifying the time (in seconds) the Lambda container should stay connected to the database when the Lambda container is not being used.
**We recommended that you specify an `octane-database-session-ttl` value**; otherwise, the Lambda container will stay connected to your database until the Lambda container gets destroyed. This may take several minutes and may result in your database becoming overwhelmed with active connections.
Please review [Vapor’s Octane integration documentation](https://docs.vapor.build/1.0/projects/environments.html#octane) for more details.
## Conclusion
Also, we would like to thanks [Aaron Francis](https://twitter.com/aarondfrancis), for the proposal and [initial exploration](https://github.com/laravel/octane/issues/340) on having Octane on Vapor. We care and study every proposal made by the community.
We hope you enjoy this new feature. At Laravel, we’re committed to providing you with the most robust and developer-friendly PHP experience in the world. If you haven’t checked out Vapor, now is a great time to start! You can create your account today at: **[vapor.laravel.com](https://vapor.laravel.com/)**.
The post Vapor: Octane Support Is Now Available appeared first on Phpblogs.