一早起來還沒有ç¡é†’,就在 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 看來å»è©²æ•¬è€Œé 之。