「Module:NavboxV2/doc」:修訂間差異

本页使用了标题或全文手工转换,现处于中国香港繁体模式
出自有獸檔案館
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移])
 
(文本替换 - 替换“QW:”为“LIB:”)
 
(未顯示同一使用者於中間所作的 1 次修訂)
第15行: 第15行:
==设计用途==
==设计用途==
在[[:Category:引用模板后大小超过限制的页面]]中,有相当一部分页面是由于{{tl|Navbox}}模板超载导致。<!--,看到类似[[毛泽东]]等模板过载的条目时候,会发现模板过载问题。-->
在[[:Category:引用模板后大小超过限制的页面]]中,有相当一部分页面是由于{{tl|Navbox}}模板超载导致。<!--,看到类似[[毛泽东]]等模板过载的条目时候,会发现模板过载问题。-->
*根据[[QW:模板限制]]中“嵌套展开”的说法,相同页面的多次嵌套调用是会被分次统计的(例如:页面A嵌入页面B,页面B嵌入页面C,页面C相对页面A统计到的展开字节数是被计算了2次)。而现在Navbox的子代块、列式,折叠行式的实现都是基于Navbox行式的模板调用或类似样式结构迭代,这样就符合内部多次调用Navbox的条件,页面很容易会超过模版展开后大小的限制。
*根据[[LIB:模板限制]]中“嵌套展开”的说法,相同页面的多次嵌套调用是会被分次统计的(例如:页面A嵌入页面B,页面B嵌入页面C,页面C相对页面A统计到的展开字节数是被计算了2次)。而现在Navbox的子代块、列式,折叠行式的实现都是基于Navbox行式的模板调用或类似样式结构迭代,这样就符合内部多次调用Navbox的条件,页面很容易会超过模版展开后大小的限制。
*其次,实际上Lua的运行限制条件相当宽裕,50MB的内存限制,10秒的运行时限制,很多页面实际使用只在十分之一左右或以下,可以被大量压榨性能。
*其次,实际上Lua的运行限制条件相当宽裕,50MB的内存限制,10秒的运行时限制,很多页面实际使用只在十分之一左右或以下,可以被大量压榨性能。
所以将Navbox所有的实现全部以Lua实现,希望能腾出解释器运行量到Lua运行量,降低解析器触发展开后大小限制的可能。
所以将Navbox所有的实现全部以Lua实现,希望能腾出解释器运行量到Lua运行量,降低解析器触发展开后大小限制的可能。

於 2023年4月6日 (四) 16:29 的最新修訂

這是{{NavboxV2}}的Lua實現代碼。

簡介

合併了{{Navbox}}相關的一系列模板。融合了{{Navbox}}的行式、{{Navbox subgroup}}的子代模組包含、{{Navbox with columns}}的列式,{{Navbox with collapsible groups}})的摺疊行式。

覆寫自模組:Navbox

設計用途

Category:參照模板後大小超過限制的頁面中,有相當一部分頁面是由於{{Navbox}}模板超載導致。

  • 根據LIB:模板限制中「巢狀展開」的說法,相同頁面的多次巢狀呼叫是會被分次統計的(例如:頁面A嵌入頁面B,頁面B嵌入頁面C,頁面C相對頁面A統計到的展開位元組數是被計算了2次)。而現在Navbox的子代塊、列式,摺疊行式的實現都是基於Navbox行式的模板呼叫或類似樣式結構迭代,這樣就符合內部多次呼叫Navbox的條件,頁面很容易會超過模版展開後大小的限制。
  • 其次,實際上Lua的執行限制條件相當寬裕,50MB的記憶體限制,10秒的執行時限制,很多頁面實際使用只在十分之一左右或以下,可以被大量壓榨效能。

所以將Navbox所有的實現全部以Lua實現,希望能騰出直譯器執行量到Lua執行量,降低解析器觸發展開後大小限制的可能。

效果

在對於包含一層子Navbox的情況,展開後大小下降最多有50~60%左右。

參數

與{{Navbox}}系列模板幾乎相容。但新增部分參數填入:

  • type:Navbox的類型,對應值為vertical(對應{{Navbox}})、horizontal(對應{{Navbox with columns}})、vertical_collapsible(對應{{Navbox with collapsible groups}}),預設值為vertical
  • border:Navbox的隱藏參數,用於控制Navbox的邊框機制來使子Navbox能被嵌入到父Navbox的值欄位(例如listcol等)中,實際對應{{Navbox subgroup}}的實現機制。對應值為childsubgroup任一個。
在本模板添加子Navbox層時,必須傳入這兩個參數,這是本模板區分是否存在子Navbox層的依賴。本模板首層Navbox層無需添加border,按需添加type
  • removeGroupPadding:用於區別{{Navbox|child}}和{{Navbox subgroup}},後者在Groupn欄位的儲存格增加一組padding的組態,適用於子Navbox層。任意值,存在則可,為移除該padding組態(對應{{Navbox|child}})。

自{{Navbox}}系列模板轉換

將原有嵌入{{Navbox}}系列模板的值欄位listn(其他類同)改為listn-,並作為相應巢狀子Navbox模板的參數的字首來加入,使這些模板巢狀轉換為扁平化的一層模板參數。

例子
{{Navbox}}系列 本模板
{{Navbox
|name = Navbox/doc
|state = uncollapsed
|image = {{{image}}}
|imageleft = {{{imageleft}}}
|title = {{{title}}}
|above = {{{above}}}
|group1 = {{{group1}}}
|list1 = {{Navbox subgroup
 | title = {{{list1-title}}}
 | above = {{{list1-above}}}
 | below = {{{list1-below}}}
 | imageleft = {{{list1-imageleft}}}
 | image = {{{list1-image}}}
 | group1 = {{{list1-group1}}}
 | list1  = {{{list1-list1}}}
 | group2 = {{{list1-group2}}}
 | list2  = {{{list1-list2}}}
}}
|group2 = {{{group2}}}
|list2 = {{Navbox subgroup
| group1 = {{{list2-group1}}}
| list1  = {{{list2-list1}}}
| group2 = {{{list2-group2}}}
| list2  = {{{list2-list2}}}
}}
|below = {{{below}}}
}}
{{NavboxV2
|name = Navbox/doc
|state = uncollapsed
|image = {{{image}}}
|imageleft = {{{imageleft}}}
|title = {{{title}}}
|above = {{{above}}}
<!--  list1 -->
|group1 = {{{group1}}}
<!-- list1-sub-->
|list1-type =vertical <!--作为list1的子Navbox层,全部相应参数加上对应前缀“list1-”,下同,如此类推 -->
|list1-border=child
|list1-title = {{{list1-title}}}
|list1-above = {{{list1-above}}}
|list1-below = {{{list1-below}}}
|list1-imageleft = {{{list1-imageleft}}}
|list1-image = {{{list1-image}}}
|list1-group1 = {{{list1-group1}}}
|list1-list1  = {{{list1-list1}}}
|list1-group2 = {{{list1-group2}}}
|list1-list2  = {{{list1-list2}}}
<!--  list2 -->
|group2 = {{{group2}}}
<!-- list2-sub-->
|list2-type =vertical <!--作为list2的子Navbox层,全部相应参数加上对应前缀“list2-”,下同,如此类推 -->
|list2-border=child
|list2-group1 = {{{list2-group1}}}
|list2-list1  = {{{list2-list1}}}
|list2-group2 = {{{list2-group2}}}
|list2-list2  = {{{list2-list2}}}
<!--end-->
|below = {{{below}}}
}}

轉換注意

由於{{Navbox}}系列的實現較為複雜和涉及自我巢狀,本模板的實現也為此做了對應相容性調整,可能會出現一些參數被過度透傳(可能在樣式控制部分,原因是原有設計通過控制參數傳入來隔離,而本設計為了使參數扁平化,導致部分這些參數無法隔離)。而且模板參數非常依賴命名規律,在轉換替換前,請進行testcase檢查,確認轉換後能與原來的樣式、功能基本一致,才應用轉換。如果出現問題,請保留案例並聯絡本模板維護編輯協助處理,或者放棄

雖然可以在值欄位(例如listcol等)重新嵌入{{Navbox}}系列模板,但這和原有做法一樣,失去了本模板降低解析器限制的作用,不建議這樣做。