1. Mysql チュートリアル ドライバー mysqlnd
長い間、PHP チュートリアルは MySQL クライアントを通じて MySQL に接続してきましたが、現在 MySQL は MySQL クライアントの PHP バージョンを正式にリリースしており、この MySQLnd によりメモリ使用量が効果的に削減され、パフォーマンスが向上します。詳細については、以下を参照してください。
http://dev.mysql.com/downloads/connector/php-mysqlnd/
http://forge.mysql.com/wiki/PHP_MYSQLND
図からわかるように、mysqlnd を使用すると、mysql ドライバーから php 拡張機能にデータをコピーする手順が不要になります。 Mysqlnd はコピーオンライト、つまりコピーオンライトと読み取り参照を使用します。
mysqlnd は php5.3 のソース コードに組み込まれています。コンパイル時に、--with-mysql=mysqlnd、--with-mysqli=mysqlnd、および --with-pdo-mysql=mysqlnd を使用して mysqlnd ドライバーをインストールします。
mysqlndの利点
PHP のコンパイルはより便利で、libmysql は必要なく、すでにソース コードに組み込まれています。
- PHP のコンパイルがより便利になり、libmysql は必要なくなり、すでにソース コードに組み込まれています
- 著作権の問題を回避するにはphpライセンスを使用してください
- PHP メモリ管理を使用し、PHP メモリ制限 (memory_limit) をサポートします
- メモリ内にはすべてのデータのコピーが 1 つだけあります。以前の libmysql には 2 つのコピーがありました。上の図を参照してください
- ボトルネックの分析に役立つパフォーマンス統計機能を提供します
- mysqli は永続的な接続をサポートします
- パフォーマンスは明らかにlibmysqlより速いです
- ドライバー層にキャッシュメカニズムを追加
非常に多くの機能を見た後、PDO はデータベース チュートリアルの抽象化レイヤーとして、さまざまなバックエンドの機能を引き出すことができるのでしょうか?データベースとして mysql を使用する場合、mysqli の方が良い選択ですか? mysqli は単なる過剰なプロダクトであり、PDO は未来であると常々感じています。
2. パフォーマンスの向上
- md5() はおそらくパフォーマンスを 10% ~ 15% 向上させます
- エンジン内のスタック実装の改善、わかりません
- 定数はROMに保存されています(定数は読み取り専用メモリに移動されます)、ここの意味がわかりません
- 例外処理を改善し、オペコードをより簡潔にします
- include(require)_onceを繰り返し開く問題を解決しました。以前は静的変数を使用して一度実装していましたが、最終的にこの問題を解決しました
- gcc4 でコンパイルされたバイナリは小さくなります
- 全体的なパフォーマンスが 5%-15% 向上しました
多くの人は、Web のボトルネックは DB であるため、アプリのパフォーマンスは気にしないと考えています。これは主に、アプリの拡張が DB の拡張よりもはるかに簡単であるため、DB のボトルネックが発生するためだと思います。結局のところ、パフォーマンスは、最終的にはアプリのさまざまな問題を解決するものであり、プログラマーとしては、高品質のコードを書くことが最も基本的な要件となります。メモリ使用量が少なく、実行速度が速いプログラムは、同時実行性が高い場合に非常に効果的です。実装方法を変更すると、それが何十倍にもなるのが普通です。質の高いコードを書く意識が必要だと思います。
3. ?:演算子
実際、これは js では || です。返される結果は論理型ではなく、元の変数の値です。たとえば、false ?: 123 は true ではなく 123 を返します。構文が少し変です!
4. ネームスペース
これは非常に優れた機能です。追加される前は、名前付け汚染を解決するためにプレフィックスが使用されていました (笑)。
5. 遅延静的バインディング
PHP の静的な性質はプリコンパイル中に修正されるため、継承時に親クラスの self はサブクラスではなく親クラスを参照すると推測されます。 PHP5.3 では、実行時に現在のクラスをキャプチャできる新しい構文 static が追加されています。
典型的な例はシングルトン モードです。
この親クラスを継承する場合、サブクラスのシングルトンは親クラスの getInstance をオーバーライドする必要があります。 5.3 では、バインディングを遅らせるための static の使用がサポートされていますが、残念ながら、たとえ static キーワードがあっても、新しい static を使用してインスタンスを作成することはできませんが、回避策はあります。
这个新特性当前可能会有问题存在,暂时不建议使用。
六、新的魔法函数__callStatic
其实就是__call的静态版,调用的静态方法不存在会调用这个魔法函数,但是低效
七、通过变量调用静态(Variable Static Calls)
以前可以通过变量调用对象的方法,例如$instance->$method();,而静态方法不支持,5.3后就支持了可以通过$someClass::$method()调用了,但是低效。
八、日期函数date_create_from_format
把字符串转换成时间戳,如果使用strtotime的话,日期格式是php解析的,而5.3的date_create_from_format可以设置字符串的日期格式,
$date = strtotime("08-01-07 00:00:00");//php 认为格式 是年-月-日 <br>var_dump(date("Y-m-d", $date)); // string(10) "2008-01-07" <br>$date = date_create_from_format("m-d-y", "08-01-07");//告诉php格式是 月-日-年 <br>var_dump($date->format('Y-m-d')); // string(10) "2007-08-01" ログイン後にコピー
|
九、匿名函数(Lambda functions)和闭包(closures)
js有个很爽的地方就是支持函数式编程,php很不爽的地方就是函数太过正规了,不过5.3后php更自由了。
定义匿名函数的语法
$lambda = function () { echo "Hello World!n"; }; ログイン後にコピー
|
function replace_spaces ($text) { <br>$replacement = function ($matches) { <br>return str_replace ($matches[1], ' ', ' ').' '; <br>}; <br>return preg_replace_callback ('/( +) /', $replacement, $text); <br>} ログイン後にコピー
|
function replace_spaces ($text) { <br>return preg_replace_callback ('/( +) /', <br>function ($matches) { <br>return str_replace ($matches[1], ' ', ' ').' '; <br>}, $text); <br>} ログイン後にコピー
|
产生闭包的语法
function (normal parameters) use ($var1, $var2, &$refvar) {} ログイン後にコピー
|
引入了use语法,并且支持引用变量
十、新魔法常量__DIR__
以前只有__FILE__,为了得到当前文件所在的路径,都是用dirname(__FILE__)来得到的,现在可以用__DIR__代替了
十一、NOWDOC
php定义字符串有一种格式叫定界符.
$foo = <<this is $fubar <br>ONE; ログイン後にコピー
|
这种方式称为HEREDOC,php会解析里面的变量,而有时候我们不需要解析变量,5.3加入了NOWDOC,其实就是定界符的单引号版
$bar = <<<'TWO' this is $fubar TWO; ログイン後にコピー
|
这样,php只把它当作字符串,变量不会解析
十二、GC
因为php本身工作机制的原因,所以php的GC机制只要高效就够了,允许少量内存泄漏,毕竟程序执行完毕就会释放所有申请的内存,根本不会有内存泄漏的问题,但这只是对于短暂运行的程序而言,如果用php编写持久执行就要考虑内存泄漏问题了。
php的GC机制采用引用计数机制,引用计数是很简单高效的GC机制,不过缺点也很明显,不能完全回收所有已无效的变量,例如变量相互引用了,就无法回收了,5.3里加入的GC函数,其实就是起到增强GC机制的作用。
gc_enable(); // 激活GC,增强GC机制,回收循环引用的无效变量 <br>var_dump(gc_collect_cycles()); // 强制回收已无效的变量 <br>gc_disable(); // 禁用GC ログイン後にコピー
|
http://www.bkjia.com/PHPjc/629847.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629847.htmlTechArticle一、mysql教程驱动mysqlnd 一直以来,php教程都是通过mysql客户端连接mysql,而现在mysql官方已经推出php版的mysql客户端,而这个mysqlnd有效降低内...