quinta-feira, 28 de novembro de 2013

JAVASCRIPT - CARACTERÍSTICAS 4


Erros de Codificação do Navegador e Plug-in.

JavaScript fornece uma interface para uma ampla gama de recursos dos navegadores , alguns dos quais podem ter falhas como estouro de buffer. Estas falhas podem permitir que atacantes possa escrever scripts que executem qualquer código que quiserem no sistema do usuário. 

Estes códigos não são por nenhum meio limitados a uma outra aplicação Javascript. Por exemplo, uma exploração do estouro de buffer pode permitir que um invasor obter acesso a API do sistema operacional com privilégios de superusuário. Estas falhas têm afetado os principais navegadores, incluindo Firefox, Internet Explorer, e Safari.

Plugins, tais como leitores de vídeo do Adobe Flash, e da grande variedade de controles ActiveX habilitado por padrão no Microsoft Internet Explorer, também pode ter falhas exploráveis ​​via JavaScript (tais falhas já foram exploradas no passado).

No Windows Vista, a Microsoft tentou conter os riscos de erros, tais como buffer overflows , executando o processo do Internet Explorer com privilégios limitados.

 Google Chrome semelhantemente confina seus renderizadores de página em suas próprias "sandboxes".

Erros de Implementação da Sandbox

Os navegadores da Web são capazes de executar JavaScript fora da sandbox, com os privilégios necessários para criar ou excluir arquivos, por exemplo. É claro que tais privilégios não são destinados a serem concedidos ao código da web.

Concessão incorreta de privilégios para JavaScript a partir da web tem desempenhado um papel em vulnerabilidades, tanto no Internet Explorer quanto no Firefox.

No Windows XP Service Pack 2, a Microsoft rebaixou os privilégios do JScript no Internet Explorer.
Microsoft Windows permite que os arquivos de origem JavaScript no disco rígido de um computador possa ser lançado como de uso geral, nos programas de fora da área restrita (ver: Windows Script Host). Isso faz do JavaScript (como VBScript) um vetor teoricamente viável para um cavalo de Troia, apesar de que os cavalos de Troia em JavaScript são incomuns na prática.

quarta-feira, 27 de novembro de 2013

JAVASCRIPT - CARACTERÍSTICAS 3

JAVASCRIPT - CARACTERÍSTICAS

Acessibilidade 

Refere a prática de inclusão em fazer com que os sites web possa ser usado por até mesmo pessoas que não tenham habilidade de navegação. Quando sites são corretamente projetados, desenvolvidos e editados, qualquer usuários podem ter acessos igualitários à informação e à funcionalidade.

Supondo que o usuário não tenha habilidade de execução do lado do cliente web, o código deve ser escrito para que visitantes tenham melhores experiências, mesmo com usuários com deficiência visual ou física e, certamente, deve-se evitar negar informações para estes visitantes.

Os leitores de tela, utilizados por cegos e deficientes visuais, pode ser reconhecedores de JavaScript e assim podem acessar e ler a página DOM após o script alterá-lo. 

O HTML deve ser o mais conciso, navegável e semanticamente o mais rico possível, queira os scripts sejam executado ou não. 

JavaScript não deve ser totalmente dependente de mouse ou eventos específicos do teclado, pois um usuário pode ser fisicamente incapaz de usar esses dispositivos de entrada. Por esta razão, os eventos de dispositivos agnósticos (componentes que trabalham em vários sistemas sem requerer alguma especial adaptação) como onfocus e onchange são preferíveis aos eventos centrados no dispositivo, como onmouseover e onkeypress na maioria dos casos.

JavaScript não deve ser utilizado de uma forma que seja confuso ou desorientador para qualquer usuário da web. Por exemplo, é melhor evitar usar script para alterar ou desabilitar a funcionalidade normal do navegador, como alterando a forma como os botões "back" ou "refresh" funcionam.

 Igualmente, desencadeando eventos em que o usuário não esteja ciente reduzirá  o sentido controle do usuário, como mudanças inesperadas de script do conteúdo da página.

Muitas vezes, o processo de fazer com que uma complexa página web seja o mais acessível possível torna-se um problema não trivial,em que as questões se tornam assuntos de debate e de opiniões, e onde compromissos são necessários no final das conta.


SEGURANÇA

JavaScript e DOM fornecem possibilidade de autores maliciosos entregarem os scripts a serem executados em um computador de cliente através da web.
 Fornecedores de navegadores impedem esse risco usando duas restrições.
 Primeiro, scripts são executados em uma sadbox (modo privativo de virtualização) na qual só lhe é permitido executar ações relacionadas à web, e não tarefas de programação de uso geral, como a criação de arquivos.
 Em segundo lugar, os scripts são restringidos pela política da mesma-origem(estrita separação entre conteúdo fornecido por sites não autorizados): os scripts de um site não têm acesso a informações como nomes de usuários, senhas ou cookies enviados para outro local. 
A maioria dos bugs de segurança relacionados com JavaScript são violações de qualquer das política da mesma-origem ou a sadbox.
Existem subconjuntos de JavaScript em geral - ADsafe, ECMA Script Seguro (SES) -, que oferecem maior nível de segurança, especialmente no código criado por terceiros (como anúncios).

O conteúdo de Política de Segurança é o principal método pretendido de assegurar que somente código confiável é executado em uma página web.


Vulnerabilidade a Cross-Sites


Um problema de segurança comum relacionado com o JavaScript é o script de cross-sites XSS, que pode ser utilizado por atacantes para contornar os controles de acesso, uma violação da política da mesma-origem. Isto permite que atacantes injetem script do lado do cliente em páginas vistas por outros usuários.

 A vulnerabilidades a XSS ocorrem quando se é capaz de causar um ataque ao site de destino, como um site de banco on-line, podendo incluir um script malicioso na página web apresentada à vítima. O script neste exemplo pode então acessar o aplicativo bancário com os privilégios da vítima, potencialmente revelando informações secretas ou a transferência de dinheiro sem a autorização da vítima. Uma solução para as vulnerabilidades XSS é usar HTML para escape sempre que a exibição de dados não sejam confiáveis.

Alguns navegadores incluem proteção parcial contra ataques refletidos de XSS, em que o atacante fornece uma URL incluindo script malicioso. No entanto, até mesmo os usuários desses navegadores são vulneráveis ​​a outros ataques XSS, como aqueles onde o código malicioso é armazenado em um banco de dados.

Apenas projetos corretos de aplicações webs no lado do servidor podem impedir totalmente XSS .A vulnerabilidades XSS também pode ocorrer por causa de erros de implementação de autores navegador.

Cross-Sites Request Forgery

Outra vulnerabilidade a cross-site é  as requisições falsificadas de sites cruzados (cross-site request forgery ou CSRF). No CSRF, o  truque do atacante é o código local no navegador da vítima, em que é levado a ações que o usuário não tem intenção de tomar em um site alvo (como a transferência de dinheiro em um banco). Ele funciona porque, se o site de destino depende apenas de cookies para autenticar as solicitações, então as solicitações falsificadas iniciadas pelo código no site do invasor vai levar as mesmas credenciais dos logins legítimos, como se fossem solicitações verdadeiras iniciadas pelo usuário.

 Em geral, a solução para CSRF é exigir um valor de autenticação em um campo de formulário oculto para autenticar qualquer pedido que possa ter efeitos duradouros, e não apenas nos cookies. Verificação ao cabeçalho referente ao HTTP também pode ajudar.

JavaScript Hijacking

"Sequestro JavaScript" é um tipo de ataque CSRF no qual um tag <script> no local do atacante explora uma página no site da vítima que retorna informações pessoais, como JSON ou JavaScript. As soluções possíveis incluem :
  • exigir um token de autenticação no POST e obter parâmetros para qualquer resposta que retorna informação privada.
  • usando POST e nunca GET para os pedidos que retornam informações privadas.

Perdendo A Confiança No Cliente.

Os desenvolvedores de aplicações cliente-servidor devem reconhecer que os clientes, mesmo confiáveis, ​​podem estar sob o controle dos atacantes.

Os desenvolvedores dos aplicativos não pode assumir que o seu código JavaScript será executado como pretendido (ou em todos), porque qualquer segredo embutido no código poderia ser extraído por um adversário determinado a isto.

 Algumas implicações são:
  • Desenvolvedores de sites não podem ocultar perfeitamente como o seu JavaScript funciona porque o código fonte de matéria deve ser enviada para o cliente. O código poderia ser ofuscado, mas ofuscação pode ser contornada com engenharia reversa.
  • A validação de formulário JavaScript só oferece conveniência para os usuários, e não de segurança. Se um site verifica se o usuário concordou com seus termos de serviço, ou filtra caracteres inválidos de campos que deve conter apenas números, deve fazê-lo no servidor, não apenas no cliente.
  • Scripts podem ser desativadas de forma seletiva, pelo que o JavaScript não pode ser invocado para impedir que operações como botão direito do mouse em uma imagem possa salvá-lo.
  • É extremamente má prática incorporar informações confidenciais como senhas em JavaScript, porque pode ser extraído por um invasor.

RUBY ON RAILS 1


RUBY ON RAILS

                                       
Ruby on Rails, muitas vezes simplesmente Rails, é um framework de aplicação web de código aberto que funciona na linguagem de programação Ruby. É um framework full-stack (pilha completa): permite a criação de páginas e aplicações que reúnem informações do servidor web, conversar ou consultar o banco de dados, e renderizar1 modelos externos. Como resultado, o Rails possui um sistema de roteamento que é independente do servidor web. 

O termo "renderizar 1" (to render) é usado na computação gráfica, significando converter uma série de símbolos gráficos num arquivo visual, ou seja, "fixar" as imagens num vídeo, convertendo-as de um tipo de arquivo para outro, ou ainda "traduzir" de uma linguagem para outra.

Ruby on Rails enfatiza o uso de padrões de engenharia de software bem conhecidos e princípios, como:

  • o padrão Active Record 2, 
  • convenção sobre configuração3 (CoC), 
  • não repita a si mesmo4 (DRY), e 
  • model-view-controller5 (MVC).
Active Record Pattern 2 - padrão de registro ativo, um padrão de arquitetura de armazenamento de dados em bancos de dados relacionais, uma abordagem para o acesso a dados.

A interface de um objeto de acordo com esse padrão deve incluir funções como Insert, Update e Delete, além de propriedades que correspondem à colunas na tabela subjacente.

Uma tabela ou 'view' estão empacotados em uma classe. Assim, uma instância de objeto está vinculado a uma única linha na tabela. Após a criação de um objeto, uma nova linha é adicionada à tabela após salvar.

 Qualquer objeto carregado obtém suas informações a partir do banco de dados. Quando um objeto é atualizado a linha correspondente na tabela também é atualizada.

 A classe wrapper implementa métodos de acesso ou propriedades para cada coluna na tabela ou 'view'.

qualquer = new Classe_Qualquer()
qualquer.nome = "Exemplo qualquer"
qualquer.valor = 123.45
qualquer.salvar()
SQL : INSERT INTO quaisquer (nome, valor) VALUES ('Exemplo qualquer', 123.45);

b = qualquer.find_first("nome", "caixa")
SQL: SELECT * FROM quaisquer WHERE nome = 'caixa' LIMIT 1; -- MySQL ou PostgreSQL

Convenção sobre configuração 3 (também conhecido como codificação por convenção) é um paradigma de design de software, que visa diminuir o número de decisões que os desenvolvedores precisam fazer, ganhando simplicidade, mas não necessariamente perder a flexibilidade.

O desenvolvedor precisa apenas especificar aspectos não convencionais da aplicação. Por exemplo, se houver uma classe venda no modelo, a tabela correspondente no banco de dados é chamado de "vendas" por padrão. É só se desvia desta convenção, como chamar uma tabela de "produtos_vendido", que necessitará alguém escrever o código adicional em relação a estes nomes.

Quando a convenção implementada pela ferramenta corresponde ao comportamento desejado, ele se comporta como esperado, sem ter que escrever arquivos de configuração. Somente quando o comportamento desejado se desvia da convenção implementada é necessário configuração explícita.


Don't Repeat YourSelf 4  não repita a si mesmo (DRY) é um princípio de desenvolvimento de software que visa reduzir a repetição de informações de todos os tipos, especialmente úteis em arquiteturas multi-tier. O princípio indica que "cada parte da informação deve ter uma única, inequívoca e, autoritária representação dentro de um sistema . " 

Eles aplicam isto de forma bastante ampla para incluir esquemas de banco de dados, planos de teste, sistema de compilação , e até mesmo documentação.

Quando o princípio DRY é aplicado com sucesso, uma modificação de qualquer elemento individual de um sistema não requer uma mudança em outros elementos não relacionados logicamente. 

Além disso, elementos que estão relacionados logicamente são todos alterados previsível e uniformemente, e assim mantidos em sincronia.

 É o conceito por trás da técnica de definir nomes, propriedades e códigos em somente um lugar e reaproveitar essas informações em outros. Por exemplo, ao invés de ter uma tabela Pessoas e uma classe Pessoa, com uma propriedade, um método "leitor" (getter) e um "modificador" (setter) para cada campo na tabela, tem-se apenas no banco de dados. As propriedades e métodos necessários são "injetados" na classe através de funcionalidades da linguagem Ruby.
Com isso, economiza-se tempo, já que não é necessário alterar a tabela, o "bean", o "form bean", o "local home", o "home", o "session", ... Alterando apenas no banco de dados, tudo o que se baseia nessas informações é atualizado automaticamente.

Componentes

O Rails é um "meta-framework" (framework que utiliza dados de outro framework)composto pelos seguintes frameworks:
  • Active Record é uma camada de mapeamento objeto-relacional (object-relational mapping layer), responsável pela interoperabilidade entre a aplicação e o banco de dados e pela abstração dos dados.
  • Action Pack compreende o Action View (geração de visualização de usuário, como HTML, XML, JavaScript, entre outros) e o Action Controller (controle de fluxo de negócio).
  • O Action Mailer é um framework responsável pelo serviço de entrega e até mesmo de recebimento de e-mails. É relativamente pequeno e simples, porém poderoso e capaz de realizar diversas operações apenas com chamadas de entrega de correspondência.
  • Active Support é uma coleção de várias classes úteis e extensões de bibliotecas padrões, que foram considerados úteis para aplicações em Ruby on Rails.

Escalabilidade (que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer)
A maioria dos sites não necessita de esquemas sofisticados de escalabilidade, bastando alguns aceleradores. Em sites menores ou normais, uma configuração padrão do servidor web consegue suportar uma boa quantidade de carga, principalmente se forem usados o FastCGI, LightTPD ou Mongrel, que são necessários para obter uma velocidade aceitável de abertura da página. 
Comparando uma aplicação com FastCGI e sem FastCGI (rodando Ruby direto como CGI), a diferença é perceptível em qualquer aplicação. O processamento do código (sem contar o tempo de download) em CGI ocorre em no mínimo 10 segundos mesmo em servidores Quad Core, enquanto que em FastCGI o desempenho é notável: em no máximo 1 segundo a página é processada, tal qual linguagens web como PHP.
Existem casos de sites feitos em Rails que suportaram 5 milhões de visitas em um mês, ou seja, aproximadamente 115 por minuto, uma performance considerada suficiente para 90% das aplicações atuais. Nestes sites, uma questão frequente é sobre a escalabilidade de aplicações escritas em Rails. 
Ao contrário de outras tecnologias, você não precisa fazer um código específico para que o sistema esteja preparado para "escalar". Quando necessário pode-se adotar uma das táticas disponíveis para escalabilidade em Rails. 
Vale notar que o único problema da escalabilidade é a manutenção de sessões entre servidores. Portanto, a saída mais óbvia é guardar estas sessões em volumes NFS, acessíveis por todos os servidores de aplicação. Outra tática é usar o armazenamento de sessões diretamente no banco de dados. Uma terceira, seria salvar a sessão em um cookie na máquina do usuário.


JAVASCRIPT - CARACTERÍSTICAS 2



Considerações sobre compatibilidade


Porque JavaScript é executado em muitos ambientes diferentes, uma parte importante do teste e depuração é testar e verificar se o JavaScript funciona em vários navegadores.

As interfaces DOM para manipular páginas web não são parte do padrão ECMAScript , ou do próprio JavaScript. Oficialmente, as interfaces de DOM são definidos por um processo de padronização separado pelo W3C, na prática as implementações do navegador diferem dos padrões e do outro, e nem todos os navegadores executar JavaScript .

Para lidar com essas diferenças, os autores JavaScript podem tentar escrever compatível com os padrões de código que também será executado corretamente pela maioria dos navegadores; se assim não for, eles podem escrever código que verifica a presença de alguns recursos do navegador e se comporta de forma diferente se eles não estão disponíveis. 
Em alguns casos, dois navegadores podem ambos implementar um recurso, mas com comportamento diferente, e os autores podem encontrá-lo prático para detectar qual navegador está sendo executado e mudar o comportamento do seu script para corresponder. Os programadores também podem usar bibliotecas ou conjunto ferramentas de diferentes navegadores para testes.

Além disso, os scripts podem não funcionar para alguns usuários. Por exemplo, um usuário pode:
  • usar um navegador antigo ou raro com suporte DOM incompleto ou incomum,
  • utilizar um navegador PDA ou telefone celular que não pode executar JavaScript,
  • ter execução de JavaScript desativada como uma precaução de segurança ,
  • utilizar um navegador auditivo devido a, por exemplo, uma deficiência visual.
Para dar suporte a esses usuários, os autores de web pode tentar criar páginas que degradam graciosamente sobre os agentes do usuário (browsers) que não suportam JavaScript da página. 
Em particular, a página deve permanecer utilizável ainda que sem os recursos extras que o JavaScript teria acrescentado.
 Uma abordagem alternativa que muitos acham preferível é primeiro autor de conteúdo usando tecnologias básicas que funcionam em todos os navegadores, então melhorar o conteúdo para os usuários que tem o JavaScript ativado. Isto é conhecido como a optimização progressiva .

70 ebooks free

http://www.topfreebooks.org/70-free-programming-ebooks-online/

JAVASCRIPT CARACTERÍSTICAS 1

CARACTERÍSTICAS DO JAVASCRIPT (continuação)


Baseada em Protótipos

JavaScript usa protótipos em vez de classes para o mecanismo de herança. É possível simular muitas características de orientação a objetos baseada em classes com protótipos.

Funções e métodos

Diferente de muitas linguagens orientadas a objetos, não há distinção entre a definição de uma função e a definição de um método no JavaScript. A distinção ocorre durante a chamada da função; a função pode ser chamada como um método. Quando uma função é chamada como método de um objeto, a keyword this da função é associada àquele objeto via tal invocação.

Funções como Construtores de Objetos

 Funções duplica-se como construtores de objetos juntamente com o seu papel típico.  Prefixar uma chamada de função com "new" vai criar uma instância de um protótipo, herança de propriedades e métodos do construtor (incluindo propriedades do protótipo Object) .
 ECMAScript 5 oferece o método Object.create, permitindo a criação explícita de uma instância sem automaticamente herdar o protótipo Object (versões mais antigas podem atribuir null ao protótipo). As propriedades do construtor do prototype determinam o objeto usado para prototype interno do novo objeto.
 Novos métodos pode ser adicionado através da modificação do protótipo do objecto utilizado como um construtor. Construtores internos do JavaScript, como Array ou Object, também têm protótipos que podem ser modificados.
  Embora seja possível modificar o protótipo de objeto , é geralmente considerado uma má prática porque a maioria dos objetos em Javascript vão herdar métodos e propriedades do objeto prototype e eles podem não esperar que o protótipo seja modificado.

Funções como Métodos

Ao contrário de muitas linguagens orientadas a objeto, não há distinção entre a definição de função e a definição de método. Ao invés disto a distinção ocorre durante a chamada da função; quando a função é chamada como um método de um objeto, a função local da palavra-chave this  é ligada a esse objeto para a invocação.

Delegação Implícita e Explícita.


Javascript é uma linguagem de delegação, que podem compreender 3 notações:
  • Mais comumente, refere-se a um recurso de linguagem de programação fazendo uso das regras de pesquisa de método para o envio das assim conhecidas auto-chamadas, "Usando objetos protótipos para implementar o comportamento compartilhado em sistemas orientados a objetos " . Delegação como um recurso de linguagem suporta o modelo de programação baseado em protótipo.
  • Delegação originalmente refere-se a um objeto depender de outro para fornecer um determinado conjunto de funcionalidades. Nas pesquisas, esta é muitas vezes referido como consulta ou como agregação na modelagem.
  • Na CLI(Common Language Infrastructure), delegado é uma forma de ponteiro de função de tipo seguro, normalmente usado em um padrão de observador como um meio de dizer qual método a ser chamado quando um evento é disparado, mantendo o tipo de método.
Apesar de a delegação ser bastante difundido , relativamente poucos linguagens de programação principais implementam delegação como um modelo alternativo à herança estática. 
Delegação multicast aponta para vários métodos. Assim quando o multicast é invocado, um mecanismo provê uma funcionalidade de execução de uma a lista interna de delegados.

Funções como Roles (Traits  e Mixins)

 JavaScript suporta nativamente várias funções baseadas nas implementações de padrões Role (padrão de regras sociais humanas) como Traits  e Mixins (reutilização de métodos). Tais funções definem comportamento adicional de pelo menos um método vinculado à esta palavra-chave dentro de seu corpo da função.
 Um Role então tem que ser delegado explicitamente via chamada ou se aplicar a objetos que precisam apresentam comportamento adicional que não é compartilhada por meio da cadeia de protótipos.

Tipo de Composição e Herança


Considerando que funções explícitas baseadas em delegação faz cobrir composições em JavaScript, a delegação implícita já acontece cada vez que a cadeia de protótipos é acionada, por exemplo, a fim de encontrar um método que pode ser relacionado, mas não é diretamente possuído por um objeto.
 Uma vez que o método foi encontrado, é chamado dentro deste contexto dos objetos. Por conseguinte, herança em JavaScript é coberto por um automatismo de delegação que é ligado ao slot protótipo das funções construtoras.

Características Gerais

Ambiente De Tempo de Execução (Run-time)

 JavaScript geralmente se baseia em um ambiente de tempo de execução (por exemplo, um navegador da web ) para fornecer os objetos e métodos com quais os scripts podem interagir com o ambiente. 
 Depende também do ambiente de tempo de execução para fornecer a capacidade de incluir/importar scripts ( por exemplo, elementos HTML <script>).
 Este não é um recurso de linguagem em si, mas é comum na maioria das implementações de JavaScript


Funções Variadic (Funções Que Aceitam Inúmeros Argumentos)

Um número indefinido de parâmetros podem ser passados para uma função. A função pode acessá-los através de parâmetros formais e também através de argumentos de objetos locais. Funções Variadic podem também ser criadas por utilização de métodos de aplicação.

Arrays e Objetos Literais

Como em muitas linguagens por scripts, arrays e objetos (arrays associativas em outras linguagens) podem cada um ser criados com uma sintaxe de atalho resumida. Na verdade, estas literais formam a base do formato de dados do JSON.


Expressões Regulares

JavaScript também suporta expressões regulares de uma maneira similar ao Perl, provendo uma sintaxe concisa e poderosa para manipulação de texto que é mais sofisticada que as funções internas de string.


Extensões Específicas de Outros Fornecedores

JavaScript é oficialmente gerido pela Mozilla Foundation, e novos recursos de linguagem são adicionados periodicamente. No entanto, apenas alguns dispositivos em JavaScript suportar estas novas funcionalidades:

  • Propriedades de funções getter e setter (suportados pelo WebKit, Opera, o ActionScript, e Rhino).
  • Cláusulas catch condicionais.
  • Protocolo iterador (adotada a partir de Python).
  • Geradores leves de co-rotinas (adotada a partir de Python).
  • Compreensões de arrays e gerador de expressões (adotada a partir de Python).
  • escopo de bloco apropriado através da palavra-chave let.
  • array e objeto de desestruturação (forma limitada de correspondência de padrões).
  • expressões de função concisas (function (args) expr).
  • ECMAScript para XML (E4X), uma extensão que adiciona suporte XML nativo para ECMAScript.

Utilização em WEB Pages

O uso mais comum de JavaScript é para escrever funções que são inseridas ou incluidas a partir de páginas HTML e que interage com o modelo de objeto documental (Document Object Model)  da página. Alguns exemplos simples de utilização são: 
  • carregar novos conteúdos de páginas ou submeter dados ao servidor através de AJAX sem recarregar a página (por exemplo, uma rede social pode permitir ao usuário postar atualização de status sem deixar a página)
  • Elementos de animação da página, esmaecer e desmaecer, redimensionar, mover, etc.
  • Conteúdo interativo, por exemplo para jogos, e tocando áudio e vídeos.
  • Validando valores imputados de formulários web para assegurar que eles são aceitáveis antes de submeter ao servidor.
  • Transmitir informações sobre os hábitos de leitura do usuário e atividade de navegação em vários sites. Páginas web fazem frequentemente isto análise web, monitoramento, personalização e outros propósitos.
Por o código Javascript pode ser executado localmente no navegador do usuário(a invés de em um servidor remoto),  o navegador pode responder às ações do usuário rapidamente, tornando uma aplicação mais responsiva. 
Além disto, pode detectar ações do usuário que o HTML sozinho não consegue, tal como um grifos individuais da letra.
Aplicação como Gmail toma vantagem disto: muitas lógicas de interface do usuário são escritas em JavaScript, e JavaScript envia requisições por informações (como o conteúdo da mensagem de e-mail) ao servidor. Uma ampla tendência da programação AJAX explora semelhantemente esta vantagem. Ajax

Interpretador JavaScript

Um Dispositivo JavaScript [JavaScript engine] (também conhecido como implementação JavaScript) é responsável por interpretar o código fonte e executar os scripts de acordo com as instruções.



http://shichuan.github.io/javascript-patterns/ Padrões de Programação de JavaScript

AJAX - Asynchronous JavaScript And XML


REQUISIÇÕES ASSÍNCRONAS JAVASCRIPT E XML


                             

Ajax ( um acrônimo para Asynchronous JavaScript and XML) é um conjunto de técnicas de desenvolvimento web interligadas usado no lado do cliente para criar aplicações web assíncronas.
 Ajax, aplicações web pode enviar dados para e recuperar dados a partir de um servidor de forma assíncrona (em segundo plano), sem interferir com a exibição e o comportamento da página existente.
 Os dados podem ser recuperados usando o objeto do API XMLHttpRequest. Apesar do nome, não é necessário o uso de XML (JSON é frequentemente usado em seu lugar. Veja AJAJ) e as requisições não precisam ser assíncronos.
 Ajax não é uma tecnologia única, mas um grupo de tecnologias. HTML e CSS pode ser usado em combinação para marcar e informações de estilo. O DOM é acessado com JavaScript para exibir de forma dinâmica, e permitir que o usuário interaja com a informação apresentada. JavaScript e o objeto XMLHttpRequest fornecer um método para troca de dados de forma assíncrona entre o navegador e o servidor para evitar recargas de página inteira.