Home  >  Article  >  Backend Development  >  PHP: Which one is more efficient, switch-case or if-else?

PHP: Which one is more efficient, switch-case or if-else?

黄舟
黄舟Original
2017-06-25 09:54:221833browse

I was writing a PHP program in the morning. Because it had to process a large amount of data, I had to consider the running time issue. Then I encountered a problem when calculating the weight of each item. I was considering whether to use switch-case or if-else. I looked online and everyone said switch-case. The efficiency is much higher than if-else. I wrote a few programs and tested it. It is like this. Especially under a large amount of data and multiple conditions, switch-case is much more efficient than if-else. In fact, switch-case is much more efficient than if-else. This is also understandable, because the comparison judgment statements of switch-case are very concentrated, so cache will not be refreshed due to constant comparison and judgment branches. However, the comparison and judgment part of if-else is relatively scattered. Each comparison has to jump to a very far place, so the cache needs to be refreshed every time (almost every time), which naturally causes the speed to be very slow.

The following is something "stolen" from the compilation principle:

switch(val){ 
case   1:...;break; 
case   2:...;break; 
case   4:...;break; 
case   6:...;break; 
case   7:...;break; 
default:...; 
} 
对应的汇编是 
addr_tab: 
              dd   def_addr 
              dd   addr1 
              dd   addr2 
              dd   def_addr 
              dd   addr4 
              dd   def_addr 
              dd   addr6 
              dd   addr7 
              cmp     val,7 
              ja       def_addr 
              jmp     dword   ptr   [eax*4+addr_tab] 
              addr1: 
                .... 
              addr2: 
                .... 
              addr4: 
                .... 
              addr6: 
                .... 
              addr7: 
                .... 
                def_addr: 
                  ....

Switch has a speed advantage compared to if. One is to use the method of transferring the address list; the other is that switch is generally not used in loose situations." Instead of using the "compare-shift" method, the instruction pair dec(sub)-jz is used. The latter not only shortens the length of the instruction, but also has an advantage in speed.

I won’t post the test of the program. Those who are interested should test it themselves. OK, I decided to use switch-case!

The above is the detailed content of PHP: Which one is more efficient, switch-case or if-else?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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