PHP7卓越性能背后的原理有哪些?
鸟哥在微信里放出了PHP7的下载链接:PHP: Get Download
比如Zval的变动对于缓存更加友好等等
----------------------------------20151205----------------------------------
题主我表示很困惑,问个问题怎么气氛这么古怪呢?有几个方面要说明一下:
1、鸟哥确实提前放出了下载链接,贴出来也是因为提问的时候官网没有直达,只在git有,所以方便大家下载查看。
2、我现在不是PHP程序员,只是对JIT和VM的实现比较有兴趣,专门来嘲讽PHP的各位可以换一个地方喷。
回复内容:
PHP7在运行原理上与PHP5相比并没有变化,这与hhvm不同。主要是基于perf性能分析工具进行了常规性能优化。减少内存分配次数,多使用栈内存,缓存数组hash值,字符串解析成参数改为宏展开,使用大块连续内存代替小块内存等等。更细节信息请看鸟哥的PHP7分享PPT。zend引擎程序的性能提升了很多,PHP程序性能自然好了。所有的优化都是很实在的,从细节入手积少成多。
想办法去优化一个有20年历史的程序,这是一件非常有挑战性的事情,比推到重构难度更高。世界上有80%的网站用PHP,使用PHP7后这些网站程序无太大成本就能免费得到1倍性能提升。将节约多少CPU,节约多少电力,减少多少碳排放。另外PHP是开源项目,背后没有商业公司,完全由社区运作。使用PHP语言的开发者和企业从未向PHP官方付过一分钱。所以建议各位知友口下留德,无论您多么鄙视PHP,但请尊重别人为世界所做的付出。 在2015年的《PHP技术峰会》(PHPCon,上海)听鸟哥的PHP7分享,写过一篇解析文章,基本覆盖了技术分享的核心内容,有兴趣的同学可以看看。
(为了确保PHP7技术解析的点,不对其他同学产生误导,专门请鸟哥做过文章review)
PHP7革新与性能优化 php7性能优化主要是细节优化,并没有从本质上改变什么,
打个比方,swoole虽然只是个扩展,但是相当于从50分到60的提高,
php7相当于从80分到90分的提高。
php是弱类型,jit比强类型难很多。
一门语言的成功是多方面的,性能只是指标之一,简单耐操,不出乱子就是php的特色,另外纠正楼上的,php并不是完全请求释放,有部分就是常驻的,你说的分词完全可以随php启动而常驻,我们曾经就干过这事。
最后,从没有觉得php7的对手是node,python,ruby,java,
php7最大的对手是php5.先干掉php5才是他最大的难题。
- PHP's new hashtable implementation
- Internal value representation in PHP 7 -1
- Internal value representation in PHP 7 - 2
see How is PHP 7 twice as fast? : PHP 世界上只有两种语言。 一种是被人骂的。 一种是无人问津的。 就这样。 性能不知道,反正看人用着真心开心,自己也看得顺眼~ 那些骂PHP的人,真心相对你们说,你们嫉妒心太强了。想想你们用的语言,哪个不是设计者搞了一堆一堆的所谓的规则和所谓的语法,让你在所谓的语言世界里跳来跳去,想想你们每天的工作内容: 是在玩电脑,还是电脑在玩你? 你们就是太见不得自己辛辛苦苦学习了一门语言,结果有一门语言可以快速学习掌握。世界在进步,接受新东西吧。不要被自己已掌握的知识框死了。 PHP7性能的确有很大的提升,但个人认为还称不上卓越二字,除非运行机制有本质的变化,否则,正如 @韩天峰 网友评论中说的那样,对解释器进行优化。PHP性能相对Java之类的半编译或C这种编译语言低,这个是PHP代码运行机制决定的。做PHP的如果连这个都不懂的话,要么不了解PHP,要么只了解PHP。但这也不能得出PHP不如Java或C这个结论,项目一般来说需要基于开放成本和运行成本来决定选择语言和架构,使用合适的工具干合适的事而已,一个语言能干什么不能干什么,性能不能一票否决。开发语言排行榜中PHP的排名已经足以证明PHP的成就了,很多做PHP的人不能正视这点,一般都是因为对PHP了解的不多或对其他语言缺乏了解导致的不自信。数据结构+算法才是程序中最重要的,PHP7的优化正是从这两方面来提升PHP性能的,而这也表明如果我们这些PHP程序员做得足够好的话,我们写出的代码,处理同样逻辑,会比那些垃圾的C或Java程序员的代码性能更高。当然也有优秀的C和Java程序员,但他们是不会来嘲笑另外一种语言的,因为他们更明白数据结构+算法=程序这个道理。
我们最近在一个项目中用Symfony,另一个项目中用Laravel,这两个都是优秀的PHP Framework,我的感受还是坚信PHP真的不是追求高运行性能的编程语言。但巧妙地利用PHP弱类型这一特性,有时比Java或C#方便多了,这两种语言的反射技术还是不如PHP反射加动态来得方便。 用了大部分脚本类语言都有的优化方案进行了优化。 不能说本身性能是卓越的,语言有适用环境,不同环境下的也没啥好比的。
作为一个简单易用,覆盖面广的语言来说,PHP7相对于之前版本的变化是卓越的,在一个开源民主的社区中推进这个吃力的事情不是特别的容易。
HHVM之类的,是一个基于公司项目的产品,不会过多的考虑到外面的人是怎么用的,的确没有历史的包袱,但是也意味着要用上要做相当的改变。从某种意义上(为应用带来的额外代价)来说,用HHVM和用java没啥区别,无非是重新拿java写一遍还是用hhvm可以保留原先的php程序但是却要增加一大堆运维成本。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.
