Smarty前端模板引擎
Smarty
Smarty可以说是我接触PHP这门语言用到的第一个开源框架,当时在Smarty的帮助下,很好地完成了项目的开发,也很好地遵循了MVC的模式。但是到了后来,慢慢地发现,很多人都很熟悉Smarty,但是都不愿意使用它。大概的原因在于:慢。
当初以为Smarty很神奇,到后来发现也是通过PHP来实现的。再到后来别人反映使用Smarty会影响性能,所以也就想深入了解一下它的源代码,看下它是怎么实现的,是不是真的会慢?
其实,Smarty只是用PHP做了一个中间层,来把自定义的一些模板标签再转换成PHP语言,这里面涉及到语法树模式和PHP代码的自动生成。然而,计算机的艺术正在于此:任何的问题,都可以通过一个中间层来实现完成,但也会因此带来性能问题。所以,正是这一层中间层,影响了性能。但同时Smarty也努力通过缓存来填补这块的空缺。但对于好的项目分层、分离前端和后端,Smarty在开发实践中确实有好的作用,这就需要项目在人力成本和服务器成本之间做下权衡吧。
UML静态结构 - 部分
Smarty确实对外表现得很优秀,但是,Smarty里面的结构和代码层次,就个人看来,有些凌乱。以下是部分的UML结构图,其他待补充。
分析与总结
同样,由于当时未能实时纪录,这里罗列一些关键类:
Smarty_Internal_CompileBase(编译的标签,如:循环、赋值、中断等)
Smarty_CacheResource(缓存,如:key-value的缓存、自定义缓存等,这里应该还有引用的缓存)
_smarty_parsetree(语法树解析器,包括:文本、标签、代码等)
Smarty_Template_Source、Smarty_Resource(各种资源:代码、文件包含、字符串、编译/非编译)
由此引申
增加了中间层来实现对模板的解析,会影响性能,但这对人性化开发提供了很好的支撑。更为重要的是,模板引擎这个概念有很多其他框架也可以看到引用。如果觉得Smarty慢或者不符合自己的项目要求,则可以自己实现一套模板引擎规则的解析。例如ThinkPHP对模板的支持,更多信息请参见:http://doc.thinkphp.cn/manual/view.html。
这里可以有一个更深层次的转换,即对语法树模式的使用,这应该会涉及到特定领域语言DSL(更多信息可以看下这本书:《特定领域语言》)。它的作用是通过我们熟悉的语言来实现一些高难度的事情。比如我们觉得对于前端HTML开发人员使用PHP语言来输出数据是件痛苦的事情,那么我们提供类似的标签给他们使用。
再深一层,比如我们(PHP开发人员)觉得用C/C++来开发PHP的扩展是件痛苦或者很高难度的事情,我们可以使用zephir来编写。
这里稍微说一下zephir,zephir是由phalcon(关于phalcon开源框架,后面会说到,不得不说,这是一个非常优秀的开源框架!)团队提供的一种可以用来开发PHP扩展的语言,官方文档请见:http://zephir-lang.com/index.html。它的机制也是通过自己的解析器对zephir的代码转换成C的代码,从而实现PHP扩展开发。
之前,我试着体验了一下zephir,感觉还不错,以下是当时一个尝试示例:[Zephir开发实践]用Zephir编写PHP扩展实践 http://my.oschina.net/u/256338/blog/284540

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Nach seiner hochkarätigen Akquisition durch Facebook im Jahr 2012 nahm Instagram zwei APIs für den Einsatz von Drittanbietern ein. Dies sind die Instagram -Graph -API und die Instagram Basic Display -API. Ein Entwickler, der eine App erstellt, die Informationen von a benötigt

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio
