2017-02-10 26 views
0

我目前正在研究需要解析頁面上的wiki文本的Mediawiki擴展。目前我使用Parser :: preprocess。這會使頁面加載時間增加幾秒鐘。在Mediawiki擴展中優化/更快的wikitext解析?

有沒有更快的方法來做到這一點?特別是,它必須解析wikitext,展開所有模板和解析器函數,並檢查結果中的特定字符串。

+1

當頁面被保存時,它會存儲結果。 – Tgr

+0

我需要userCan鉤子中的解析結果。有什麼地方可以緩存解析結果的變量? – user1258361

回答

2

解析不是您可以合理期望的快速操作;你應該設計你的擴展,這樣它的解析只需要在頁面的wikitext(或者它的一些依賴項)發生變化時纔會發生 - 也就是說。將任何邏輯集成到其中一個解析器鉤子中,如InternalParseBeforeSanitize並存儲結果。

通常情況下,您會使用page_props表格(參見ParserOutput::setProperty),但如果這是與安全有關的事情,您應該仔細考慮是否適用於您(它是按頁面而不是按修訂版本的,並且存在頁面和道具表之間的小窗口正在更新)。在未來的某個MediaWiki版本中,您可以在MCR虛擬插槽中存儲任意每個修訂版元數據;現在你必須從頭開始,在你自己的表中,在擴展中實現它。或者,如果您考慮在不經常查看的頁面上可接受的延遲,則可以始終執行一些輕量級緩存(使用ObjectCache::getMainWANInstance()獲取WANObjectCache實例並使用其getWithSetCallback方法)。

+0

我只需要一種方法來存儲頁面加載之間解析的wiki文本。最好不用更改數據庫。 – user1258361

+1

我在非DB緩存上擴展了一下。 – Tgr

+0

我閱讀了您的更新答案(並感謝您的幫助)。這些廣域網緩存有多持久?只需要一個地方來保存每個頁面保存後解析的wiki文本。作爲額外的好處,我甚至不需要重新分析wiki文本 - 在頁面顯示前添加一個鉤子並獲取結果。 – user1258361