一早起來還沒有睡醒,就在 Django-user mailing list 上看到 "Django vs. Rails vs. Symfony: Django is fastest" 這篇文章。在 wiki.rubyonrails.com (注意,是 RoR 自己的 wiki) 上有人發表了一篇測試報告:"Framework Performance",比較 Symfony/PHP5, Rails/Ruby 和 Django/Python 等三組 framework 的效能。Django 贏了 Rails 有五成左右,出我意料之外地多。

其實我本來對 Django template 的速度不是很滿意。在把這個 blog 從 COREBlog 移出來,以 Django 改寫的時候,用 ab 對首頁只能測出 x hits/sec 的數字 (現在好一點了,測試出 2x hits/sec,因為我把首頁顯示 entry 的筆數調低下來)。當然,這裡面有部分的原因是我亂組態 deployment,不給跑 Apache 的使用者對 Django app 所在目錄的寫入權限,所以每次 page hit 都要重新編譯所有的 .py 檔 (沒有寫入權限就無法把編譯好的 .py 備份到 .pyc,因此下次執行同一段程式的時候還得重新編譯)。

然而,這篇測試報告倒表現出 Django template system 的優勢。如果測試內容準確的話,他們儘可能把 page hit 的工作放在 page rendering 上,也就代表測試的大部分是 framework 本身,必定大量使用 template system。而 Django 大幅優勝的結果,表示 Django template system 相較於其它 framework/template 速度還比較快。這是很好也是很壞的結果。好的部分是可以對 Django template 有更多信心,壞的部分是我寫的 template 肯定有問題,怎麼跑的那麼慢呢 (苦笑) (看來光模仿 COREBlog 的設計可不是個辦法)。

之前我也測過 Django 的 cache,表現得不錯,完全不需要動到 mod_proxy 之類的 Apache 模組便可以把 1x hits/sec 拉高到 2xx hits/sec。由此也可驗證 RoR wiki 上的測試報告確實沒有用 cache 作弊。

好的,這樣的結果可以讓我很快樂地繼續用 Django 寫程式玩,然後說我很快 (笑)。話說回來,比起來 RoR 也只是有點慢而已,其 framework 本身大受好評不說,穩定性也不錯,在測試裡使用 lighttpd 的話,最長 transaction 時間 (1.25 sec) 更有超水準表現。Symfony 就很慘了,慢倒還不是致命的問題 (雖然速度是 Django 的 1/3,但這總可以用三台電腦 load balancing 來暴力解決),麻煩的是連線不穩定;無論在高低壓測試組態下都會有 transaction fail。

RoR 值得玩玩,但 Symfony 看來卻該敬而遠之。

Posted by yungyuc at 06:02, 1 comments, 0 trackback.
Change to page (10 entries in each page): 1
© hover year to navigate month: powered by django