最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Web開發(fā)模板引擎優(yōu)缺點總結

 更新時間:2014年05月06日 10:24:54   作者:  
這篇文章主要介紹了Python Web開發(fā)模板引擎優(yōu)缺點總結,需要的朋友可以參考下

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

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

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

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

二、再說性能

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

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

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

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

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

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

三、最后說易用性

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

@Tornado.template 的優(yōu)點是與 Tornado 搭配還不錯(畢竟是自帶的),功能和性能都還行。
缺點是出錯時很難定位到是哪寫錯了,而且與其他模板引擎相比,功能確實少了點(不過我還沒遇到不夠用的情況)。
另外,{% raw ... %} 寫起來好麻煩。None 在輸出時會顯示成 None,而不是空字符串,導致寫起來很累。
它輸出的 HTML 代碼是去掉頭尾空格的,不過單獨的 Python 代碼行會顯示成空行,看上去比較怪。

@Jinja2 的優(yōu)點是功能多,定義了很多輔助函數(shù),有 filter,也有內聯(lián)的 if 表達式這種語法糖,寫起來比較舒服。此外,它能夠調整空白,這使得它輸出的 HTML 比較好看。
缺點是學習成本較高,語法也不是純 Python 了,甚至不能 import Python 模塊和使用 [item for item in list if item] 這種列表解析表達式。
另一個嚴重的缺點是不能輸出非 ASCII 的字符串, 遇到這種情況必須使用 unicode 類型,但要保證這點很麻煩。

@Mako 的優(yōu)點是和 pyTenjin 一樣可以寫任意 Python 代碼,又和 Jinja2 一樣支持 filter(其實習慣了函數(shù)調用的話)。
缺點也是學習成本較高,語法比較復雜,對 HTML 編輯器不友好。

@PyJade 的優(yōu)點是寫起來最快(特別是對前端而言),沒什么多余的東西。
缺點和 Jinja2 一樣,更慘的是它幾乎沒有文檔,而且最新的 release 版不可用,需要用開發(fā)版。

目前看來,我還是繼續(xù)用 pyTenjin 算了,其他的要么不好用,要么學習成本比較高,而且多出來的功能感覺并不是非有不可的。

相關文章

  • python向圖片里添加文字

    python向圖片里添加文字

    這篇文章主要為大家詳細介紹了python向圖片里添加文字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Pytorch使用shuffle打亂數(shù)據(jù)的操作

    Pytorch使用shuffle打亂數(shù)據(jù)的操作

    這篇文章主要介紹了Pytorch使用shuffle打亂數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中使用smtplib和email模塊發(fā)送郵件實例

    python中使用smtplib和email模塊發(fā)送郵件實例

    python腳本發(fā)郵件,一般會用到smtplib和email這兩個模塊??纯丛撃K怎么使用,先看smtplib模塊。 smtplib模塊定義了一個簡單的SMTP客戶端,可以用來在互聯(lián)網(wǎng)上發(fā)送郵件
    2014-04-04
  • 5分鐘快速掌握Python定時任務框架的實現(xiàn)

    5分鐘快速掌握Python定時任務框架的實現(xiàn)

    這篇文章主要介紹了5分鐘快速掌握 Python 定時任務框架,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python實現(xiàn)在線音樂播放器

    Python實現(xiàn)在線音樂播放器

    這篇文章主要為大家詳細介紹了Python實現(xiàn)在線音樂播放器的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 基于DATAFRAME中元素的讀取與修改方法

    基于DATAFRAME中元素的讀取與修改方法

    今天小編就為大家分享一篇基于DATAFRAME中元素的讀取與修改方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • pycharm遠程連接服務器運行pytorch的過程詳解

    pycharm遠程連接服務器運行pytorch的過程詳解

    這篇文章主要介紹了在Linux環(huán)境下使用Anaconda管理不同版本的Python環(huán)境,并通過PyCharm遠程連接服務器來運行PyTorch的過程,包括安裝PyTorch、CUDA以及配置PyCharm遠程開發(fā)環(huán)境的詳細步驟,需要的朋友可以參考下
    2025-02-02
  • Django中數(shù)據(jù)庫遷移常用的命令小結

    Django中數(shù)據(jù)庫遷移常用的命令小結

    在Django中數(shù)據(jù)庫遷移用于保持數(shù)據(jù)庫結構與模型定義同步,這篇文章主要介紹了Django中數(shù)據(jù)庫遷移常用的命令,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • python并發(fā)和異步編程實例

    python并發(fā)和異步編程實例

    這篇文章主要為大家詳細介紹了python并發(fā)和異步編程實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python可視化text()函數(shù)使用詳解

    python可視化text()函數(shù)使用詳解

    這篇文章主要介紹了python可視化text()函數(shù)使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論

石狮市| 乌兰浩特市| 年辖:市辖区| 英山县| 武义县| 贡嘎县| 甘南县| 长垣县| 漳浦县| 手游| 沛县| 嘉善县| 通河县| 崇义县| 长阳| 天峨县| 瑞金市| 民勤县| 得荣县| 襄垣县| 辽中县| 关岭| 桑植县| 乐平市| 墨江| 平乐县| 应用必备| 和田市| 鄄城县| 马尔康县| 静安区| 融水| 留坝县| 志丹县| 股票| 德令哈市| 平泉县| 盐山县| 芜湖县| 乐亭县| 玉门市|