ao mecanismo de template
Smarty - PHP
de
: cjjer Fiz algumas alterações
para usar PHP para implementar a camada lógica e a camada de apresentação do modelo de desenvolvimento MVC. Há uma variedade de mecanismos de template para escolher, mas após o nascimento. do motor oficial SMARTY, a escolha mudou. Seu conceito e implementação são bastante vanguardistas. Este artigo discute principalmente as diferentes características do SMARTY em comparação com outros mecanismos de modelo, apresenta brevemente a instalação e o uso do mecanismo e usa um pequeno caso de teste para comparar a velocidade e facilidade de uso do modelo SMARTY e PHPLIB.
1. MVC requer modelos.
MVC foi resumido pela primeira vez como um padrão de design durante o processo de desenvolvimento da linguagem MVC, representando modelo, visualização e controle, respectivamente. O objetivo é permitir que diferentes funções de desenvolvimento executem suas respectivas funções em grandes e médios tamanhos. projetos. No desenvolvimento de aplicações de rede, o diagrama a seguir pode ser usado para representar a relação entre conceitos.
Esta figura mostra um aplicativo WEB simples. As informações que o usuário vê no navegador são o conteúdo do servidor de banco de dados, mas já foram processadas pelo servidor de aplicativos. Os desenvolvedores são responsáveis por estabelecer estruturas de dados, lógica para processamento de dados e métodos para representação de dados.
Quando o CGI se tornou popular na China em 1996, os primeiros programadores WEB eram todos autodidatas em HTML. No entanto, à medida que a velocidade da rede aumentava passo a passo, o tamanho da página também aumentava. dos 20 a 30 K originais, disparou dez vezes. Escrever programas CGI cria um requisito urgente: separar o código-fonte PERL e HTML. Assim, o progresso social reflecte-se na divisão do trabalho dentro da equipa de desenvolvimento. Como os artistas e os programadores não estão muito familiarizados com o trabalho uns dos outros, eles precisam usar uma linguagem acordada para se comunicarem durante a cooperação.
Este idioma não é nosso idioma nativo ou inglês. O termo é chamado de modelo, e a lógica e a apresentação dependem disso. É um método de expressão que combina as características das linguagens HTML e de script. Desta forma, a camada de apresentação pode exibir os dados processados pela camada lógica no formato desejado pelo usuário. Se você tem experiência em desenvolvimento MFC na plataforma Windows, certamente estará familiarizado com o encapsulamento de Document/DocumentTemplate/View. Este é um exemplo muito típico de MVC. Para aplicativos da Web, pessoalmente acho que EJB/servlets/JSP em J2EE são os mais poderosos e, claro, existem Structs simples e bonitos. Outra implementação bem conhecida é COM/DCOM+ASP. Esta combinação é utilizada pela maioria das pessoas em nosso país.
Comparando diversas implementações MVC em aplicações WEB, podemos ter um conceito sobre templates: um conjunto de scripts inseridos em HTML, ou script HTML, através do qual o conteúdo inserido representa dados alterados. A seguir está um exemplo de arquivo de modelo. Após o processamento, esse modelo exibe Hello, world!
O método de processamento de$greetings
foi omitido por enquanto e será discutido posteriormente para comparação.
2. Por que escolher SMARTY?
Para PHP, existem muitos mecanismos de modelo para escolher, como o primeiro PHPLIBtemplate e o Fasttemplate estrela em ascensão. Após várias atualizações, eles se tornaram bastante maduros e estáveis. Se você está muito satisfeito com o mecanismo de modelo que possui atualmente, então... continue lendo. Acredito que como um entusiasta de software livre ou um desenvolvedor que busca eficiência e elegância, a seguinte introdução do SMARTY será um tanto interessante.
Além da influência da preferência pessoal, sempre tive tendência a usar implementações de padrões oficiais, como o mecanismo XML Axis do APACHE. A vantagem é que você pode obter a melhor compatibilidade possível (por exemplo, a compatibilidade do MFC anterior com o Win3x era melhor do que outras estruturas de aplicativos e, claro, agora todas as versões estão muito completas). Antes do lançamento do SMARTY, eu usava o Integrated Template eXtension no PEAR. Este mecanismo é quase compatível com PHPLIBtemplate e Fasttemplate Da sintaxe do template ao processamento do template, o template é lido na memória e então a função parse() é chamada para substituir as tags predefinidas por dados.
Vamos ver como o SMARTY faz isso. Depois de receber a solicitação, primeiro determine se o URL foi solicitado pela primeira vez. Em caso afirmativo, compile o arquivo de modelo necessário para o URL em um script php e, em seguida, redirecione; compilado. Verifique Você pode redirecionar imediatamente sem recompilar. As condições de recompilação podem ser definidas para um limite de tempo fixo.
Que tal? Parece familiar? Pensando bem— Não é esse o princípio do JSP! Na verdade, esse tipo de compilação parece incrível quando usado em um mecanismo de script interpretado como o PHP, mas se você pensar bem, o JAVA também não é interpretado e executado pela JVM? Isso significa que nada é impossível, apenas inimaginável.
Agora que falamos sobre JAVA, deixe-me expressar minha opinião sobre o futuro do PHP. O site oficial do PHP anunciou que a versão PHP 5.0 será lançada no final de 2003. Esta versão possui muitos recursos novos: como tratamento de exceções, namespaces, mais orientação a objetos, etc. Pode-se dizer que está cada vez mais próximo do JAVA, e o SMARTY também é uma das novidades, tornando o PHP mais adequado para o desenvolvimento de projetos de grande e médio porte. Mas parece estar cada vez mais longe do motivo pelo qual o escolhi: flexibilidade e facilidade de uso. Mas do ponto de vista do ciclo de vida de um software, o PHP está em fase de crescimento, e as vantagens superam as desvantagens para os desenvolvedores dar-lhe mais funções na esperança de que possa ser competente para aplicações comerciais. Como um usuário fiel de PHP, você certamente não quer que o PHP seja sempre acusado de capacidades insuficientes, certo?
POR QUE ESCOLHER SMARTY, SÓ PORQUE É COMO JSP? Certamente existem razões melhores. Em primeiro lugar, além do custo relativamente alto da primeira compilação, desde que o arquivo de modelo não seja modificado, o script de cache compilado está disponível a qualquer momento, economizando muito tempo de análise (). biblioteca de funções ricas como PHP. Desde contagem de palavras até recuo automático, quebra automática de texto e expressões regulares, você pode usá-la diretamente se achar que não é suficiente, por exemplo, você precisa da função de exibição de paginação do conjunto de resultados de dados, SMARTY; também possui fortes capacidades de expansão, que podem ser expandidas por meio de plug-ins.
Os fatos falam mais alto que as palavras. Projetei um programa de teste e comparei SMARTY e PHPLIBtemplate com base nos dois fatores de velocidade e dificuldade de desenvolvimento. A razão pela qual escolhi PHPLIBtemplate é que no artigo de Patrick "Escolhendo o modelo mais adequado no mundo PHP", há uma comparação entre PHPLIB. template e Fasttemplate Competition, PHPLIBtemplate obteve uma grande vitória, o que deu ao SMARTY um bom oponente. Antes de testar, vamos falar sobre os problemas que precisam ser observados durante o processo de instalação.
3. Problemas que você pode encontrar
No site oficial da SMARTY, existe um manual do usuário detalhado e você pode escolher versões online nos formatos HTML e PDF. Não abordaremos aqui o conteúdo existente no manual, apenas explicaremos os problemas que você pode encontrar durante o primeiro uso.
A primeira pergunta é muito fatal: diz que o arquivo necessário não foi encontrado? Nem todo mundo escreve aplicativos de acordo com a estrutura de diretórios padrão do SMARTY. Isso precisa ser especificado manualmente. Supondo que a estrutura de diretórios seja a seguinte:
Você precisa especificar a estrutura de diretórios em index.php:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
O primeiro problema foi resolvido e depois vem o segundo: Por que o lindo modelo que acabei de gerar com o Dreamweaver não pode ser usado? Não é que haja algo errado com o arquivo de modelo, é porque o delimitador de tag padrão do SMARTY é {} e, infelizmente, o Javascript definitivamente contém essa tag. Felizmente, podemos usar qualquer caractere como delimitador, além destas duas sentenças:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Agora a instalação está basicamente concluída, sem problemas.
4. Contraste e Analogia
Primeiro, pense no desenho do teste. O principal fator de julgamento é, obviamente, a velocidade. Para os testes de velocidade foi utilizada uma média aritmética. Repita a geração da página N vezes na página de teste e compare o tempo total de geração da página. Outro fator importante é a facilidade de uso (quanto à escalabilidade, não há necessidade de comparar os resultados), portanto o template utilizado não pode ser muito pequeno. Eu uso a página da minha página pessoal, um arquivo HTML gerado com Firework+Dreamweaver, com cerca de 7K de tamanho. As configurações das variáveis também adotam os blocos mais comumente usados, que são chamados de blocos no template PHPLIB e seções no SMARTY. Não subestime a diferença nos nomes. Os critérios de usabilidade são divididos em duas partes: se a sintaxe dos arquivos de modelo e dos arquivos de script é concisa e fácil de usar.
Vamos mergulhar nos testes. Vejamos primeiro a sintaxe dos dois arquivos de modelo: o lado esquerdo da barra azul é o modelo PHPLIB e o lado direito pertence ao SMARTY. As preferências pessoais variam, por isso não comentarei aqui. Concentre-se em comparar as instruções de processamento no script, primeiro observe o modelo PHPLIB:
$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows');
for ($j = 0; $j < 10; $j++){
$tpl->set_var('tag' ,"$j");
$tpl->parse('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');
O seguinte é SMARTY:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY usa apenas duas variáveis, tags e linha, enquanto o modelo PHPLIB possui um manipulador de arquivo de modelo adicional e uma saída inexplicável. Para ser honesto, eu não sabia por que isso existia quando aprendi. Ainda parece estranho agora. Por que a SMARTY tem tão poucas declarações de processamento? A resposta é que o trabalho é feito pelo motor. Se você gosta de se aprofundar no programa fonte, poderá descobrir que existe uma função chamada _compile_tag() em Smarty_compiler.class.php, que é responsável por converter a tag de seção em uma instrução PHP. Este não é um rótulo comum. Ele possui parâmetros e dados, o que economiza a carga de trabalho da programação do script. A carga de trabalho no rótulo do modelo não é muito diferente.
Agora é a nossa vez de focar na velocidade. Afinal, para um desenvolvedor web qualificado, é apenas uma questão de tempo dominar a ferramenta mais difícil, sem falar no mecanismo de template, uma tecnologia com uma curva de aprendizado suave. Velocidade é a vida de uma aplicação web, principalmente quando o template engine é utilizado em um site com grande número de visitas simultâneas, o que é ainda mais importante. Antes do início do teste, pensei que o template PHPLIB venceria neste aspecto porque ele foi atualizado diversas vezes e basicamente não possui bugs. Além disso, o mecanismo do SMARTY é muito grande, ao contrário de seu oponente que possui apenas dois arquivos.
Com certeza, os resultados do teste são mostrados abaixo, o modelo PHPLIB tem uma vantagem de velocidade de 25%:
Mas nem sempre será assim. Pressionei atualizar novamente e desta vez obtive um resultado diferente:
PHPLIB permanece basicamente inalterado, mas SMARTY aumentou a velocidade em 25%. Continue a atualizar e você obterá resultados semelhantes aos da segunda vez: SMARTY é quase 10% mais rápido que o modelo PHPLIB. Acho que é por isso que a versão compilada é mais rápida que a versão interpretada. O mecanismo SMARTY em si é muito grande e o modelo precisa ser compilado em um arquivo php, portanto a velocidade certamente não é tão rápida quanto o modelo PHPLIB compacto. Mas este é apenas o caso pela primeira vez. Ao receber a solicitação pela segunda vez, a SMARTY constatou que o modelo já havia sido compilado, portanto a etapa mais demorada foi ignorada e o oponente teve que realizar a busca e substituição passo a passo. Este é um exemplo clássico de “troca de espaço por tempo” mencionado nos princípios de compilação.
5. Conclusão
A conclusão é que se você se apaixonou pelo SMARTY, então o que está esperando? Claro, isso não significa que seja onipotente. Assim como quando uso o modelo MVC para escrever meu site pessoal, isso não apenas não reduz a carga de trabalho, mas sempre tenho que me preocupar com o acoplamento entre os diferentes níveis.
Para que o SMARTY não é adequado? Veja um exemplo clássico do manual: o site de previsão do tempo. Mais uma coisa vem à mente: o mercado de ações. Usar SMARTY neste tipo de site será ineficiente devido à recompilação frequente, então o modelo PHPLIB é mais adequado.
Este artigo não tem como objetivo comparar os dois motores, mas sim ilustrar as vantagens do SMARTY. O mais significativo de usá-lo é que ele faz parte do novo sistema PHP. Como força independente, além dos dois principais sistemas .NET e JAVA ONE, existem outras opções para desenvolvimento web de grande e médio porte. Para o projecto GNU, o seu significado não é diferente do exército de Liu e Deng saltando milhares de quilómetros nas Montanhas Dabie.
Autor: Yu Boxiang