


How to Improve Work Efficiency Analysis of Strange PHP Reference Efficiency Issues
The function is as follows:
Copy code The code is as follows:
function update_timelist(&$arr,$timestamp,$threshold){
$timequeue = &$arr['timequeue'];
while(!empty( $timequeue[0])&&($timestamp-$timequeue[0])>$threshold){
array_shift($timequeue);
}
array_push($timequeue, $timestamp);
if($arr['count ']
}
}
Do you see any problems with this function? In fact, there is a big problem, which is the line in the function:
$timequeue = &$arr['timequeue'];
This line causes the program to read 22M data and generate the time node linked list, which takes nearly 40 seconds, and delete this line. Changing the line to directly use $arr['timequeue'] shortens the time by 30 seconds, and only takes about 10 seconds to process 22M.
Copy code The code is as follows:
function update_timelist(&$arr,$timestamp,$threshold){
while(!empty($arr['timequeue'][0])&&($timestamp- $arr['timequeue'][0])>$threshold){
array_shift($arr['timequeue']);
}
array_push($arr['timequeue'], $timestamp);
if($ arr['count']
}
Everyone can see what it is Problem? The problem is with the count function, I didn’t think of it. PHP marks the real content space pointed by the variable as a reference type and a non-reference type, like the following code:
Copy the code The code is as follows:
$a = 'jb51.net';
$b = $a;
$c = $b;
actually only takes up one copy of the memory space, because PHP's zend engine uses the copy on writing mechanism, and will only make a copy when $b and $c are modified'jb51 .net'. At this time, the content space type of 'jb51.net' is a non-reference type. If it is changed to the following code:
Copy the code The code is as follows:
$a = 'jb51.net' ;
$b = $a;
$c = &$a;
What will happen to this? Is it still a memory space to store 'jb51.net'? No, because $c is a reference to $a, and the storage space pointed to by $a needs to be marked as a reference type, then a separate copy of 'jb51.net' must be made for $b, because $b points to a non-reference type. .
We can understand that $c is now a reference to $a. If $b still executes the space of $a, then modifying $c will cause $b to be modified as well. Therefore, once a reference appears, it must be copied even if there is no writing operation. A portion. It can also be understood that PHP has only two types of memory space pointed to by variables: non-reference and reference. The two types cannot be mixed or transferred. If you need to change the state of the memory space somewhere, you need to make a copy.
The following explains why adding $timequeue = &$arr['timequeue'] will cause count to slow down. Do you remember the calling process of the c function? In fact, the parameters we pass in need to be copied and passed in, and the same is true for PHP. However, due to the copy on writing mechanism, count will not actually be copied when passing in non-reference types, but $timequeue = &$arr['timequeue '] specifies the memory space of $timequeue as a reference type, and count requires a non-reference type, which causes count to need to copy a copy of $arr['timequeue']. Why is there no problem if I pass $arr['timequeue'] directly? Of course count uses the copy on writing mechanism. What about array_shift and array_push? They are passed in references. Don't worry, this is not modifying the type of $arr['timequeue'] but actually passing in an alias of $arr['timequeue'].
I have just started learning PHP. The above analysis may not be correct or comprehensive. You can communicate with me by sending emails and leaving messages on my homepage.
The above introduces how to improve work efficiency and the analysis of strange PHP reference efficiency problems, including how to improve work efficiency. I hope it will be helpful to friends who are interested in PHP tutorials.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Article discusses essential security features in frameworks to protect against vulnerabilities, including input validation, authentication, and regular updates.

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

The article discusses adding custom functionality to frameworks, focusing on understanding architecture, identifying extension points, and best practices for integration and debugging.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.
