方法一、使用在父模板中使用{include file="child.tpl"}直接将子模板包含进来
优点:
1、有利于模块的划分和模板的重用。
2、嵌套层次不多的时候,模板的结构清晰,一眼过去就知道这个模板的内容和结构。
3、只需要一个smarty实例就能做完所有的事情,减少系统资源的占用。
不足:
1、子模板中的变量可能与父模板的变量发生冲突
2、多重嵌套的时候,变量名冲突的几率增大,为所有的变量赋值的难度也加大。
3、子模板的可操控性差,例如不能通过设置$cache_id, $compile_id,来得到多个结果。
4、扩展性差。如果需要添加新的模板的时候需要修改模板,同时还需要修改程序。
方法二、通过$smarty->fetch()将子模板的数据当成变量assign到父模板中
优点:
1、同样有利于模块的划分,模板的重用
2、模板的结构同样清晰
3、子模板作为单独的对象,可操控性强
4、扩展性较好
5、每个子模板都是单独的对象,不会出现变量名冲突的问题
不足:
1、如果子模板多的时候,需使用多个smarty实例来实现,PHP代码显得臃肿
2、占用较多的系统资源
3、......
在那个的时候,出于对性能的要求,以及在没有测试的情况下,想当然的认为include的性能一定就比fetch的性能要高,所有本人使用include这个方法,结果随着系统功能的不断的增加,感觉到越写越复杂,这有很大一部分原因是设计的问题,但是模板间的嵌套也是问题之一,于是回过头来考虑使用fetch这个方法。在重新做出决定之前对这个方法的性能做了测试,分别对单个模板的情况下和多个模板的情况进行测试
单个子模板测试:
有三个页面test1.php,test2.php,test3.php。这三个页面都输出同样的内容。test1.php的模板没有嵌套,test2.php的模板使用了一次include,test3.php使用fetch来实现子模板的嵌套。使用apache自带的ab测试访问各个页面所需要的平均时间(单位:ms)
第一次测试时,使用ab -n 10000 对以上三个页面进行10次,每次累计10000个访问,结果如下。
ab -n 10000 | test1.php | test2.php | test3.php | test2/test1 | test3/test1 |
1 | 5.178 | 5.442 | 6.097 | 1.050984936 | 1.177481653 |
2 | 5.253 | 5.972 | 6.027 | 1.136874167 | 1.147344375 |
3 | 5.223 | 6.039 | 5.987 | 1.156232051 | 1.146276087 |
4 | 5.533 | 5.997 | 6.02 | 1.083860474 | 1.08801735 |
5 | 5.557 | 6.308 | 6.03 | 1.135144862 | 1.085117869 |
6 | 5.248 | 6.002 | 5.998 | 1.14367378 | 1.142911585 |
7 | 5.211 | 5.933 | 6.003 | 1.138553061 | 1.151986183 |
8 | 5.303 | 6.031 | 6.048 | 1.137280784 | 1.140486517 |
9 | 5.213 | 5.923 | 6.033 | 1.136197967 | 1.15729906 |
合計 | 47.719 | 53.647 | 54.243 | 1.124227247 | 1.136717031 |
2 番目のテストでは、ab -n 100000 を使用して上記の 3 ページを 1 回実行し、毎回合計 100000 回のアクセスを実行します。結果は次のとおりです。
ab -n 100000 | test1.php | test2.php | test3.php | test2/test1 | test3/test1 |
1 | 5.723 | 7.874 | 8.55 | 1.375851826 | 1.493971693 |
ab -n 50000 | test1.php | test2.php | test3.php | test2/test1 | test3/test1 |
1 | 5.68 | 6.054 | 6.028 | 1.06584507 | 1.061267606 |
test3/test1
1
5.723
ab -n 50000 | test1.php | test2.php | test3.php | test2/test1 | test3/test1 | 1 | 5.68 | 6.054 | 6.028 | 1.06584507 | 1.061267606 テスト方法やツールはあまり良くないかもしれませんが、これらのデータを比較することで、実際のアプリケーションでどの方法を使用するかについて誰もがよく理解できるはずです。 不備や間違いを指摘させていただき、もっとみんなで話し合ってコミュニケーションがとれることを願っています。 |

LeicareleasedtheLeicaLuxcameraappfortheAppleiPhoneafewdaysago.However,theappwasnotdevelopedbyLeica,butbyFjorden.ThecompanyhasbeenknownprimarilyforitscameragripsfortheiPhoneandwasacquiredbyLeicainDecember2023.Fo

SincethedemiseofLogitech'spopularHarmonyremotecontrols,themarketforhigh-qualityuniversalremotecontrolshasbeenfragmentedatbest.UnfoldedCircleaimstoavoidthefateoftheHarmonyUltimatebyeliminatinganyserverobligationsorsubs

Anintriguingthird-partycasefortheGalaxyS24Ultra(curr.$1,099.99onAmazon)hasappearedonmarketplaceslikeAliExpress.Astheimagesthroughoutthisarticleshow,thecasehasasimplesiliconeconstruction.However,italsocontainsanEInkd

WhiletheLightPhone2from2018wasstillequippedwithaneconomicale-inkdisplay,theLightPhone3usesanOLEDdisplaythatcanonlydisplaygrayscale.Thereasonfortheswitchtothe3.92-inchOLEDpanelwithitsresolutionof1,240x1,080isth

In2012,theeminentautomotivejournalistJeremyClarksonstatedthattheLamborghiniAventador,whichhewasreviewingatthetime,wouldbeamongthelastcarstofeatureanaturallyaspiratedV12.Morethanadecadelater,V12-poweredsupercarsareal

TheJabraEliteserieshascometoanend,withGNCEOPeterKarlstromerannouncingthediscontinuationofthewirelessearbudswithinthelineupinapressrelease.Petersaysthatthechangingmarketdynamicsandhowchallengingithasbecometogetas

Audio-TechnicahasunveiledtheATH-S300BTwirelessheadphoneswithhear-throughnoise-cancellation,multipointpairing,and90hoursofbatterylife.Thenoise-cancellingfeaturehasthreemodes:off,on,andhear-through,whereambientsoundscanbehea

Backin2022,whenPCIe7.0wasstartingtotakeshapeasafuturestandard,PCIe5.0wasjusthittingtheservermarketsandtheprospectofseeingPCIe6.0devicesavailableanytimesoon,letalonePCIe7.0ones,wasquitefar-fetched.CurrentlyPCIe5


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
