Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in Effizienzsteigerungs- und Optimierungsmethoden in PHP

Einführung in Effizienzsteigerungs- und Optimierungsmethoden in PHP

黄舟
黄舟Original
2017-07-27 10:06:241535Durchsuche

Angesichts der Erfahrungen und Erkenntnisse aus früheren Miniprojekten sind viele Orte nicht standardisiert und effizient genug. Daher habe ich beim weiteren Erlernen von PHP eine gewisse Zusammenfassung des PHP-bezogenen Wissens basierend auf Internetressourcen erstellt, um weitere Umwege zu vermeiden.

PHP ist die Abkürzung für die englische Hypertext-Vorverarbeitungssprache Hypertext Preprocessor. PHP ist eine eingebettete HTML-Sprache, die in HTML-Dokumente eingebettet ist und auf der Serverseite ausgeführt wird. Der Sprachstil ähnelt der C-Sprache und wird häufig verwendet.

Die einzigartige Syntax von PHP mischt C, Java, Perl und die eigene Syntax von PHP. Es kann dynamische Webseiten schneller ausführen als CGI oder Perl. Im Vergleich zu anderen Programmiersprachen betten dynamische Seiten, die mit PHP erstellt wurden, Programme zur Ausführung in HTML-Dokumente ein, und die Ausführungseffizienz ist viel höher als bei CGI, das HTML-Tags vollständig generiert. PHP kann auch kompilierten Code ausführen, und die Kompilierung kann Verschlüsselung erreichen und Code optimieren ausgeführt wird, wodurch der Code schneller ausgeführt wird.

Einige Zusammenfassungen zur PHP-Programmierung:

0 Verwenden Sie einfache Anführungszeichen anstelle von doppelten Anführungszeichen, um Zeichenfolgen einzuschließen, was schneller geht. Da PHP nach Variablen in Zeichenfolgen sucht, die von doppelten Anführungszeichen umgeben sind, ist dies in einfachen Anführungszeichen nicht möglich. Hinweis: Nur Echo kann dies tun, es ist eine „Funktion“, die mehrere Zeichenfolgen als Parameter annehmen kann (Anmerkung: PHP-Handbuch Es wird gesagt, dass Echo ist eine Sprachstruktur, keine echte Funktion, daher wird die Funktion in doppelte Anführungszeichen gesetzt).

1. Wenn Sie eine Klassenmethode als statisch definieren können, versuchen Sie, sie als statisch zu definieren, und ihre Geschwindigkeit erhöht sich um fast das Vierfache.

2. $row[’id’] ist 7-mal schneller als $row[id].

3. Echo ist schneller als print und verwendet mehrere Echo-Parameter (Anmerkung: bezieht sich auf die Verwendung von Kommas anstelle von Punkten) anstelle der Zeichenfolgenverkettung, wie z. B. echo $str1, $str2.

4. Bestimmen Sie die maximale Anzahl von Schleifen, bevor Sie die for-Schleife ausführen. Verwenden Sie stattdessen am besten foreach.

5. Heben Sie die Registrierung nicht verwendeter Variablen, insbesondere großer Arrays, auf, um Speicher freizugeben.

6. Vermeiden Sie die Verwendung von __get, __set, __autoload.

7. require_once() ist teuer.

8. Versuchen Sie, beim Einschließen von Dateien absolute Pfade zu verwenden, da dies die Geschwindigkeit der PHP-Suche nach Dateien in include_path vermeidet und die zum Parsen des Betriebssystempfads erforderliche Zeit kürzer ist.

9. Wenn Sie wissen möchten, wann das Skript ausgeführt wird (Anmerkung: Der Server empfängt die Client-Anfrage), ist es besser, $_SERVER[‘REQUEST_TIME’] als time() zu verwenden.

10. Funktionen ersetzen reguläre Ausdrücke, um dieselbe Funktion zu vervollständigen.

11. Die Funktion str_replace ist schneller als die Funktion preg_replace, aber die Funktion strtr ist viermal effizienter als die Funktion str_replace.

12. Wenn eine String-Ersetzungsfunktion Arrays oder Zeichen als Parameter akzeptiert und die Parameterlänge nicht zu lang ist, können Sie erwägen, einen zusätzlichen Ersetzungscode zu schreiben, sodass jeder übergebene Parameter ein Zeichen ist, anstatt nur zu schreiben eine Codezeile, um Arrays als Parameter für Abfragen und Ersetzungen zu akzeptieren.

13. Es ist besser, eine selektive Verzweigungsanweisung (Übersetzung: Groß-/Kleinschreibung wechseln) zu verwenden, als mehrere if-else-if-Anweisungen zu verwenden.

14. Die Verwendung von @ zum Blockieren von Fehlermeldungen ist sehr ineffizient, äußerst ineffizient.

15. Das Öffnen des mod_deflate-Moduls von Apache kann die Browsing-Geschwindigkeit von Webseiten verbessern.

16. Die Datenbankverbindung sollte geschlossen werden, wenn die Verwendung beendet ist. Verwenden Sie keine langen Verbindungen.

17. Fehlermeldungen sind teuer.

18. Das Erhöhen lokaler Variablen in einer Methode ist am schnellsten. Fast so schnell wie der Aufruf lokaler Variablen in einer Funktion.

19. Das Erhöhen einer globalen Variablen ist zweimal langsamer als das Erhöhen einer lokalen Variablen.

20. Das Erhöhen einer Objekteigenschaft (z. B. $this->prop++) ist dreimal langsamer als das Erhöhen einer lokalen Variablen.

21. Das Erhöhen einer undefinierten lokalen Variablen ist 9 bis 10 Mal langsamer als das Erhöhen einer vordefinierten lokalen Variablen.

22. Das bloße Definieren einer lokalen Variablen, ohne sie in einer Funktion aufzurufen, verlangsamt ebenfalls die Geschwindigkeit (im gleichen Maße wie das Erhöhen einer lokalen Variablen). PHP wird wahrscheinlich prüfen, ob eine globale Variable vorhanden ist.

23. Methodenaufrufe scheinen unabhängig von der Anzahl der in der Klasse definierten Methoden zu sein, da ich 10 Methoden hinzugefügt habe (sowohl vor als auch nach dem Testen der Methode), aber es gab keine Änderung in der Leistung.

24. Methoden in abgeleiteten Klassen werden schneller ausgeführt als dieselben Methoden, die in Basisklassen definiert sind.

25. Der Aufruf einer leeren Funktion mit einem Parameter dauert genauso lange wie die Durchführung von 7 bis 8 lokalen Variablen-Inkrementierungsoperationen. Ein ähnlicher Methodenaufruf erfordert fast 15 Inkremente lokaler Variablen.

26. Die Zeit, die Apache zum Parsen eines PHP-Skripts benötigt, ist zwei- bis zehnmal langsamer als das Parsen einer statischen HTML-Seite. Versuchen Sie, mehr statische HTML-Seiten und weniger Skripte zu verwenden.

27. Sofern das Skript nicht zwischengespeichert werden kann, wird es bei jedem Aufruf neu kompiliert. Durch die Einführung eines PHP-Caching-Mechanismus kann die Leistung normalerweise um 25 bis 100 % verbessert werden, um den Kompilierungsaufwand zu eliminieren.

28. Versuchen Sie, so viel wie möglich zwischenzuspeichern. Sie können memcached verwenden. Memcached ist ein leistungsstarkes Speicherobjekt-Caching-System, mit dem sich dynamische Webanwendungen beschleunigen und die Datenbanklast reduzieren lassen. Das Zwischenspeichern von OP-Codes ist nützlich, damit Skripte nicht für jede Anfrage neu kompiliert werden müssen.

29. Wenn Sie eine Zeichenfolge bearbeiten und überprüfen müssen, ob ihre Länge bestimmte Anforderungen erfüllt, verwenden Sie natürlich die Funktion strlen(). Diese Funktion wird recht schnell ausgeführt, da sie keine Berechnungen durchführt und lediglich die bekannte Zeichenfolgenlänge zurückgibt, die in der zval-Struktur (der in C integrierten Datenstruktur zum Speichern von PHP-Variablen) gespeichert ist. Da strlen () jedoch eine Funktion ist, ist es etwas langsam, da der Funktionsaufruf viele Schritte durchläuft, z. B. Kleinbuchstaben (Anmerkung: Bezieht sich auf den Funktionsnamen in Kleinbuchstaben. PHP unterscheidet nicht zwischen Funktionsnamen in Groß- und Kleinbuchstaben ), Hash-Suche, Wird zusammen mit der aufgerufenen Funktion ausgeführt. In einigen Fällen können Sie den isset()-Trick verwenden, um die Ausführung Ihres Codes zu beschleunigen.

(zum Beispiel)

if (strlen($foo) < 5) { echo “Foo is too short”$$ }

(Vergleichen Sie mit der folgenden Technik)

if (!isset($foo{5})) { echo “Foo is too short”$$ }

Der Aufruf von isset() ist zufällig schneller als strlen( ) ist schnell, da isset() als Sprachkonstrukt im Gegensatz zu letzterem bedeutet, dass für seine Ausführung keine Funktionssuche und keine Kleinschreibung von Buchstaben erforderlich sind. Das heißt, Sie verbringen tatsächlich nicht viel Aufwand damit, die Stringlänge im Code der obersten Ebene zu überprüfen.

30. Die konstanten Parameter der Dateisperrfunktion flock——.

Gemeinsame Sperre (Lesevorgang) – LOCK_SH

Exklusive Sperre (Schreibvorgang) – LOCK_EX

Sperre freigeben (ob gemeinsam oder exklusiv) – LOCK_UN

Antiblockierung – LOCK_NB

Der Sperrvorgang kann über die Funktion fclose() aufgehoben werden.

31. Überprüfen Sie, ob die Zeichenfolge eine zulässige IP ist:

Verwenden Sie ip2long() direkt ohne regulären Ausdruck. Wenn es zulässig ist, wird eine Zahl zurückgegeben es ist illegal, es wird false zurückgeben.

32. Ab PHP 5.3 können Sie __DIR__ verwenden, um das Verzeichnis abzurufen, in dem sich das aktuelle Skript befindet, ohne dass ein echter Pfad (__FILE__) erforderlich ist.

33. Verwenden Sie checkdnsrr(), um die Gültigkeit einiger E-Mail-Adressen anhand der Existenz von Domänennamen zu bestätigen.

Diese integrierte Funktion kann sicherstellen, dass jeder Domänenname einer IP-Adresse entspricht 🎜>

34. Beim Ausführen der Inkrementierung oder Dekrementierung der Variablen $i ist $i++ langsamer als ++$i. Dieser Unterschied ist spezifisch für PHP und gilt nicht für andere Sprachen. Ändern Sie also bitte nicht Ihren C- oder Java-Code und erwarten Sie, dass er sofort schneller ist, da er sonst nicht funktioniert. ++$i ist schneller, da nur 3 Anweisungen (Opcodes) erforderlich sind, während $i++ 4 Anweisungen erfordert. Nach dem Inkrementieren wird tatsächlich eine temporäre Variable erstellt, die anschließend inkrementiert wird. Das Präfix-Inkrement erhöht sich direkt auf den ursprünglichen Wert. Dies ist eine Form der Optimierung, wie sie vom PHP-Optimierer von Zend durchgeführt wird. Es empfiehlt sich, diese Optimierung im Hinterkopf zu behalten, da nicht alle Befehlsoptimierer die gleichen Optimierungen durchführen und es eine große Anzahl von Internetdienstanbietern (ISPs) und Servern gibt, die nicht über Befehlsoptimierer verfügen.

35. Es ist nicht notwendig, objektorientiert zu sein (OOP). Objektorientiert ist oft sehr teuer und jede Methode und jeder Objektaufruf verbraucht viel Speicher.

36. Es ist nicht notwendig, Klassen zu verwenden, um alle Datenstrukturen zu implementieren, Arrays sind auch sehr nützlich.

37. Unterteilen Sie die Methoden nicht zu sehr. Überlegen Sie genau, welchen Code Sie wirklich wiederverwenden möchten.

38. Sie können Code jederzeit in Methoden zerlegen, wenn Sie es brauchen.

Versuchen Sie bei Methoden mit weniger Zeilen und hoher Häufigkeit, den Code direkt zu schreiben. Dies kann den Funktionsstapelaufwand reduzieren und die Verschachtelung der Methoden sollte nicht zu tief sein Effizienz von PHP.

39. Versuchen Sie, eine große Anzahl integrierter PHP-Funktionen zu verwenden.

40. Wenn der Code viele zeitaufwändige Funktionen enthält, können Sie erwägen, diese mithilfe von C-Erweiterungen zu implementieren.

41. Profilieren Sie Ihren Code. Der Prüfer verrät Ihnen, welche Teile des Codes wie viel Zeit in Anspruch nehmen. Der Xdebug-Debugger umfasst Inspektionsroutinen, die die Gesamtintegrität Ihres Codes bewerten und Engpässe in Ihrem Code aufdecken.

42. mod_zip kann als Apache-Modul verwendet werden, um Ihre Daten sofort zu komprimieren und das Datenübertragungsvolumen um 80 % zu reduzieren.

43. Wenn file_get_contents anstelle von file, fopen, feof, fgets und anderen Methodenreihen verwendet werden kann, versuchen Sie, file_get_contents zu verwenden, da dies viel effizienter ist! file_get_contents muss nicht feststellen, ob das Dateihandle erfolgreich geöffnet wurde. Beachten Sie jedoch das PHP-Versionsproblem von file_get_contents, wenn Sie eine URL-Datei öffnen

44. Führen Sie so wenige Dateioperationen wie möglich durch, obwohl die Dateioperationseffizienz von PHP nicht gering ist. Optimierung: Wählen Sie SQL-Anweisungen aus und führen Sie so wenige Einfüge- und Aktualisierungsvorgänge wie möglich aus (ich wurde für die Aktualisierung kritisiert).

46 Verwenden Sie so viele PHP-interne Funktionen wie möglich (aber ich wollte nur eine Funktion finden, die dies tut). nicht in PHP vorhanden ist, ist eine Zeitverschwendung, die zum Schreiben einer benutzerdefinierten Funktion verwendet werden könnte!

47. Deklarieren Sie keine Variablen innerhalb einer Schleife, insbesondere keine großen Variablen. Das scheint nicht nur ein Problem in PHP zu sein, oder?

48 Manipulationsfunktionen: Verwenden Sie keine regulären Ausdrücke.

50. Versuchen Sie, foreach anstelle von while- und for-Schleifen zu verwenden

51. Verwenden Sie einfache Anführungszeichen anstelle von doppelten Anführungszeichen, um Zeichenfolgen in Anführungszeichen zu setzen.

52 „Verwenden Sie i+=1 anstelle von i=i+1. Es entspricht der C/C++-Gewohnheit und ist effizienter.“ ;

53. Bei globalen Variablen sollten Sie diese nach der Verwendung entfernen.

54 Stellung.

55. Das PHP-Tag „bb9bd6d87db7f8730c53cb084e6b4d2d“ muss kein End-Tag in ein unabhängiges PHP-Skript schreiben. Dies dient dazu, unerwartete Leerzeichen zu vermeiden, die zu Ausgabe- und Berichtsfehlern führen. Kommentare können verwendet werden, um das Ende eines Skripts anzuzeigen.

56. Echo ist eine grammatikalische Struktur, keine Funktion. Es ist effizienter, ein Komma "," zu verwenden, wenn darauf mehrere Zeichenfolgen folgen.

57. Im Array werden 1, '1' und true in 1 konvertiert, wenn es sich um Indizes handelt. „01“ wird nicht konvertiert und als String verarbeitet.

58. Es ist illegal, den Code einer Klasse in verschiedene PHP-Tags zu schreiben, und es wird ein Syntaxfehler gemeldet. Funktionen sind kein Problem.

59. Der Unterschied und die Beziehung zwischen Sitzung und Cookie.

Die Sitzung wird auf dem Server gespeichert und das Cookie wird im Browser des Clients gespeichert.

Die Sitzung kann in einer Datei, Datenbank oder im Memcache auf der Festplatte gespeichert werden Cookie kann auf der Festplatte (persistentes Cookie) und im Speicher (Sitzungscookie) gespeichert werden.

Es gibt zwei Möglichkeiten, session_id zu übergeben: eine ist Cookie und die andere ist die Get-Methode (Sie können den Variablennamen angeben). um session_id über das Konfigurationselement session.name zu speichern.

60. Verwenden Sie $_SERVER['REQUEST_TIME'] anstelle von time(), um den aktuellen Zeitstempel zu erhalten, was einen Funktionsaufruf reduzieren kann und effizienter ist.

61. Seien Sie vorsichtig, wenn Sie _REQUEST zum Abrufen von Daten verwenden , kann es dazu kommen, dass Daten mit hoher Priorität durch Daten mit niedriger Priorität überschrieben werden.

62. Sie müssen nach der Funktion header() beenden, sonst wird der nachfolgende Code trotzdem ausgeführt.

63. Große Arrays werden als Referenz übergeben, um die Speichernutzung zu reduzieren, und bei Verwendung wird unset() verwendet.

64. Einschränkungen von set_time_limit(). Sie können nur die Laufzeit des Skripts selbst begrenzen und die Zeit externer Ausführungen wie system()-Funktionen, Stream-Operationen, Datenbankabfragen usw. nicht steuern.

65. Der Unterschied zwischen echo, print, print_r, var_dump und var_export:

echo und print sind grammatikalische Strukturen, keine Funktionen und können nur Grundtypen anzeigen, keine Arrays und Objekte, andere Es sind alles Funktionen, die Arrays und Objekte anzeigen können

echo kann mehrere Variablen anzeigen, getrennt durch Kommas

print_r die zweite Parameter können bestimmen, ob Variablen ausgegeben oder als Rückgabewerte verwendet werden sollen.

var_dump gibt die Details der Variablen aus, z. B. Länge und Typ, und kann mehrere Variablen als Parameter übergeben 🎜 >

var_export gibt das legale PHP-Codeformat zurück.

66. Bestätigungs-E-Mail: filter_var($email, FILTER_VALIDATE_EMAIL);

67. So erhalten Sie die Dateierweiterung:

1, pathinfo( $filename), nehmen Sie den Wert von extension oder pathinfo($filename, PATHINFO_EXTENSION) an.

Zwei, end(explode('.',$filename)).

68. Versuchen Sie, den ternären Operator (?:) zu verwenden.

69. Verwenden Sie die Funktion error_reporting(0), um zu verhindern, dass dem Benutzer potenziell vertrauliche Informationen angezeigt werden.

Idealerweise sollte die Fehlerberichterstattung in der php.ini-Datei vollständig deaktiviert sein. Wenn Sie jedoch einen gemeinsam genutzten virtuellen Host verwenden und php.ini nicht ändern können, fügen Sie besser die Funktion error_reporting(0) hinzu und fügen Sie sie in die erste Zeile jeder Skriptdatei ein (oder verwenden Sie require_once(), um sie zu laden). . Dies kann wirksam verhindern, dass sensible SQL-Abfragen und -Pfade angezeigt werden, wenn Fehler auftreten. einschließlich mir) ) kopiert die vordefinierte Variable in eine Variable mit einem kürzeren Namen. Tatsächlich verdoppelt sich dadurch der Speicherverbrauch und das Programm wird nur langsamer. Stellen Sie sich das folgende Beispiel vor: Wenn der Benutzer böswillig 512 KB Text in das Texteingabefeld einfügt, wird dadurch 1 MB Speicher belegt!

BAD:
$description = $_POST[&#39;description&#39;];
echo $description;
GOOD:
echo $_POST[&#39;description&#39;];

1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题; 2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的; 3.优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过); 4.尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!); 5.循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?); 6.多维数组尽量不要循环嵌套赋值; 7.在可以用PHP内部字符串操作函数的情况下,不要用正则表达式; 8.foreach效率更高,尽量用foreach代替while和for循环; 9.用单引号替代双引号引用字符串; 10.“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”; 11.对global变量,应该用完就unset()掉; 以下是一篇关于提高PHP效率的文章 

榨干 PHP,提高效率

这篇杂文翻译整理自网络各路文档资料(见最末的参考资料),尤其是 Ilia Alshanetsky (佩服之至) 在多个 PHP 会议上的演讲,主要是各类提高 PHP 性能的技巧。为求精准,很多部分都有详细的效率数据,以及对应的版本等等。偷懒,数据就不一一给出了,直接给结论。 ======================================================== 

静态调用的成员一定要定义成 static (PHP5 ONLY)

贴士:PHP 5 引入了静态成员的概念,作用和 PHP 4 的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多,所有类的实例共享同一个静态变量。

QUOTE: class foo { function bar() {  echo &#39;foobar&#39;; } } $foo = new foo; // instance way $foo->bar(); // static way foo::bar();

静态地调用非 static 成员,效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告,内部也需要做转换。 ======================================================== 

使用类常量 (PHP5 ONLY)

贴士:PHP 5 新功能,类似于 C++ 的 const。 使用类常量的好处是: - 编译时解析,没有额外开销 - 杂凑表更小,所以内部查找更快 - 类常量仅存在于特定「命名空间」,所以杂凑名更短 - 代码更干净,使除错更方便 ======================================================== (暂时)不要使用 require/include_once require/include_once 每次被调用的时候都会打开目标文件! - 如果用绝对路径的话,PHP 5.2/6.0 不存在这个问题 - 新版的 APC 缓存系统已经解决这个问题 文件 I/O 增加 => 效率降低如果需要,可以自行检查文件是否已被 require/include。不要调用毫无意义的函数有对应的常量的时候,不要使用函数。

QUOTE: php_uname(&#39;s&#39;) == PHP_OS; php_version() == PHP_VERSION; php_sapi_name() == PHP_SAPI;

虽然使用不多,但是效率提升大概在 3500% 左右。 最快的 Win32 检查 $is_win = DIRECTORY_SEPARATOR == '\\'; ======================================================== 

- 不用函数

- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler…通用 - 一直可用 时间问题 (PHP>5.1.0 ONLY) 你如何在你的软件中得知现在的时间?简单,「time() time() again, you ask me…」。不过总归会调用函数,慢。现在好了,用 $_SERVER[‘REQUEST_TIME’],不用调用函数,又省了。 

加速 PCRE

- 对于不用保存的结果,不用 (),一律用 (?。这样 PHP 不用为符合的内容分配内存,省。效率提升 15% 左右。 - 能不用正则,就不用正则,在分析的时候仔细阅读手册「字符串函数」部分。有没有你漏掉的好用的函数? 例如:

 strpbrk() strncasecmp() strpos()/strrpos()/stripos()/strripos()

======================================================== 

加速 strtr

如果需要转换的全是单个字符的时候,用字符串而不是数组来做

strtr:   $addr = strtr($addr, "abcd", "efgh"); // good $addr = strtr($addr, array(&#39;a&#39; => &#39;e&#39; ,//..)); // bad

效率提升:10 倍。 ======================================================== 

不要做无谓的替换

即使没有替换,str_replace 也会为其参数分配内存。很慢!解决办法: - 用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换 效率: - 如果需要替换:效率几乎相等,差别在 0.1% 左右。 - 如果不需要替换:用 strpos 快 200%。 ======================================================== 

邪恶的 @ 操作符

不要滥用 @ 操作符。虽然 @ 看上去很简单,但是实际上后台有很多操作。用 @ 比起不用 @,效率差距:3 倍。 特别不要在循环中使用 @,在 5 次循环的测试中,即使是先用 error_reporting(0) 关掉错误,在循环完成后再打开,都比用 @ 快。 ======================================================== 

善用 strncmp

当需要对比「前 n 个字符」是否一样的时候,用 strncmp/strncasecmp,而不是 substr/strtolower,更不是 PCRE,更千万别提 ereg。strncmp/strncasecmp 效率最高(虽然高得不多)。 慎用 substr_compare (PHP5 ONLY),按照上面的道理,substr_compare 应该比先 substr 再比较快咯。答案是否定的,除非: - 无视大小写的比较 - 比较较大的字符串 不要用常量代替字符串 为什么: - 需要查询杂凑表两次 - 需要把常量名转换为小写(进行第二次查询的时候) - 生成 E_NOTICE 警告 - 会建立临时字符串 效率差别:700%。 ======================================================== 

不要把 count/strlen/sizeof 放到 for 循环的条件语句中

贴士:一个经典做法

QUOTE: for ($i = 0, $max = count($array);$i < $max; ++$i); ?>

效率提升相对于: - count 50% - strlen 75% ======================================================== 

短的代码不一定快

// longest if ($a == $b) { $str .= $a; } else { $str .= $b; } // longer if ($a == $b) { $str .= $a; } $str .= $b; // short $str .= ($a == $b ? $a : $b);

  你觉得哪个快? 效率比较:

 - longest: 4.27 - longer: 4.43 - short: 4.76

不可思议?再来一个:

  // original $d = dir(&#39;.&#39;); 
  while (($entry = $d->read()) !== false) { if ($entry == &#39;.&#39; || $entry == &#39;..&#39;) { continue; } } 
  // versus glob(&#39;./*&#39;); 
  // versus (include . and ..) scandir(&#39;.&#39;);

  哪个快? 效率比较: - original: 3.37 - glob: 6.28 - scandir: 3.42 - original without OO: 3.14 - SPL (PHP5): 3.95 画外音:从此也可以看出来 PHP5 的面向对象效率提高了很多,效率已经和纯函数差得不太多了。 ======================================================== 

提高 PHP 文件访问效率

需要包含其他 PHP 文件的时候,使用完整路径,或者容易转换的相对路径。  

include &#39;file.php&#39;; // bad approach incldue &#39;./file.php&#39;; // good include &#39;/path/to/file.php&#39;; // ideal

======================================================== 

物尽其用

PHP 有很多扩展和函数可用,在实现一个功能的之前,应该看看 PHP 是否有了这个功能?是否有更简单的实现?  

$filename = "./somepic.gif"; 
$handle = fopen($filename, "rb"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); // vs. much simpler file_get_contents(&#39;./somepic.gif&#39;);

  ======================================================== 

关于引用的技巧

引用可以: - 简化对复杂结构数据的访问 - 优化内存使用  

$a[&#39;b&#39;][&#39;c&#39;] = array(); 
// slow 2 extra hash lookups per access for ($i = 0; $i < 5; ++$i) $a[&#39;b&#39;][&#39;c&#39;][$i] = $i; 
// much faster reference based approach $ref =& $a[&#39;b&#39;][&#39;c&#39;]; for ($i = 0; $i < 5; ++$i) $ref[$i] = $i; ?> $a = &#39;large string&#39;; 
// memory intensive approach function a($str){ return $str.&#39;something&#39;; }
 // more efficient solution function a(&$str){ $str .= &#39;something&#39;; }   
Aug 25th, 2009
Comments

Das obige ist der detaillierte Inhalt vonEinführung in Effizienzsteigerungs- und Optimierungsmethoden in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn