改善 Apache + PHP 效能的一些想法…

雖然現在已經是 Rails 或是 Python 的時代了(以上兩個語言隨便都可以跑出 1000 req/s 的成績,反觀 PHP 在 production 最多也才 200 req/s)。不過 PHP 畢竟還是一個大量應用在 Web 環境的語言,尤其是 WordPress 也還是用 PHP……

  1. 使用 fastcgi mode + Apache Worker 或是 Thread MPM
    PHP 本身雖然是 Thread safe 的,但是PHP的 Module 很多不是(如 mysql module),所以如果要用 Apache PHP Module的話,只能用 prefork MPM。而 prefork 一隻 httpd 動輒 200MB,有時候還高達 2GB,造成效能不彰。另外一個重點是 fastcgi 會自己重跑,可以避免 memory leak 問題。
  2. 上 OP Code Cache
    例如 APC 之類的OP Code Cache可以避免每次執行的時候,PHP都去 compile 一次原始程式碼。
  3. 避免大量的 require、include,或是把需要 require 與 include 的檔案都放在同一個目錄下
    因為 realpath() 很吃資源…也可以考慮加大 realpath cache
  4. Cache
    考慮把資料庫輸出 cache,或甚至 cache 整個 HTML。
  5. 把 static file 與動態 file 分開
    講到爛的東西了。

另外PHP是個不適合OO的語言,不要期待使用OO的PHP效能會好……

VP8 Open Source,名為WebM

這幾天Google IO 2010的消息之一:VP8 Open Source,命名為WebM,程式碼本體以 3-clause BSD style 授權發布,而Bitstream檔案格式以CC-by 3.0發布。

目前 FirefoxOpera 的使用者可以下載 WebM 的測試 build。Chromium (Chrome的開放原始碼版本) 也已經可以取得原始碼自己編譯,而預先編譯好的版本 (dev channel build) 還要等個幾天。

目前 YouTube 已經支援以 VP8 播放影片,只要開啟 HTML 5 模式,然後在影片URL後面加上 &webm=1 即可。

Flash 已經宣佈會在接下來的版本內建支援WebM,而微軟也宣佈將在IE9中支援 ((使用者必須在系統內安裝相關的 codec))。接下來就看 Apple 的反應了。