国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python Web開發模板引擎優缺點總結

2020-02-23 05:22:12
字體:
來源:轉載
供稿:網友

做 Web 開發少不了要與模板引擎打交道。我陸續也接觸了 Python 的不少模板引擎,感覺可以總結一下了。

一、首先按照我的熟悉程度列一下:

pyTenjin:我在開發 Doodle 和 91 外教時使用。
Tornado.template:我在開發知乎日報時使用。
PyJade:我在開發知乎日報時接觸過。
Mako:我只在一個早期就夭折了的小項目里用過。
Jinja2:我只拿它做過一些 demo。

其他就不提了,例如 Django 的模板,據說又慢又難用,我根本就沒接觸過。

二、再說性能

很多測試就是弄個大循環什么的,很沒技術含量。其實模板的渲染時間主要消耗在字符串處理上,包括拼接、編碼、轉義等,而循環測的則是 Python runtime 的性能。

所以我還是用實際的例子來測試吧,最終選擇了 Doodle 的首頁。它有幾個子模板、幾個循環、幾個函數調用和很多個變量,具有一定代表性。考慮到 pyTenjin 以外的模板引擎不支持局部緩存,我就把用到緩存的側邊欄去掉了,只渲染主體部分。

渲染 1000 次的結果為:pyTenjin 耗時 0.65 秒,取消預處理后耗時 0.9 秒;Tornado.template 耗時 1.0 秒;Jinja2 耗時 1.1 秒。

測試代碼有幾百行,19 個文件,我就懶得列出來了。其他模板引擎也懶得測了。

@pyTenjin 的優勢很明顯,特別是它支持預處理。這個預處理的主要作用是把一些常量先編譯好,渲染時就不用再處理了(因為已經變成字符串了);此外,有些功能可以靜態地決定是否開啟,而預處理可以把那些不需要的功能代碼(主要是 if 分支)提前去掉。此外還能緩存任意代碼段的渲染結果,在一段時間內無需重新渲染。
@Jinja2 比 Tornado.template 慢是我沒想到的,好像與很多測試不符。
@Mako 預計和 Jinja2 差不多。它也能緩存代碼段的渲染結果。
@PyJade 需要把 Jade 模板轉成其他模板,且無緩存,預計會慢很多。

考慮到除 PyJade 外肯定不存在幾倍的性能差距,所以挑個好用的即可。

三、最后說易用性

@pyTenjin 的優點是可以寫任意 Python 代碼。
缺點是標記比較復雜和獨特,有 <?py ... ?>、<?PY ... ?>、#{...}、#{{...}}、{==...==}、{#==...==#}、${...}、${{...}}、{#=...=#} 和 {#==...==#} 這么多種,不過看上去還挺萌的。
由于使用了 < 和 > 符號,在 HTML 標簽內部使用時,會阻礙編輯器進行語法解析。
另外,它的 tagattr() 方法在 expr 參數為 0 時當成了 True 來處理,需要改源碼來修正,而它又沒有開源項目可以提交 pull request。
而且它只有一個開發者,已經有一年多沒更新了,活躍度明顯不夠。

@Tornado.template 的優點是與 Tornado 搭配還不錯(畢竟是自帶的),功能和性能都還行。
缺點是出錯時很難定位到是哪寫錯了,而且與其他模板引擎相比,功能確實少了點(不過我還沒遇到不夠用的情況)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿图什市| 阿荣旗| 咸宁市| 洪雅县| 方城县| 墨竹工卡县| 拉孜县| 洛扎县| 虞城县| 嘉兴市| 兰考县| 二手房| 垫江县| 北辰区| 柞水县| 泽州县| 安达市| 岢岚县| 金湖县| 南雄市| 高陵县| 邵东县| 扎囊县| 岐山县| 长白| 巴林左旗| 宿州市| 阿图什市| 扶风县| 南宁市| 宜黄县| 阿拉善右旗| 濮阳县| 安吉县| 乐昌市| 三亚市| 遵义市| 古蔺县| 柘荣县| 集贤县| 宁化县|