10
respostas

Custo e performace.

Opa, boa tarde... Eu tenho uma duvida, mais primeiro queria saber, qual livro seria bom para mim entender javascript... Algum livro relacionado na casadocodigo com essa minha duvida?

Eis a duvida, todo mundo que eu conheço que trabalha na area de programação, não usa o primefaces pelo fato de pouco forma de estilização, e também o primefaces já faz quase tudo para o desenvolvedor como validações entre muitas coisas.

Agora vem minha duvida, todos que conheço usam javascript para validações, pelo motivo de ser menos pesado e ganhar tempo e certas vantagem de usar do proprio primefaces. Isso é verdade? Usando javascript ganhamos mais rapidez no servidor? Irá custar menos para nossa aplicação? Tem algum livro que abrange essa fonte de informação, para que eu possa entender?

10 respostas

Oi Alisson, são coisas bem diferentes. O primefaces é uma biblioteca que funciona em cima do JSF e que realmente trabalha do lado do servidor. Já bibliotecas javascript, funcionam do lado do cliente, em geral.

Claro que validações em cima do cliente funcionam mais rápido, justamente porque não bate no servidor.

Alberto então em geral, as validações do primefaces, toda vez que precisa validar alguma coisa que entra no ciclo de vida fase 3 correto? Então toda vez faz algum tipo de busca no servidor? Já com o javascript não precisa ir até o servidor pra trazer essas validações, pensando assim então um programa com uns 10 ou mais usuarios usando o mesmo servidor irá causar uma perca de tempo? Estou correto ou falando besteira? Já no script nada disso acontece, pela sua experiencia, então é extramente importante usar suas proprias validações feitas com o script? Sabe algum livro sobre esse assunto?

Alisson, o Alberto (que é um monstro de conhecimento) já está tirando as suas dúvidas, mas gostaria de colocar um pontinho a mais aqui pra você pensar... pense que se você fizer uma validação "por fora" do JSF, utilizando Javascript na mão, você poderia perder por exemplo a facilidade de atrelar o resultado de suas validações do JSF a alguma lógica que você queira implementar.

Outro ponto importante, apesar de você ter o overhead de bater lá no servidor para fazer a validação, uma vez que você estiver dentro do ambiente do servidor, essa validação ganha o poder de poder contar com qualquer regra de negócios que esteja definida no backend, criando possibilidades de validações muito mais complexas.

Por fim termino dizendo que quando trabalhamos com JSF, o M (model) e o C (controller) do nosso MVC estão do lado do servidor, sendo assim regras de negócio devem estar no servidor, a sua validação não seria uma regra de negócio? Se sim, quem deve executar essa validação? Pense nisso!

Abraços para você Alisson e um forte abraço ao meu mestre das antigas Prof. Alberto!

Bruno correto cara, obrigado pela resposta, sim sim. Mais ai vem minhas duvidas, até ai tudo bem. Tenho amigos que trabalham em desenvolvedores, e sempre falam para fazer essas validações com javascript para menos peso no servidor, esquecendo um pouco o JSF, temos o SPRING, que já não seria baseado em componentes e tals, oque você me falaria? Ai é necessario para usar javascript certo? Até porque pelo oque eu vejo em mercado para trabalho, muitos poucos, mais muitos pooucos mesmo usam primefaces.

Vamos lá Alisson, já que entendeu bem o conceito das coisas vamos avançar um pouco mais nessa discussão e deixar ela mais rebuscada.

Bom, primeiro me permita uma ligeira correção, quando você diz que Spring não seria baseado em componentes. Cuidado com esse tipo de afirmação, pois componente é todo e qualquer produto de código passível de reutilização e generalização, sim o Spring nos dá essa facilidade sim, inclusive temos uma tag/annotation do Spring chamada "Component", mas eu entendi o que você quis dizer, refere-se à componentes visuais como temos no JSF.

Com relação a fazer ou não a validação no server side a melhor e mais demoníaca resposta é "depende". Sua validação é uma regra de negócio? Sua validação é uma simples entrada de dados do usuário? Por exemplo, por via de regra, se sua validação envolve regras de negócio (principalmente quando precisa juntar mais informações para poder validar uma outra) e se fazer essa validação no client implique em duplicar essa regra de negócio eu diria "faça no backend para não duplicar regras de negócio da sua aplicação". Se sua validação é apenas saber por exemplo de um campo de um formulário está preenchido ou se uma data é posterior à hoje, isso é apenas validação de input, não teria dano algum fazer isso no client usando Javascript.

A questão do peso não é assim tão grave como talvez você esteja pensando, tudo depende da complexidade dos dados que estão sendo validados, volume de acessos, estrutura da aplicação, você pode ter uma aplicação que mesmo fazendo milhares de requisições ao backend seja mais leve do que uma que não faça tantas, tudo dependendo de como está estruturada essa aplicação.

O problema com o JSF no caso é que pelo fato dele ser renderizado no servidor, fica um pouco mais complicado perceber a separação entre client e backend, pois tudo está interligado, eu honestamente não gosto de JSF/JSP, trabalhei muito com essas tecnologias porque era o que tínhamos em mãos, mas prefiro a abordagem atual, onde temos apenas a aplicação Java rodando no servidor sem nenhuma relação com a view e todas as regras de view no client (HTML, Mobile, qq coisa).

Quando você usa Spring que foi o exemplo que você deu, essa divisão fica muito clara, porque você não vai ter um "bean JSF" que representa a sua view, você vai ter componentes do Spring sendo acessados por alguém, então é mais fácil você entender o que seria uma validação de negócio (que precisaria ser feita no servidor) e uma validação de tela (que pode ser feita no client).

Mas o mais importante de tudo o que falamos é você ter essa dúvida e se questionar. É muito comum a sua dúvida e digo mais, como em programação na maioria das vezes existe mais de uma forma de atingir o mesmo resultado, você ainda terá várias outras dúvidas como esta.

Somente se lembre que no caso, o que estamos discutindo não tem nada com o Primefaces em si, estamos falando de JSF, o Primefaces é apenas uma biblioteca para o JSF, o que dita o ciclo das coisas aqui é o JSF em si, ok?

Se você está preocupado com mercado eu diria para você começar a estudar HTML, CSS, Javascript para construir o client e deixar nosso bom e velho Java para o server side. Mas aprenda JSF, pois muito do que se faz hoje em dia com os frameworks web e afins são tentativas de entregar algo melhorado em relação ao modelo de bibliotecas como o JSF, então tendo entendido esse modelo você terá facilidade em aprender outras formas de construir o client das suas apps web.

Abraços!

Um adendo com dois casos de exemplos de validações:

1 - Supondo que você esteja incluindo um novo registro de um formulário, um produto por exemplo, se você precisar validar se esse produto já existe no banco de dados, onde você validaria isso? Isso se parece uma regra de negócio, então o cheiro nos diz que será no server ok? Além disso, para saber ou não se realmente esse produto existe, você precisa acessar o banco de dados talvez? Quem faria esse acesso? O servidor...

2 - Supondo que neste mesmo formulário do produto, existe um campo com a descrição do produto e essa descrição precisa ser preenchida e ao mesmo tempo convertida para maiúsculas por exemplo, isso é trivial demais para requisitarmos ao servidor que receba os dados do formulário, veja se a descrição foi informada e de quebra converta tudo em maiúsculas, o Javascript dá conta desse recado com o pé nas costas e não dói nada em termos de regras de negócio.

Você consegue ver como cada caso e um caso? O bom senso aqui leva algum tempo pra ser refinado, tudo vai depender do que você esta construindo, com quem você trabalha, quais padrões foram convencionados a seguir, etc, etc, etc. Mas entendendo essas coisas e começando a refletir sobre os porquês das coisas você vai ter argumentos e material não só para discutir esses assuntos como também sugerir melhorias.

Sobre como e onde aprender Javascript aqui no Alura tem cursos fantásticos, dá uma olhadinha na seção de desenvolvimento front-end.

Boa sorte, bons estudos e um abraço!

Opa obrigado Bruno, para falar a verdade, AINDA não consigo entender uma unica coisa, quando usamos validação do proprio JSF, na página xhtml, como temos as proprias tag para isso, isso quer dizer que está indo no servidor e voltado? Algo assim? Seria isso? Agora quando eu deixo uma validação feito por exemplo com javascript ai é validação feito por cliente? E sim eu vi uma diferença gritante quando você falo de verificar um dado no banco de dados, e deixar isso por conta do servidor, agora quando temos um exemplo mais "COMPLEXO" podemos fazer nossas validações via javascript, e também quero apreender como usar, porque javascript vem se destacando muito no mercado, acho que um bom desenvolvedor deveria saber javascript.

E Bruno, pelo oque eu conheço, o JSF sim é baseado em componentes, já o SPRINGMVC já é baseado em ações. Abraço, essas duvidas minha vo ter que ler alguns livro ou colocar em pratica para apreender 100%. Mais você deu uma otima luz sobra validações, que tudo depende do que você precisa.

Um grande abraço, deu para pegar muitas coisas.

Opa!

Calma calma. Quando falar Spring precisa ser específico kkk, existem diversos projetos que integram o ecossistema do Spring, o MVC é um deles, temos o core (injeção de dependências etc), Aspectos, JDBC, Boostrap, Security, MVC, etc, etc, etc...

Depois entra nesta pagina para entender o que estou falando: https://spring.io/projects

O Spring MVC é action based, sim, está correto, funciona como o antigo Apache Struts, onde tínhamos o DispatchAction que roteava as requisições para as ações mapeadas, mas ainda assim os serviços que você expõe, que contém as ações, são componentes! Componente é tudo que possa ser reutilizável, é apenas um conceito, eu diria que 99% do que você escreve em termos de código é um componente de uma forma ou de outra, é um conceito, não esquente com isso agora.

No caso da sua dúvida quanto às validações do JSF, sim elas sempre serão executadas 100% server side. Lembre-se que todas as suas páginas JSP são compiladas em arquivos Java, não sei se no curso o professor mostra essa curiosidade pra vocês mas o servidor pega todos os seus elementos HTML das suas páginas JSP e converte em objetos Java contendo as propriedades e elementos da página para fazer o "bind" dos dados, para anexar as interações do usuário com à página do browser ao ciclo de vida dos beans, por baixo dos panos o servidor usa objetos java comuns para manipular o que você vê em tela. Tudo que você vê no browser possui um espelho no servidor na forma de um objeto Java padrão, referentes à todos os elementos e tags JSTL que você declarou na página JSP. Quando você realiza alguma validação do próprio JSF essa validação é executada no servidor por meio do acesso dele à essas classes que ele gerou em tempo de execução, é como se ele gerasse o próprio Javascript dele internamente kkkk para manipular a página, um jeito meio chulo de explicar mas fica fácil de entender.

Inclusive no servidor Web JavaEE quando você acessa as configurações do projeto existe uma opção de deixar essas páginas pré-compiladas ou deixar que sejam compiladas em tempo de execução.

Caso você queira fazer validações em Javascript numa página JSP você precisa apenas criar os arquivos Javascript e importar/utilizar esses scripts da mesma forma que faz com uma página HTML comum. Só pense por um segundo que você está fazendo uma pequena "salada" misturando tecnologias que possuem filosofias distintas, cuidado pra não se bagunçar entre validação server e validação client. Como você está no mundo JSF sempre que possível tente seguir dentro da própria tecnologia para facilitar a manutenção.

Já vi muitas páginas JSP com código "macarrônico", tinha HTML puro, tinha tag do JSF, tinha coisas acontecendo por meio de scripts Javascript, tags de bibliotecas de template... enfim, um inferno....

Aprenda sim Javascript, sou suspeito pra falar pois tenho me dedicado muito ultimamente em dominar esse mundo JS, mas tente aprender bem o JSF pois a filosofia dele vai te ajudar a entender o que está sendo feito hoje em dia só com JS. Por exemplo, ReactJS é uma biblioteca JS que trabalha de forma um pouco parecida com o JSF, tendo suas páginas também sendo renderizadas no servidor! Já o AngularJS roda 100% no client, mas sabendo o JSF você consegue fazer essas comparações que te ajudam a entender mais facilmente as novas tecnologias.

E aprenda Java, aprenda bem. A minha curva de aprendizado no JS tem sido gostosa pois conheço bem Java e o JS tem muitas semelhanças com ele... aquilo que é diferente entre ambos tb é fácil de entender porque tenho um ponto de comparação e por aí vai...

  • Resuminho: Validação JSF 100% server-side, Scripts Javascript 100% client-side.

Abraço, espero que agora esteja mais claro pra você suas dúvidas. No mais somente a prática e a experiência mesmo para ir clareando a sua mente. Com o tempo você fica craque!

Até mais!

Opa opa bruno, vlw de novo pela paciencia comigo kkk, sim me ajudou a ter mais clareza agora, e sim to lendo bastante livros de java, e tbm fazendos muitos cursos de java, JSF sei bastante coisa, oque eu nunca entendi erá isso de validação server-side que o JSF faz, e validação javascript, mais agora com essa nossa discussão deu para pegar muita coisa util e entender um levemente como funciona essas validações, já li um livro de jsf com jpa hibernate, agora tó um com java orientado a objeto, só para pegar o conceito 100 %, fiz os cursos aqui e achei que isso era tudo, mais nas video aula passam por cima do assunto, porque é muito complexo o assunto, já nos livros é detalhes por detalhes, estou gostando de ler os livros da casadoodigo, mais Brunão é isso mesmo. Logo logo quero ver algo com javascript, mais também não ja fiz os cursos basico da logica de programação que é com javascript, oque você me aconselha fazer? obrigado e até mais.

Fala Alisson!

Então, como tinha sugerido antes, aconselho você a fazer os cursos de Javascript aqui da Alura, existem os módulos básicos e depois temos os avançados.

O bom de fazer esses cursos aqui mesmo na plataforma do Alura é que você vai ter a visão de onde e como vai poder aplicar Javascript depois que fizer os cursos, com as sugestões de carreiras.

No mais, na minha opinião você já está estudando o material correto, O.O., Java, etc. Realmente Orientação é Objetos é um tema bastante extenso e possui diversos conceitos atrelados, muitas afirmações e coisas que você ouve aqui e ali quando está aprendendo linguagens e frameworks, leva tempo aprender isso de forma realmente profunda, mas não é um bicho de sete cabeças não, faz muito sentido quando você começa a entender.

Abração!