Home Development Tools composer Share composer autoload automatic loading performance optimization guide

Share composer autoload automatic loading performance optimization guide

Aug 05, 2020 pm 01:10 PM
composer

The following tutorial column of composer will introduce to you the composer autoload automatic loading performance optimization guide. I hope it will be helpful to friends in need!

Share composer autoload automatic loading performance optimization guide

The autoload mechanism provided by composer makes it very convenient for us to organize code and introduce new class libraries, but it also reduces the performance of the project a lot.

The main reason why composer autoload is slow is due to the support for PSR-0 and PSR-4. When the loader gets a class name, it needs to find the corresponding class file location in the file system, which leads to a lot of trouble. Performance loss, of course, this is still useful when we are developing, so that the new class files we add can take effect immediately. But in production mode, we want to find these class files and load them as quickly as possible.

So composer provides several optimization strategies. These optimization strategies are explained below.

First level (Level-1) optimization: Generate classmap

How to run:

Execute command composer dump-autoload -o (-o is equivalent to --optimize)

Principle:

The essence of this command is to convert PSR-4/PSR- The rules of 0 are transformed into classmap rules. Because classmap contains the correspondence between all class names and class file paths, the loader no longer needs to search for files in the file system. The path to the class file can be found directly from the classmap.

Notes

It is recommended to enable opcache, which will greatly speed up the loading of classes.

php5.5 and later versions come with opcache by default.

This command does not take into account the situation when the target class is not found in the classmap. When the loader cannot find the target class, it will still go to the file system according to the rules of PSR-4/PSR-0. Search

Second level (Level-2/A) optimization: Authoritative (Authoritative) classmap

Execute command:

Execute commandcomposer dump-autoload -a (-a is equivalent to --classmap-authoritative)

Principle

Execute this command to hide The Level-1 command is also executed, that is, the classmap is also generated. The difference is that when the loader cannot find the target class in the classmap, it will not search in the file system (that is, it implicitly believes that the classmap is All legal classes, there will be no other classes unless called illegally)

Notes

If your project will generate classes at runtime, use this The optimization strategy will not find these newly generated classes.

Second level (Level-2/B) optimization: using APCu cache

Execute command:

Execute command composer dump-autoload --apcu

Principle:

Using this strategy requires the apcu extension to be installed.

apcu can be understood as a piece of memory and can be shared among multiple processes.

This strategy is to store the result found in the file system into the shared memory when the target class is not found in the classmap in Level-1. When searching next time, it can be directly retrieved from the memory. Return without having to search again in the file system.

In the production environment, this strategy is generally used together with Level-1. Execute composer dump-autoload -o --apcu. In this way, even if a new class is generated in the production environment, only the file system is needed. It can be cached after searching once, which makes up for the shortcomings of Level-2/A.

How to choose an optimization strategy?

You should choose a strategy based on the actual situation of your project. If your project does not generate class files when running and requires composer's autoload to load, then use Level-2/A. Otherwise, using Level-1 and Level-2/B is a better choice.

A few tips

  • Level-2 optimization is basically a supplement to Level-1 optimization, and Level-2/A is mainly a decision When the target class is not found in the classmap, whether to continue searching for it, Level-2/B mainly provides a caching mechanism. When the target class is not found in the classmap, it will cache the file path found in the file system. , speeding up subsequent searches.

  • When Level-2/A is executed, it means that if it cannot be found in the classmap, it will not continue to search. At this time, Level-2/B will not take effect.

  • No matter what the situation is, it is recommended to turn on opcache. This will greatly improve the class loading speed. I have visually measured the performance improvement by at least 10 times.

The above is the detailed content of Share composer autoload automatic loading performance optimization guide. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Composer's advanced features: aliases, scripts, and conflict resolution Composer's advanced features: aliases, scripts, and conflict resolution Jun 03, 2024 pm 12:37 PM

Composer provides advanced features, including: 1. Aliases: define convenient names for packages for repeated reference; 2. Scripts: execute custom commands when installing/updating packages, used to create database tables or compile resources; 3. Conflict resolution: use priorities Rules, satisfaction constraints, and package aliases resolve the different requirements of multiple packages for the same dependency version to avoid installation conflicts.

What are the common ways to convert arrays to objects in PHP? What are the common ways to convert arrays to objects in PHP? Apr 28, 2024 pm 10:54 PM

How to convert PHP array to object: use stdClass class, use json_decode() function, use third-party library (such as ArrayObject class, Hydrator library)

Agile development and operation of PHP microservice containerization Agile development and operation of PHP microservice containerization May 08, 2024 pm 02:21 PM

Answer: PHP microservices are deployed with HelmCharts for agile development and containerized with DockerContainer for isolation and scalability. Detailed description: Use HelmCharts to automatically deploy PHP microservices to achieve agile development. Docker images allow for rapid iteration and version control of microservices. The DockerContainer standard isolates microservices, and Kubernetes manages the availability and scalability of the containers. Use Prometheus and Grafana to monitor microservice performance and health, and create alarms and automatic repair mechanisms.

PHP code version control and collaboration PHP code version control and collaboration May 07, 2024 am 08:54 AM

PHP code version control: There are two version control systems (VCS) commonly used in PHP development: Git: distributed VCS, where developers store copies of the code base locally to facilitate collaboration and offline work. Subversion: Centralized VCS, a unique copy of the code base is stored on a central server, providing more control. VCS helps teams track changes, collaborate and roll back to earlier versions.

How to use Redis cache in PHP array pagination? How to use Redis cache in PHP array pagination? May 01, 2024 am 10:48 AM

Using Redis cache can greatly optimize the performance of PHP array paging. This can be achieved through the following steps: Install the Redis client. Connect to the Redis server. Create cache data and store each page of data into a Redis hash with the key "page:{page_number}". Get data from cache and avoid expensive operations on large arrays.

The role of PHP CI/CD in DevOps projects The role of PHP CI/CD in DevOps projects May 08, 2024 pm 09:09 PM

PHPCI/CD is a key practice in DevOps projects that automates the build, test, and deployment processes to improve development efficiency and software quality. A typical PHPCI/CD pipeline consists of the following stages: 1) Continuous Integration: Whenever the code changes, the code is automatically built and tested. 2) Continuous deployment: Speed ​​up delivery by automatically deploying tested and integrated code to the production environment. By implementing the PHPCI/CD pipeline, you can increase development efficiency, improve software quality, shorten time to market, and improve reliability.

How to use PHP CI/CD to iterate quickly? How to use PHP CI/CD to iterate quickly? May 08, 2024 pm 10:15 PM

Answer: Use PHPCI/CD to achieve rapid iteration, including setting up CI/CD pipelines, automated testing and deployment processes. Set up a CI/CD pipeline: Select a CI/CD tool, configure the code repository, and define the build pipeline. Automated testing: Write unit and integration tests and use testing frameworks to simplify testing. Practical case: Using TravisCI: install TravisCI, define the pipeline, enable the pipeline, and view the results. Implement continuous delivery: select deployment tools, define deployment pipelines, and automate deployment. Benefits: Improve development efficiency, reduce errors, and shorten delivery time.

Visualization technology of PHP data structure Visualization technology of PHP data structure May 07, 2024 pm 06:06 PM

There are three main technologies for visualizing data structures in PHP: Graphviz: an open source tool that can create graphical representations such as charts, directed acyclic graphs, and decision trees. D3.js: JavaScript library for creating interactive, data-driven visualizations, generating HTML and data from PHP, and then visualizing it on the client side using D3.js. ASCIIFlow: A library for creating textual representation of data flow diagrams, suitable for visualization of processes and algorithms.

See all articles