O que há de Novo?
Fórum Outer Space - O maior fórum de games do Brasil

Registre uma conta gratuita hoje para se tornar um membro! Uma vez conectado, você poderá participar neste site adicionando seus próprios tópicos e postagens, além de se conectar com outros membros por meio de sua própria caixa de entrada privada!

  • Anunciando os planos GOLD no Fórum Outer Space
    Visitante, agora você pode ajudar o Fórum Outer Space e receber alguns recursos exclusivos, incluindo navegação sem anúncios e dois temas exclusivos. Veja os detalhes aqui.


[Programadores WEB] Ainda é uma boa usar o Jquery ou Ajax para enviar/receber dados?

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Estou desenvolvendo um chat pra minha plataforma online ...

Seria uma conversa individual, ou seja, cliente e algum administrador .

A cada 0,5s uma função ajax da um reload, ele não carrega todas as mensagens, apenas as mensagens (em JSON) que ainda não foram carregadas.

Mas bateu uma paranoia por estarmos e 2019, tendo várias ferramentas/bibliotecas usando o Javascript...

O que vocês acham?
 

WagnerEmanuel

Bam-bam-bam
Mensagens
1.246
Reações
1.074
Pontos
353
Sim, bastante comum ainda usar ajax.

Mas dá uma olhada em websockets, acho que eh uma orientação melhor que essas requisições todas aí...

Enviado de meu Moto G (4) usando o Tapatalk
 

Dukoff

Supra-sumo
Mensagens
1.547
Reações
196
Pontos
159
Não é questão de ser uma boa, tecnologia X ou Y.
Tecnologias são somente ferramentas. O lance é escolher bem uma ferramenta que resolva seu problema. É como se a pessoa perguntasse se é melhor usar martelo ou chave de fenda. Depende pra quê, né.

No seu caso, como é uma aplicação que já existe, sugiro que vc dê uma googlada sobre websockets já que vc quer fazer um chat. Isso aí vai abrir um canal de comunicação direta entre dois endpoints. Ou seja teu cliente manda dados pro serviço e o serviço também é capaz de enviar dados pro cliente mesmo que ele não tenha os solicitado.
 

dk120

Lenda da internet
Mensagens
41.907
Reações
95.093
Pontos
2.179
Sim, ainda se usa bastante em sites sem frameworks single page aplication.


E quanto ao chat, tem uma técnica muito melhor para fazer isso. Procura por PHP long polling.
 


Rayzen_X

Ei mãe, 500 pontos!
Mensagens
3.144
Reações
3.830
Pontos
704
Ainda são bem usados mesmo, principalmente em projetos puramente em javascript, sem frameworks, como já disseram aqui.
Não é uma boa prática pôr uma requisição dentro de um loop (é menos ruim fazer isso recursivamente, pelo menos) para ficar requisitando a cada x segundos ( se eu não me engano, vi isso na documentação do axios). O ideal é usar websockets mesmo.
 

RainbowSix

Mil pontos, LOL!
Mensagens
5.621
Reações
9.295
Pontos
1.304
E quanto ao chat, tem uma técnica muito melhor para fazer isso. Procura por PHP long polling.
Parece interessante e mais simples que usar websockets.

Lembrando que tem que tirar a limitação de tempo de execução do script nas configurações do php e de preferência colocar um sleep (1) no meio do loop pra economizar processamento.

Mas já deve ter algo pronto nesse sentido, não sei porque reinventar a roda.
 

Landstalker

Lenda da internet
Mensagens
19.356
Reações
39.661
Pontos
1.584
Se você trabalha com desenvolvimento é fundamental você ainda saber utilizar JavaScript puro para enviar e receber requisições assíncronas e também usar o jQuery para isso.

Repare que há frameworks que facilitam hoje a sua vida na parte do front-end, como é o caso do React e Vue.

Também aprenda as nova versão do JavaScript que é na ECMAScript 6.0, traz novas mudarças como a introdução do "let" e "const" no lugar do "var", pode usar as keyword "async" e "wait", além das Promises.

O que não falta é documentação na web trazendo isso.
 

Rayzen_X

Ei mãe, 500 pontos!
Mensagens
3.144
Reações
3.830
Pontos
704
Pode usar o firebase também, para colocar as mensagens do chat. Ele tem um método de listener que fica vendo quando chega coisa nova. É uma mão na roda.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Web Socket.
Esse tanto de requisições não é escalável.

Socket IO, SignalR e outros similares.

Eu ia usar o Socket IO, usando o nodeJS, mas o minha hospedagem não suporta.
O foda que o back-end já tá ok (e antes era o que eu considerava mais dificil), mas a parte de "atualizar" a cada 0,5s

Sim, ainda se usa bastante em sites sem frameworks single page aplication.


E quanto ao chat, tem uma técnica muito melhor para fazer isso. Procura por PHP long polling.

Acho que vou aderir ao long polling. Vi aqui e é o que realmente eu preciso.
E me parece ser o mais limpo que o refresh do ajax.
 

dk120

Lenda da internet
Mensagens
41.907
Reações
95.093
Pontos
2.179
Eu ia usar o Socket IO, usando o nodeJS, mas o minha hospedagem não suporta.
O foda que o back-end já tá ok (e antes era o que eu considerava mais dificil), mas a parte de "atualizar" a cada 0,5s



Acho que vou aderir ao long polling. Vi aqui e é o que realmente eu preciso.
E me parece ser o mais limpo que o refresh do ajax.

E cuide para que a query que seleciona as mensagens mais recentes não precise fazer um full table scan.

Tem fazer a query pela chave primária ou se usar a data de modificação coloque um índice.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
E cuide para que a query que seleciona as mensagens mais recentes não precise fazer um full table scan.

Tem fazer a query pela chave primária ou se usar a data de modificação coloque um índice.
Coloquei o id da mensagem como primaria, ele ordena pelo id da mensagem (não foi preciso ordenar pela data, pois já faço pelo id).

Tipo:
"SELECT * FROM mensagens WHERE conversa_id = :conversa AND mensagem_id > $id"
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
@dk120 vendo uns exemplos de Long Polling, vi que mesmoa assim tem um loop por parte do Ajax, só que dessa vez é "após" receber os dados... É assim mesmo?
 

dk120

Lenda da internet
Mensagens
41.907
Reações
95.093
Pontos
2.179
@dk120 vendo uns exemplos de Long Polling, vi que mesmoa assim tem um loop por parte do Ajax, só que dessa vez é "após" receber os dados... É assim mesmo?


Eu nunca implementei na pratica, mas acredito que não precisa não. Faz um retorno já engatilhar o próximo, tipo:

JavaScript:
function atualiza_chat(ultimoId) {
    $.ajax({
        ....
        sucesss: (response) => {
            /* atualiza menagens */
            
            atualiza_chat(response.ultimoId); /* proxima atualizacao */
        },
        error: avisa_cebolao
    })
}
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Eu nunca implementei na pratica, mas acredito que não precisa não. Faz um retorno já engatilhar o próximo, tipo:

JavaScript:
function atualiza_chat(ultimoId) {
    $.ajax({
        ....
        sucesss: (response) => {
            /* atualiza menagens */
           
            atualiza_chat(response.ultimoId); /* proxima atualizacao */
        },
        error: avisa_cebolao
    })
}
Então, seria assim mesmo. Consegui desenvolver, hehe! Estou usando e vendo o desempenho no gerenciador de tarefas, e tá funfando bem.

Coloquei um usleep de 0,5s no PHP, caso não tenha novas mensagens. Criei um contador de permanência, se ele ficar ausente (digo, não enviar mensagem ou não receber) por muito tempo ele seria desconectado.

Mas tomara que não sobrecarregue o servidor.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
@dk120 me perdoe pela pergunta, mas criar um construtor num loop é prejudicial?

Tipo:

foreach():
$u= (new Chamar())-> get_chamado($id)
endforeach;
 

dk120

Lenda da internet
Mensagens
41.907
Reações
95.093
Pontos
2.179
@dk120 me perdoe pela pergunta, mas criar um construtor num loop é prejudicial?

Tipo:

foreach():
$u= (new Chamar())-> get_chamado($id)
endforeach;

A não ser que esteja trabalhando com dezenas de milhares de objetos não precisa se preocupar com essas coisas. O gargalo geralmente é o banco de dados. É ai que desenvolvedor backend tem que gastar a cabeça otimizando.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
A não ser que esteja trabalhando com dezenas de milhares de objetos não precisa se preocupar com essas coisas. O gargalo geralmente é o banco de dados. É ai que desenvolvedor backend tem que gastar a cabeça otimizando.
Poxa tem isso também... Mas vamos ver no que dá. Se eu notar gargalo mudarei a técnica. O foda que essa funcao faz uma consulta no banco de dados, mas seria algo de 20 ao atualizar a pagina, e uma chamada a cada nova mensagem. (Essa funcao só seria chamada se uma nova mensagem for postada)
 

dk120

Lenda da internet
Mensagens
41.907
Reações
95.093
Pontos
2.179
Poxa tem isso também... Mas vamos ver no que dá. Se eu notar gargalo mudarei a técnica. O foda que essa funcao faz uma consulta no banco de dados, mas seria algo de 20 ao atualizar a pagina, e uma chamada a cada nova mensagem. (Essa funcao só seria chamada se uma nova mensagem for postada)

Deixa para otimizar se realmente precisar. Maquinas são baratas, tempo humano não.

Essa semana fui fazer um ticket num site que executava mais de 100 fucking queries para exibir um conteúdo praticamente estático. Pensa num site que tem coisa para ser otimizada. Mas o ticket não era sobre isso e o que cliente não estava reclamando de desempenho. Fiz o que ele tinha pedido e a vida que segue.

Se eu estivesse inspirado e com tempo, aposto que conseguiria reduzir para menos 10 queries. Mas ai que tá. Tempo era o que eu não tinha essa semana.

Faz parte da nossa profissão saber onde gastar o nosso tempo.
 

VagnerMg

Mil pontos, LOL!
Mensagens
5.113
Reações
3.603
Pontos
1.319
Já falaram aí acima, utilize websockets para o chat ou para sistema de notificação.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Deixa para otimizar se realmente precisar. Maquinas são baratas, tempo humano não.

Essa semana fui fazer um ticket num site que executava mais de 100 fucking queries para exibir um conteúdo praticamente estático. Pensa num site que tem coisa para ser otimizada. Mas o ticket não era sobre isso e o que cliente não estava reclamando de desempenho. Fiz o que ele tinha pedido e a vida que segue.

Se eu estivesse inspirado e com tempo, aposto que conseguiria reduzir para menos 10 queries. Mas ai que tá. Tempo era o que eu não tinha essa semana.

Faz parte da nossa profissão saber onde gastar o nosso tempo.
Pois é, o problema é o tempo, apesar de eu estar tentando fazer o melhor possível, cada dia sem "publicar" o meu negócio, é mais um dia aguentando os freelas arrombados, e um dia menos ganhando dinheiro sem estresse.
Essa é a melhor solução.
Já falaram aí acima, utilize websockets para o chat ou para sistema de notificação.
Aonde você realiza a hospedagem ?

Dei uma olhada no nodeJS um dias atrás, mas meu servidor não suporta. Uso o Hostgator. E pelo suporte deles que é bom pra caramba (eu prezo muito por uma solução rápida), ficarei com eles por enquanto. Mas eu queria um server sem Cpanel também.

Se você trabalha com desenvolvimento é fundamental você ainda saber utilizar JavaScript puro para enviar e receber requisições assíncronas e também usar o jQuery para isso.

Repare que há frameworks que facilitam hoje a sua vida na parte do front-end, como é o caso do React e Vue.

Também aprenda as nova versão do JavaScript que é na ECMAScript 6.0, traz novas mudarças como a introdução do "let" e "const" no lugar do "var", pode usar as keyword "async" e "wait", além das Promises.

O que não falta é documentação na web trazendo isso.

Então, esses anos fiquei estagnado no Ajax/Jquery, eu queria aprender as novas ferramentas, mas os freelas não deixam (estao comendo muito tempo e rendendo pouco). Minha meta seria lançar minha plataforma logo, tentar tirar uma renda de lá, sair dos freelas e me especializar neste tempo...

Os freelas não estão rendendo tanto como antes, e tá na hora de investir em programação de e-commerce e aplicativos Android também.
 

RainbowSix

Mil pontos, LOL!
Mensagens
5.621
Reações
9.295
Pontos
1.304
Isso, fetch é o ajax atual, ele é essencial pra se criar PWAs (sites instaláveis que funcionam offline). Recomendo você estudar PWA antes de aprender a programar os apps nativos, pois dá pra fazer quase tudo no pwa, não tem muito mistério, só precisa configurar o service worker que vai funcionar como um proxy interceptando as requisições e fornecendo o conteúdo em cachê quando o usuário estiver offline.


Eu também fiquei um tempo sem me atualizar e quando voltei quase surtei com tanta abobrinha que criaram pra complicar as coisas, resolvi continuar fazendo as coisas do meu jeito ao invés de migrar para react/vue etc. Me senti dentro desse texto: https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Isso, fetch é o ajax atual, ele é essencial pra se criar PWAs (sites instaláveis que funcionam offline). Recomendo você estudar PWA antes de aprender a programar os apps nativos, pois dá pra fazer quase tudo no pwa, não tem muito mistério, só precisa configurar o service worker que vai funcionar como um proxy interceptando as requisições e fornecendo o conteúdo em cachê quando o usuário estiver offline.


Eu também fiquei um tempo sem me atualizar e quando voltei quase surtei com tanta abobrinha que criaram pra complicar as coisas, resolvi continuar fazendo as coisas do meu jeito ao invés de migrar para react/vue etc. Me senti dentro desse texto: https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f
WEB se você bobear fica "Deprecated" rapidamente. O foda é que quem trabalha pra WEB e não ganha bem, quase não sobra tempo pra se especializar.
Tipo, este ano virou moda todo mundo querendo ter uma loja virtual... ano passado eu não via isso...
[/off]

@dk120, uma dúvida...
O PDO é suficiente pra "evitar" MYSQL INJECTION, já que os valores/variaveis não ficam na mesma "linha" ou precisa-se de mais algo?
 
Topo Fundo