Livro Alta Performance em Sites Web

Livro Alta Performance em Sites Web


Recomendo a leitura do livro Alta Performance em Sites Web, conhecimento essencial para engenheiros de front-end. É de extrema importância para os desenvolvedores web, sejam os programadores, os css designers ou qualquer outro profissional relacionado ao desenvolvimento de web sites, ter o mínimo de conhecimento sobre performance em suas aplicações. Esse livro foi escrito por Steve Souders, engenheiro de front-end do Yahoo. Ele mostra várias dicas e técnicas utilizadas para aumentar a performance de uma aplicação web, e praticamente todas elas, se não me engano, foram utilizadas no site do Yahoo. Outro detalhe importante é a ferramenta que ele desenvolveu para medir alguns quisitos de performance, YSLOW, que para ser utilizada é necessário o navegador FireFox com o plug-in firebug.
Vou fazer um breve comentário sobre os tópicos mais importantes do livro.

Faça menos requisições HTTP - nessa parte Steve Souders explica como diminuir as requisições HTTP que sua aplicação faz, consequentemente diminuindo o tempo de carregamento de uma página.

Use uma rede de distribuição de conteúdo - (CDN - content delivery networks) é uma coleção de servidores web distribuídos por vários lugares, distribuem conteúdo para os usuários de forma inteligente.
Obviamente que não são para aplicações de pequeno e médio porte, pois o custo é relativamente alto.

Adicione um Cabeçalho Expires - para o usuário não necessitar recarregar todos os componentes de sua página toda vez que visitar seu site, deve-se definir um cabeçalho expires com uma data futura, dessa forma os componentes só serão baixados novamente quando essa data for atingida, lembrando que essa prática é de maior valida para componentes de pouca atualização, para resolver esse problema Steve sugere nomear os componentes com versionamento, assim se o componente mudar, muda-se o nome do componente e ele será baixado novamente.

Componentes Gê-zip - Steve recomenda a compactação dos componentes, mostra o mod_deflate do Apache (obs.: os exemplos geralmente utilização programação PHP e Apache). Coloque as folhas de estilo no topo - Aqui Souders explica a diferença de colocar as folhas de estilo ( CSS ) em um arquivo externo, colocar no topo da página etc. Deve-se colocar as folhas de estilo no topo pois serão carregadas primeiro, quando o usuário começar a visualizar a página não terá grandes distorções no layout. Colocar o css em um arquivo externo é uma boa prática, pois dessa forma ficará no cache do browser, entretanto se estiver diretamente na página carregará mais rápido (geralmente utilizado na página inicial para aumentar a performance).

Minimize o javascript - nesse capítulo Souders ensina a técnica de minimizar os códigos javascript, tornando seus scripts realmente muito menores.

Bom, fica aí a dica, para maiores detalhes leia o livro!

Um termo que está em evidência nos dias de hoje é o de computação nas nuvens (cloud computing). Consiste em armazenar dados em uma nuvem de computadores, a internet.
Hoje estamos acostumados a salvar dados, por exemplo, no disco rígido de nosso computador, ou seja, localmente. Com o conceito de computação nas nuvens, nossos arquivos, aplicações e etc, ficariam gravados nos servidores da internet, assim poderíamos acessá-los de qualquer lugar através de um dispositivo com acesso à internet.
O Google afirma que o futuro está nas nuvens e dessa forma não seriam necessários grandes requisitos de hardware para os computadores, pois os softwares rodariam no servidor. Assim o preço dos aparelhos ficaria mais barato tornando-os mais acessíveis e gerando grande inclusão digital, principalmente nos países subdesenvolvidos.
A Microsoft tem uma visão mais conservadora sobre esse conceito. Acredita que grande parte das empresas não trocariam as suas intranets para armazenar seus dados confidenciais na internet, por uma questão de segurança e também por viabilidade técnica, já que provavelmente seus ERPs teriam que ser reescritos em uma linguagem web, por exemplo.

Na minha visão, o conceito de computação nas nuvens é fantástico, pois não nos limita a ter de carregar fisicamente nossos dados e muitas pessoas que ainda não tem acesso à internet provavelmente teriam mais condições de “entrar” na rede. Entretanto, deveremos confiar em deixar nossas informações nas mãos de terceiros? Acredito que essa é a grande questão, sem contar a infra-estrutura necessária, pois a confiabilidade ainda não é muito convincente.Vejo também que os verdadeiros beneficiados com isso tudo seriamos nós, os usuários de internet, porém acredito que nem tudo ficará armazenado nas nuvens.
Para um programador php em Sorocaba talvez pareça muita tecnologia, talvez não.

Matéria do Jornal Da Globo sobre o Google, Microsoft e a computação nas nuvens:

 

A Mozilla divulgou que o navegador Firefox 3 obteve cerca de  8 milhões de downloads nas primeiras 24 horas após o seu lançamento. Concorrente do Internet Explorer, da Microsoft, o Firefox superou a marca anterior de 1,6 milhões de arquivos baixados quando lançou o Firefox 2, em outubro de 2006.
Apesar de algumas quedas no site, os desenvolvedores do programa afirmaram que a média foi de 9 mil downloads por minuto. Eles esperavam entrar para o Guiness (o livro dos records) com 5 milhões de downloads. Em apenas algumas horas o número de downloads foi maior que o do Firefox 2 nas suas primeiras 24h.
O pessoal da Mozilla pede paciência enquanto os avaliadores do Guiness revisam a tentativa de Recorde, pois isso pode levar alguns dias.

Os novos recursos são:

Gerenciador de Senhas
Memorizar senhas de sites sem ver nenhum popup.
Favoritos em Um Clique
Anotar, procurar e organizar sites favoritos de forma rápida e fácil.
Melhor Performance
Visualizar páginas rapidamente, utilizando menos memória do seu computador.
Campo de Endereços Inteligente
Encontrar os sites que você gosta em segundos. Digite um termo para obter resultados instantâneos que fazem sentido.
Identidade em um clique
Evitar golpes online, transações inseguras e fraudes utilizando a identificação simplificada de sites.
Zoom Completo
Visualizar qualquer parte de páginas Web, de perto e com clareza, em segundos.
Aparência integrada ao Sistema
Navegue com um Firefox integrado ao seu sistema operacional.

Em performance podemos destacar:

Gerenciamento de memória aperfeiçoado
JavaScript mais rápido
Menor Utilização de Memória
Carregamento de páginas mais rápido
Melhorias no suporte gráfico

É um modelo de linguagem, não um método. Um método pressupõe um modelo de linguagem e um processo. O modelo de linguagem é a notação que o método usa para descrever o projeto. Os processos são os passos que devem ser seguidos para se construir ou para se construir o projeto.
O modelo de linguagem corresponde ao ponto principal da comunicação. Se uma pessoa quer conversar sobre o projeto, como outra pessoa, é através do modelo de linguagem que elas se entendem. Nessa hora, o processo não é utilizado.
A UML define uma notação e um meta-modelo. As notações são todos os elementos de representação gráfica vistos no modelo (retângulo, setas, o texto, etc.), é a sintaxe do modelo de linguagem. Um meta-modelo é um diagrama de classe que define de maneira mais rigorosa a notação.
A UML é uma linguagem-padrão para a elaboração da estrutura de projetos de software.
Pode ser empregada para a visualização, especificação, construção e documentação de artefatos que façam uso de sistemas complexos de software, orientados a objeto.

Retirado da matéria de .NET da Faculdade de Tecnologia de Sorocaba - FATEC.

Consiste em abordar a resolução de um problema, através da análise das entidades e seus relacionamentos, dentro do contexto onde se situa o problema. A partir dessa análise é construído um Modelo de Resolução que represente, da melhor maneira possível, aquilo que acontece no mundo real.
Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de projeto.
A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Retirado da matéria de VB.NET da Faculdade de Tecnologia de Sorocaba - FATEC.

Consiste em uma forma de resolução de problemas em computador, pela divisão do problema maior (principal), em problemas menores e assim sucessivamente. A solução do problema maior ocorre pela solução, em determinada ordem, dos problemas menores.
O modelo de resolução de cada problema menor passa pela análise das entradas e saídas necessárias a resolução do problema, e pela definição do processo que irá transformar as entradas em saídas.

Retirado da matéria de VB.NET da Faculdade de Tecnologia de Sorocaba - FATEC.

Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretação, que juntas podem ser chamadas de tradução.
Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar (ou rodar, como se diz no jargão da computação) o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C (linguagem de programação).
Se o texto do programa é traduzido na medida em que vai sendo executado, como em Javascript, Python, Perl ou PHP, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente (freqüentemente linguagens interpretadas são chamadas também de script).
Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como o Java e C#. E também há outras formas de interpretar em que os códigos-fontes, ao invés de serem interpretados linha-a-linha, têm blocos “compilados” para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como Just-in-Time.

Retirado da matéria de .NET da Faculdade de Tecnologia de Sorocaba - FATEC

PHP para quem conhece PHP

Indico a leitura do livro PHP para quem conhece PHP.

Segue Resenha:
PHP para quem conhece PHP apresenta recursos avançados desta poderosa linguagem de programação para a Web. Aborda diversos assuntos úteis ao desenvolvedor, como cookies e sessões, upload de arquivos, geração de imagens e gráficos, arquivos PDF, templates, abstração de bancos de dados, entre outros. Além disso, contém uma abrangente revisão sobre PHP, para aqueles que tiveram pouco contato com a linguagem.
Assim como nas demais obras do autor, neste livro a didática também é o ponto forte, o que permite ao leitor o rápido entendimento de assuntos aparentemente complexos. Para facilitar a compreensão dos conteúdos, são apresentados vários exemplos de programas e, ao final, um estudo de caso envolvendo diversos recursos da linguagem.

Nesta obra, você irá encontrar os seguintes assuntos:
- Revisão da linguagem PHP.
- Como melhorar o processamento de formulários HTML.
- Manutenção de informações com cookies e sessões.
- Uso de arquivos no formato texto para o rápido armazenamento e recuperação de dados.
- Envio de e-mails utilizando o PHP, incluindo o uso do formato HTML.
- Upload de arquivos e explicação das diferenças entre o uso dos protocolos FTP e HTTP.
- Geração e manipulação de imagens, incluindo a criação de diferentes tipos de gráficos (pizza, colunas e linhas).
- Criação de documentos no formato PDF, incluindo a geração de relatórios a partir de consultas SQL.
- Ferramentas de templates (modelos) e apresentação da Smarty (http://smarty.php.net), uma das mais utilizadas.
- Abstração de bancos de dados com as extensões dbx e PEAR::DB.

Ler “PHP para quem conhece PHP” é indispensável para quem deseja se tornar um especialista nessa linguagem!

Após o sucesso do PHP, do Ruby, principalmente com a plataforma Rails, e do crescimento exponencial de Python, a Microsoft investe para disponibilizar estas novas linguagens também na plataforma .NET. Com a filosofia “desenvolva em qualquer linguagem, desde que seja na minha plataforma”, a Microsoft vem ganhando cada vez mais adeptos, e gerando cada vez mais recursos para facilitar e fidelizar (ou evangelizar, como a MS gosta de falar) o desenvolvedor.

Linguagens dinâmicas
As linguagens dinâmicas existem desde 1956, com o Lisp, depois seguidas pelo Fortran, Logo, SmallTalk, PhP, Python, Ruby, JavaScript, entre outras. Diferente das linguagens estáticas, as linguagens dinâmicas não validam o código durante a compilação, mas sim em tempo de execução, podendo ser uma grande vantagem quando é necessário fazer alterações sem muita “burocracia”.

Em projetos que se requer agilidade, o uso deste tipo de linguagem é de grande valia, pois permite realizar basicamente o que você quiser, com pouco código, porém como tudo na vida há um preço a se pagar, por exemplo: é mais difícil se aproveitar um código dinâmico do que um código “estático”.
Performance
Umas das grandes preocupações de linguagens dinâmicas é a performance da aplicação. Em testes, a versão do Python para o .NET, o IronPython apresentou performance equivalente ou superior à versão do Python baseada em C. Existe uma crença de que linguagens dinâmicas possuem uma performance inferior às linguagens estáticas, porém com as máquinas cada vez mais poderosas, esta diferença fica cada vez menos observável.

DLR
O DLR (Dynamic Language Runtime) permite rodar linguagens dinâmicas em cima do CLR (Common Language Runtime), que provê serviços comuns a todas as linguagens suportadas pelo framework. O DLR inclui funcionalidades que suportam linguagens dinâmicas, como a criação de códigos dinâmicos de forma rápida, além de prover suporte para as bibliotecas já existentes no framework .NET e manter uma interoperabilidade com as linguagens estáticas. É possível, por exemplo, utilizar bibliotecas criadas em C#, dando um poder imenso de criação, não precisando assim, recriar códigos prontos.

Atualmente a MS está desenvolvendo o suporte para DLR as linguagens Python, JavaScript (EcmaScript 3.0), Visual Basic e Ruby.
Mono
O mais famoso software para rodar e desenvolver .NET no Linux possuí suporte para o rodar linguagens dinâmicas no .NET (DLR), dando ainda mais flexibilidade.

http://www.mono-project.com/Languages

Ruby
Para manter a praticidade, a linguagem possui algumas características interessantes, na Wikipedia (2008) encontramos as seguintes informações à esse respeito:

A sintaxe é enxuta, quase não havendo necessidade de colchetes e outros caracteres.
Todas as variáveis são objetos, onde até os “tipos primitivos” (tais como inteiro, real, entre outros) são classes.
Estão disponíveis diversos métodos de geração de código em tempo real, como os “attribute accessors”.
Através do Ruby Gems, é possível instalar e atualizar bibliotecas com uma linha de comando, de maneira similar ao APT do Debian Linux.
Code blocks (blocos de código), ajudam o programador a passar um trecho de instruções para um método. A idéia é semelhante aos “callbacks” do Java, mas de uma forma extremamente simples e bem implementada.
Mixins, uma forma de emular a herança múltipla, sem cair nos seus problemas.
Tipagem dinâmica, mas forte. Isso significa que todas as variáveis devem ter um tipo (fazer parte de uma classe), mas a classe pode ser alterada dinamicamente. Os “atalhos” citados acima, por exemplo, se beneficiam da tipagem dinâmica para criar os métodos de acesso/alteração das propriedades.
Fonte: http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programa%C3%A7%C3%A3o)

Iron Python
Possui características análogas ao Ruby. Permite suporte ao Silverlight, para testar, existe um console. (http://silverlight.net/Samples/1.1/DLR-Console/python/index.htm)

O Site do projeto oficial é: http://codeplex.com/IronPython

Phalanger (PHP)
O site oficial do projeto é: http://www.codeplex.com/Wiki/View.aspx?ProjectName=Phalanger

Linguagens suportadas pela plataforma .NET
Existem uma série de linguagens suportadas pela plataforma .net. Algumas ainda em estado embrionário e não oficial enquanto outras já com apoio oficial da MS. No link abaixo, segue uma lista.

Acesse: http://dotnetpowered.com/languages.aspx

Considerações finais.
Em desenvolvimento, não está importando muito a linguagem que utilizamos. O que importa é com que rapidez e qualidade com que entregamos um projeto. É sempre importante conhecermos novas linguagens, e para isto, certamente a plataforma .NET dará todo apoio necessário.

Fonte: http://imasters.uol.com.br/artigo/8652/dotnet/rode_php_ruby_python_e_outras_linguagens_no_net/

O analista de sistemas deve ser capaz de compreender as disciplinas de engenharia de software e as das atividades da organização . A relação existente entre essas duas áreas e o nível corrente de tecnologia determinam a interação entre o exeqüível e o desejável. Cada aplicação em potencial deverá ser submetida a uma séria de exames para se verificar se, de fato, a função solicitada apresentará a  qualidade de desempenho almejada pelo usuário. Se a melhoria em questão parecer ser viável, e havendo os recursos necessários à elaboração da aplicação, o projeto recebe a permissão para prosseguir. Nesta conjuntura, o papel do analista de sistemas muda e o detalhe citado anteriormente deve ser substituído. Para tanto, torna-se necessário identificar as funções que serão entregues quando a aplicação terminar. As funções representarão os “testes” que a aplicação completa deverá satisfazer, a fim de provar que os requisitos foram, realmente, atendidos.
Depois que se estabelece o detalhe  e se especifica totalmente o “que”  pelo menos em sua versão primeira, o papel do analista de sistemas muda mais uma vez, passando a ser o de arquiteto do software e gerente de projeto. O “que ”deverá ser transformado em “como”, simultaneamente á verificação contínua de que a aplicação permanece atendendo ás especificações detalhadas do sistema.
As funções de serviço atribuídas ao analista de sistemas e a profissão ligada á analise de sistemas são extremamente vastas. Muitas organizações definem uma categoria denominada programador / analista, ampliando ainda mais a descrição. Assim, de acordo com a abrangência do título do cargo tanto as organizações quanto os indivíduos se enquadram numa larga gama de usos. As organizações maiores possuem departamentos distintos para analise e programação e contam com analistas que “vivem” ou num grupo ligado a análise de desenvolvimento de sistemas, ou na organização do negócio que utilizará a aplicação. Algumas organizações possuem o cargo de arquiteto de sistemas; outras, o de gerente de projetos e outras ainda o de projetistas de sistemas. Usar-se-á, aqui, uma definição, relacionada com a função e não com as pessoas que desempenham os papéis. A analise de sistemas será discutida em termos de tais funções, desde suas definições básicas até o atual, escrita em código, exclusive…

Retirado da matéria de Análise e Projeto de Sistemas, ministrada pelo professor Levi, na Faculdade de Tecnologia de Sorocaba, a melhor Faculdade de Sorocaba.

Tecnólogo em Processamento de Dados

Atuando nas áreas de Análise de Sistemas, é capaz de desenvolver e administrar projetos de Sistemas de Informação. Conhece características de equipamentos, estando apto a fazer estudos de necessidades e viabilidade técnico-econômica de equipamentos e Sistemas de Informação. Conhece administração de empresas, podendo vir a ser analista de organização ou mesmo assumir todos os níveis de chefias na área de Informática. Pode dedicar-se ao ensino e à pesquisa, dentro do seu campo profissional. Conhece linguagens de programação comerciais e científicas, podendo realizar manutenção de sistemas de computadores e, ainda, como analista de software, pesquisar a otimização e aplicação de sistemas. Pode atuar no dimensionamento, implantação e gerência de redes de teleprocessamento. Conhece estruturas de dados e pesquisas a arquivos, estando habilitado a atuar em áreas de Administração de Dados e Administração de Banco de Dados.