@fugaco

PHP7の処理能力をグラフで見る

PHP7の処理能力について、Zendパフォーマンスチームがインフォグラフィックを公開していたので紹介します。

https://www.zend.com/en/resources/php7_infographic

最後の例は多少PHPに有利な感じに計測されていそうではありますが、参考までに。
HHVMについては前回の記事に少し出てきます。

 

PHP7でWebを加速する
Zendパフォーマンスチームが、来るべきPHP7のインパクトに関する実態をお伝えします。
PHPでできた複数の人気アプリでベンチマークを取り、PHP5.6、PHP7、HHVM3.7を比較しました。
同じハードウェア上で3倍のMagentoトランザクションを実行できた
PHP5.6に比べ実行時間は2倍速く、消費メモリは30%少ない。PHP7を動かすサーバーは、PHP5.6を動かすサーバーに比べ、最大3倍のリクエスト量を扱うことができる。
1秒あたりのリクエスト数
Drupal8はPHP7で72%早く動く
WordPressはPHP7で絶叫。より少ないサーバーで同じユーザー数に対応できる!
PHP5.6だと1つのWordPressリクエストで100M足らずのCPU命令を実行しているが、同じことをするのにPHP7だと25M程度で済む。
その他のPHPフレームワークについても調査
ネタバレすると、マジ最高!
PHP以外の動的言語はどうなのか?
PHPの方が早いことが多い。PHP7だとより顕著。
秒数
(少ないほうが良い)
マンデルブロ集合のレンダー処理速度

PHP7 alpha1 リリース / Apache2.4が対応

去年のPHPカンファレンスでPHP7のリリースを知ってから楽しみにしていましたが、
6月12日、PHP7のアルファ版1がリリースされました。

(PHP6はUTF-16の実装に失敗し頓挫した模様です。)
(6という数字は他の言語でも失敗していて縁起が悪いとか…)

http://windows.php.net/qa/


聞くところによると、PHP7はすこぶる高速になっているようです。
HHVMはFacebookが開発しているPHP実行環境で、PHPより高速で互換性も高いのが特徴です。Facebookで実際に利用されているだけでなく、他の企業でも商用サービスで利用する事例が増えてきています。
2014年のはじめ頃にPHPの性能改善プロジェクトPHPNGがスタートしました。これはPHPコミッターでありZend Technologies社員でもあるDmitry Stogovによるもので、PHP内部のデータ構造の変更をすることでPHPの言語仕様を変えずに性能改善を行うものです。このプロジェクトは極めて順調に進み、2014年8月にはPHP7のベースプロジェクトとして採用されました。
PHP7での性能改善はかなり進んでいます。(中略)WordPressでベンチマークテストしたときにPHP5.6の約1.7倍、HHVMに匹敵する性能となっています。
PHP7 alpha1にはApache2.4 VC14で対応しているようです。

http://www.apachelounge.com/viewtopic.php?p=30690

仕事ではWindows環境で開発し、Linux環境で運用するパターンがほとんどなので、いつもApache Lounge様にはお世話になっています。

オチがなくてごめんなさい。

JavaScriptのイベントがうまく効いていないときの原因の探し方例

あるボタンにclickイベントを設定してあるのに、クリックしてもそのイベントが起きない・・・なぜだろう?ということってありますよね。設定したclickイベント自体に問題がないならば、他のイベントが悪さをしているのかもしれません。


HTML要素にどんなイベントがついているのかを調べるために、少し前まではVisual Eventというブックマークレットを使っていました。

20150421-0.png

私のFirefoxに入れているVisual Eventは少しデザインが古いものかもしれませんが、だいたいこんな風に見えます。

イベントがついている要素のところにイベント種類のアイコンが表示され、マウスオーバーするとイベント内容(関数)を見ることができます。ソース上の場所までは分かりませんが、ここに表示されたスクリプトでソース内を検索すれば見つけることができます。


でも現在は、ChromeにもFirefox(Firebug)にもイベントを取得する開発ツールが追加されていますので、そちらも便利に使えます。

20150421-firebug.png

Firefox(Firebug)


20150421-chrome.png

Chrome


今回はFirefoxのFirebugで、おかしいイベントの探し方を見てみます。

こんなHTMLページを用意してみました。

20150421-html-1.png

「Click Me!」ボタン → documentにclickイベントが設定されている
「Click Me! (2)」ボタン → ボタン自身にclickイベントが設定されている

20150421-html-2.png


これは3つ目のボタンだけアラートが表示されません。
Firebugを使って原因を探ってみます。


まず、アラートがちゃんと表示される、1つ目のボタンのイベントを確認してみます。

20150421-button-1.png
(1つ目のボタンのイベント)

documentに対し、「.clickmeというボタンが押されたらアラートを表示する」というイベント(上記イベントの②)がついています。何も問題ありません。


次に、アラートが表示されない、3つ目のボタンのイベントを確認してみます。

20150421-button-3.png
(3つ目のボタンのイベント)

documentのイベントより上(上の方が優先度が高い)に、「tr.wrap-2」という要素についたclickイベントが表示されています。イベントはクリックした要素から順に親要素に伝わっていきますが、documentにイベントが届く前に、この「tr.wrap-2」についたイベントでclickイベントがキャンセルされています(上記イベントの①)。ソースコードはこのHTMLファイルの72行目にあるようです。

イベントタブを使うと、悪さをしているイベントを簡単に見つけることができました。


参考までに4つ目のボタンのイベントを見てみます。親要素にclickイベントのキャンセル処理が書いてあるのに、このボタンはアラートがちゃんと表示されます。

20150421-button-4.png
(4つ目のボタンのイベント)

なぜならば、キャンセル処理の①よりも、ボタン自身についている③のclickイベントの方が先に来ているからですね。


おしまい。

How to enable multi-byte characters in Itext of fabric.js - fabric.jsのItextで日本語入力をする方法

fabric.jsはブラウザ上で画像の編集をするためのJavaScriptライブラリです。

fabric.js DEMO

ところがItextオブジェクトでテキストを変更しようとしても、日本語などのマルチバイト文字を打つことができません。このライブラリではキー入力をonKeypressイベントで取得しているのに、日本語入力ではonKeypressが発火されないからです。

というわけで、解決策(の簡易版)を作りました。





-----

ちなみexcanvasというライブラリを使ってIE8にもそこそこ対応させましたが、編集後に画像として出力する(canvas.toDataURL)ところでIE8にはその能力がなく、node.js、node-canvas、node-fabricjsを揃えたサーバーを用意する必要が出てしまいました。

企業用のプロダクトではまだまだIE8の面倒を見なくてはならないので厄介ですが、ちょいと前まではIE7も見ていたと考えればだいぶマシだと思うことにします。

Windowsの新ブラウザで開発は楽になる?

先週末、マイクロソフトから新しいブラウザについての発表がありました。そのプロジェクト名はSpartan(スパルタン)。Windows 10から搭載されるとのことです。ま、Windows 10やSpartanについての情報はもういろいろな場所で出ているので、ここではWebシステム開発に関係ありそうなことを簡単にまとめておきたいと思います。


Windows 10で目指していること

  • 開発者がブラウザ互換を気にしないで開発できるようにする
    →新ブラウザSpartanの導入
  • 利用者が最新のバージョンのブラウザを使うようにする
    →リリースから一年間、Windows 10への無料アップデートを提供(Win7以降のPCのみ)
    →Firefox、Chromeのようにブラウザの自動アップデートをする

Windows 10に搭載されるブラウザ

  • Spartan(標準ブラウザ?)
  • IE(IE11?IE12?)

Windows 10でのWeb閲覧

普通のサイト
  • Spartanで最適に見られる
  • IEでも見られる

IE向けのサイト
  • Spartanで見られる
  • IEで見られる

昔のIE独自仕様(カスタムActiveXコントロールなど)を使っているサイト
  • Spartanでは対応していない
  • IEで最適に見られる

Spartanとは

  • 新しいレンダリングエンジンEdgeHTML.dllを採用
  • デュアルエンジンで、Tridentも備えている
  • IE9で導入されたChakra JavaScriptを使用
  • F12キーの開発者パネルも大きく機能アップ

EdgeHTMLとは?

  • 何十年もInternet Explorerを動かしていたレンダリングエンジン、Trident (MSHTML.dll)とは別物
  • IE11に搭載されている最新のTridentから旧技術に関わる部分を削除したもの(*)をベースに再開発

(*)削除されたもの

  • ドキュメントモード
  • IE8モード
  • VBScript
  • attachEvent
  • X-UA-Compatible
  • currentStyle

Windows 10のIEとは

  • 最新のTridentを採用
  • デュアルエンジンで、Spartanも備えている
  • 昔のIE向けサイトを見るために残している


本当に開発者にとって楽になるのでしょうか。みんながみんなWindows 10のSpartanに移行してくれれば理想的ですが、そうなるのに何年もかかりそうですよね。その頃もまだWeb開発してるといいな、私。

1/41  | 次のページ »