In this tutorial we’re going to learn whate are the checklist for laravel for performance issues in this tutorial we’ll help to you improve performace to your website and software.
1. Use lazy collections
What is lazy collections ?
Lazy collections in Laravel allow you to work with large datasets more efficiently by loading items into memory on-demand. This can be particularly useful when dealing with a large number of records from a database. Lazy collections leverage PHP’s generators to load items only when needed, reducing memory consumption.
Why We need to do lazy collections ?
We need to use lazy collections in Laravel for the following reasons:
- To avoid running out of memory. Lazy collections do not load all of their items into memory at once, which can be useful for processing large amounts of data without running out of memory.
- To improve performance. Lazy collections can improve performance by only loading the items that are actually needed. This can be especially beneficial for operations that are CPU-intensive, such as filtering and sorting large datasets.
- To simplify code. Lazy collections can make code more concise and easier to read, especially when working with large datasets.
Example :-
public function index()
{
$numbers = LazyCollection::make(function () {
for($i = 1; $i<= 10; $i++){
yield $i;
}
});
Log::info("waht are coming in lazycollection".$numbers);
}
Output :-
2. Use Mass Assignments in laravel
What is Mass Assignments in laravel ?
Mass Assignment in Laravel refers to the ability to set multiple attributes of a model at once using an array. This is commonly used when you are creating or updating a model instance and want to assign values to several attributes in a single call.
Security thread of Mass Assignment in laravel ?
Laravel provides convenient methods for mass assignment, such as the create
method for creating new records and the update
method for updating existing records. These methods accept an array of attributes, and Laravel automatically takes care of setting the corresponding values in the database.
Example :-
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
It’s important to note that mass assignment can introduce security risks if not used carefully. Laravel provides ways to protect against mass assignment vulnerabilities, such as the $fillable
and $guarded
properties in the model, as well as validation before saving data. These mechanisms allow you to control which attributes can be mass-assigned and which cannot, helping to ensure the security of your application.
3. Use Asset Bundling
What is Asset Building ?
Asset bundling is a process of combining multiple CSS, JavaScript, and other asset files into a single file. This can improve the performance of your application by reducing the number of HTTP requests that need to be made.
Performance thread using of Asset Building ?
Laravel Mix simplifies the process of minifying and concatenating CSS and JavaScript files. Minification reduces the file size by removing unnecessary characters, while concatenation combines multiple files into a single file, reducing the number of HTTP requests.
Asset building in Laravel is a performance-intensive process. This is because it involves a number of steps, including:
- Parsing and transpiling resources: Vite uses the ESBuild transpiler to parse and transpile your JavaScript resources. This can be a slow process, especially for large and complex resources.
- Compiling CSS: Vite uses the PostCSS CSS preprocessor to compile your CSS resources. This can also be a slow process, especially for large and complex CSS files.
- Bundling resources: Vite bundles your resources into a single file using the Rollup bundler. This can also be a slow process, especially for large resource bundles.
- Optimizing resources: Vite optimizes your resources using a variety of techniques, such as image compression and minification. This can also be a slow process, especially for large resource bundles.
4. Use Pagination
What is Pagination ?
Using pagination is a technique that can help improve the performance of your Laravel application by breaking large data sets into smaller, more manageable chunks. This can help reduce the amount of data that needs to be loaded and processed at once. Additionally resulting in faster load times and a better user experience.
Here are some of the ways pagination can help improve performance in Laravel:
- Reduces the amount of data that needs to be loaded: When you paginate data, you are only loading a subset of the data at a time. This can significantly reduce the amount of memory and processing power required to load the data.
- Improves the performance of queries: When you paginate data, you are typically using a database query to retrieve the data. A well-written paginated query can be much faster than a query that retrieves all of the data at once.
- Reduces the load on your server: When you paginate data, you are reducing the amount of data that needs to be transferred between your server and the client. This can reduce the load on your server and improve the performance of your application.
Example :-
public function index()
{
$users = User::all();
$users = $users->paginate(10);
return view('users.index', compact('users'));
}
5. Queues
What is Queues?
Queues in Laravel are a way to defer the processing of tasks until later. This can be helpful for improving website performance because it allows you to offload long-running or resource-intensive tasks to a separate process. This frees up the main web server to handle new requests more quickly.
What are the benefits of using Queues in laravel ?
There are a number of benefits to using queues in Laravel, including:
- Improved performance: Queues can help to improve the performance of your website by offloading long-running or resource-intensive tasks to a separate process. This frees up the main web server to handle new requests more quickly.
- Increased scalability: Queues can help to increase the scalability of your website by allowing you to process more tasks simultaneously. This can be helpful for websites that experience high traffic volumes.
- Improved reliability: Queues can help to improve the reliability of your website by ensuring that tasks are always processed, even if the web server fails.
- Reduced costs: Queues can help to reduce the costs of running your website by allowing you to offload processing to less expensive servers.
Example :-
use Illuminate\Support\Facades\Mail;
Mail::send('emails.welcome', [], function ($message) {
$message->to('user@example.com')->subject('Welcome to our website!');
});
When you dispatch a job to the queue, it will be processed by a separate process. This process will run in the background and will not block the main web server.
You can use the queue:work
command to start workers that will process jobs in the queue. For example, the following command will start a worker that will process jobs in the database queue:
php artisan queue:work database
You can start multiple workers to process jobs more quickly.
6. Optimize Database Queries
Laravel uses the Eloquent ORM for database operations, which can sometimes lead to slow database queries. To optimize your database queries, you can use the following techniques:
- Use the
select
method to specify which columns you want to retrieve from the database, instead of using the*
wildcard. - Use the
chunk
method to process large amounts of data in smaller batches, instead of loading all the data into memory at once. - Use indexes on columns that are frequently used in
where
clauses to speed up database queries.
Example :-
use Illuminate\Support\Facades\DB;
$users = DB::table('users')->select('name', 'email')->where('votes', '>', 100)->get();
7. Use Artisan’s Optimize command
The php artisan optimize
command is a built-in Laravel command that optimizes your application for better performance. This command compiles your views, caches your routes, and enables other performance-enhancing features. To run the optimize
command, simply run the following in your terminal:
Example :-
php artisan optimize
This command will perform optimizations and should help enhance the performance of your Laravel application. Keep in mind that some optimizations might be more relevant in production environments, so it’s a good practice to run this command after deploying your application.
8. Remove Dev dependencies from composer
When you develop your project most probably you will be using some Dev packages to track queries or other development things , remove those packages who are not required in the production.
just run a single command in the production
composer install --prefer-dist --no-dev -o
9. Use a Good Hosting Service
Using a good hosting service is essential for maintaining a high-performance Laravel website. A good hosting service will provide you with the resources you need to run your website smoothly, including reliable servers, fast internet connections, and plenty of storage space.
When choosing a hosting service for your Laravel website, there are a few things you should keep in mind:
- Server resources: Make sure to choose a hosting service that offers servers with enough resources to handle your website’s traffic and workload. Laravel websites can be resource-intensive, so it is important to choose a hosting service that offers servers with enough CPU, RAM, and storage space.
- Network performance: Choose a hosting service that offers fast and reliable internet connections. This will ensure that your website loads quickly for visitors.
10 . Checking for DNS issues
DNS resolution issues can greatly affect the performance of your application and can leave you trying to debug applications for performance issues when your application is working fine. In my case, I traced the DNS resolution issues down to the use of a .test
domain extension, i.e. example.domain.test. To try and identify the root cause, I created some sample entries in the /etc/hosts
file to test with i.e.
127.0.0.1 example.domain.test
127.0.0.1 example.domain.xyz
Here are some tips for checking for and resolving DNS issues:
- Use a DNS lookup tool to check the DNS resolution time for your domain name. If the DNS resolution time is slow, it may be a sign of a DNS issue.
- Check your DNS settings to make sure that they are correct. You can find your DNS settings in your domain registrar control panel.
- Check with your DNS provider to see if there are any outages or other issues affecting DNS resolution.
- If you are using a DNS cache, try clearing the cache. This can help to resolve DNS issues caused by cache poisoning.