Engenharia de Software
Utilizando as atuais e as mais avançadas técnicas de desenvolvimento de software para web, XPT Framework, foi inspirado na plataforma Java e Ruby On Rails com total orientação a objeto para PHP.
MVC
XPT Framework usa a mais avançada técnica, o MVC (Model, View, Controller) possibilita separar todo conteúdo da sua aplicação, maximizando a fase de manutenção que também facilita o programador fazer todo o web site sem se preocupar com o design, podendo assim dividir tarefas de design e programação que antes era praticamente impossível executa-las em tempos diferentes.
Boas praticas de desempenho
Também baseado na “Best Practices for Speeding Up Your Web Site” (Boas praticas de desempenho para seu site) o XPT Framework obteve nota máxima em sua classificação, pois conta com todos os recursos abaixo:
Make fewer HTTP requests
Segundo Steve Souders, que é o Chief Performance do time de performance do Yahoo!, 80% do tempo gasto por um usuário numa página é carregando o front-end e que a maior parte desse tempo de carregamento é tomado pelo download de imagens, scripts, css, flash, etc.
Para garantir esta classificação e manter toda organização de arquivos separados, o XPT Framework permite carregar vários arquivos Javascript e CSS em um único URI, veja o exemplo:
<script type="text/javascript" src="application/resources|js/global/jq/ui/corner/jquery.corner.pack.js|js/global/jq/ui/rssli/rssli.js|js/global/jq/ui/box/lightbox.js|js/global/jq/ui/form/form.pack.js"></script>
Repare que o atributo src contem vários scripts, eles estão separados por uma |.
Usufruindo deste recurso e utilizando mais outras técnicas como o “CSS Sprites” e “Mapa de Imagens”, contribuirá por um aplicativo muito veloz.
Add an Expires header
O cabeçalho Expires diz ao browser a data que os componentes daquela requisição irão expirar, ou seja, se você determina um prazo de 5 anos para uma página expirar, todos componentes nela contidos somente expirarão em 5 anos.
Com isso, todos os componentes (imagens, CSS, scripts, Flash, etc.) serão colocados em cache e, nas próximas visitas, o número de requisições HTTP será menor pois os componentes poderão ser acessados diretamente do cache do browser.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
#ExpiresByType text/javascript "access plus 6 month"
#ExpiresByType application/x-javascript "access plus 6 month"
</IfModule>
Editando seu arquivo .htaccess com este script pouco conhecido ganhará performance.
Gzip components
O XPT Framework usa as recomendações de performance e não poderia deixar de lado a incrível técnica chamada Gzip.
Esta técnica é faz com que os componentes sejam compactados através da requisição HTTP para que o tempo de resposta seja menor, fazendo com que os componentes sejam carregados mais rápidos no cliente.
private $checksum_data_nocache = 0; /** * Constante usada para definir se a saida HTML pode ser cacheada ou não. * Lembrando que so fica em cache se tambem a opção estiver definida no config.php * @var bool */ const OUTPUT_CACHEABLE = false; const OUTPUT_GZIPED = true; public function __construct(&$config,$controller_name = self::CONTROLLER_NAME,$action='index'){ parent::$config = &$config;
if( $config['gzip']['enabled'] && $gziped ){ /** * Devido a um bug de compressão de dados no MSIE 6.0, os headers não são salvos. * Com isto é impossível fazer cache com gzip ativo. */ if( ($this->is_MSIE6() && !$cacheble) || !$this->is_MSIE6() ) ob_start ("ob_gzhandler"); }
Neste ultimo bloco é feito um tratamento do bug no IE 6 que deixe de usar o modo Gzip quando se utiliza em conjunto o cache lado cliente.
Minify JS
Esta técnica consiste em reduzir o tamanho do código javascript das tags HTML SCRIPT, removendo espaços, tabulações e comentários deixando apenas o que é necessário para o funcionamento do código.
Isto é feito após a primeira execução da pagina, pois a demais requisições são feitas a partir dos layouts compilados e os layouts originais não são alterados.
public function index($templete = self::CONTROLLER_NAME){
$this->view->loadModule('output','packjs');
parent::index($templete,$this->view);
}
Configure ETags
ETags é o acrônimo para Entity Tags. Isto é um mecanismo que servidores WEB e browsers usam para determinar se o arquivo do servidor é o mesmo que está no cache do browser.
O valor da ETag é gerado dependendo das configurações do servidor e de acordo com as características atuais do arquivo.
O XPT Framework usa headers como estes para cache, pois é muito útil para dizer se um arquivo PHP (fisicamente ou dinamicamente, ou seja, banco de dados), JS, CSS sofreu modificações evitando assim downloads desnecessários garantindo o baixo uso de banda.
Entrega por estágios
É um framework modular que se tem o total suporte ao clico de vida da engenharia de software conhecida como "Entrega por estágios" onde são desenvolvidas as fases de Especificação, Análise e Desenho Inicial de todo o sistema e em seguida são entregues ao cliente liberações parciais do produto e após o entendimento de todo o problema, implementa-se o sistema por partes tendo como vantagem a utilização do sistema a cada modulo entregue.
Ex: Entrega-se o modulo cadastro de cliente. (Seu cliente poderá utilizar o cadastro antes mesmo do restante do software concluído.)
URLs amigáveis
O XPT Framewerk conta com o uso de URLs amigáveis com mod_rewrite do apache possibilitando URLs intuitivas e com isto ganhamos com SEO (Search Engine Optimization), usabilidade e acessibilidade dos web sites.
Abstração de banco de dados
Com as classes de abstração de banco dados o XPT Framework suporta atualmente dois tipos de banco de dados, Microsoft SQL Server e MySQL, sendo configurável no arquivo config.php na pasta config, que oferece o poder de troca de banco de dados sem se preocupar.
Contudo é possível criar novos drivers de forma muito rápida, pois basta herdar as classes de interface (IDBDriver) e abstrativas (aDBAdapter, aDBDriver) de banco de dados e terás um novo driver.
Exemplo:require_once 'abstract.DBDriver.php'; require_once 'class.mssqlAdapter.php'; final class clsMSSQL extends aDBDriver implements iDBDriver{ /** * Para executar query sql e retornar um RecordSet. * @access Public * @param string $q * @return clsMSSQLAdapter */ public function Execute($q){
require_once 'abstract.DBAdapter.php'; final class clsMSSQLAdapter extends aDBAdapter{
Observe que foi criando um drive MSSQL que estende de aDBDriver que é implentação de IDBDriver.
No segundo exemplo é criado uma nova classe Adapter herdada de aDBAdapter para manipular os dados do novo driver.





