Ir ao conteúdo
  • Cadastre-se

JQuery Isso seria muito pesado ?


Posts recomendados

Boa noite, pessoal.

Estou criando um sistema de notificação, ele já funciona, mas minha preocupação é em relação ao peso que isso terá, caso queiram ver meu código, ai está:

Ele inicia aqui:

  var ver = function(){
    verNotificacao();
  };
  setInterval(ver, 1000);
//o intervalo poderia variar até 5000, talvez até mais

durante o intervalo, ele estará chamando o seguinte processo:

    function verNotificacao(){
        var notificacao = $.ajax({
            type: "POST",
            dataType: "html",
            url: "class/chamar.php",
            data:{notificacao:1}
        });
        notificacao.done(function(retorno){
            $('#notificacao').html(retorno);
        });
    }

Aqui está o arquivo chamar.php (ele seria o controller):

if(isset($_POST['notificacao'])):$basico->notificacao();endif;

E aqui ele executa o método solicitado pelo chamar.php e retorna os valores, caso tenha alguma notificação:

	public function notificacao(){ // Notificação das mensagens
        if(isset($_SESSION['id']) && $_SESSION['admin'] == 1)
            $sql = "SELECT nome, sobrenome, mensagem, foto, id_chat FROM chat_usu LEFT JOIN chat ON chat.chat = chat_usu.usu_chat LEFT JOIN usuarios ON chat.id_usuario = usuarios.id_usu WHERE bol_notifica = 1 AND bol_tipo = 0 ORDER BY id_chat ASC";
        elseif(isset($_SESSION['id']) && $_SESSION['admin'] == 0)
            $sql = "SELECT nome, sobrenome, mensagem, foto, id_chat FROM chat_usu LEFT JOIN chat ON chat.chat = chat_usu.usu_chat LEFT JOIN usuarios ON chat.id_usuario = usuarios.id_usu WHERE bol_notifica = 1 AND bol_tipo = 1 AND id_dono = {$_SESSION['id']} ORDER BY id_chat ASC";
        else 
            $sql = "SELECT nome, sobrenome, mensagem, foto, id_chat FROM chat_usu LEFT JOIN chat ON chat.chat = chat_usu.usu_chat LEFT JOIN usuarios ON chat.id_usuario = usuarios.id_usu WHERE bol_notifica = 1 AND bol_tipo = 1 AND id_dono = '{$_SERVER['REMOTE_ADDR']}' ORDER BY id_chat ASC";
        $notifica = $this->executar($sql);
        foreach ($notifica as $tudo){?>
            <script type="text/javascript">
                //Aqui ele chama o primeiro código que passei, ele gera a notificação
                notificacao('<?=$tudo['nome'];?> <?=$tudo['sobrenome'];?>', '<?=$tudo['mensagem'];?>', '<?php if($tudo['foto'] != null) echo $tudo['foto']; else echo 'images/services/services1.png'; ?>');
            </script>
            <?php $this->attNotificacao($tudo['id_chat']); 
        }
    }

    public function attNotificacao($id){ // Atualizador de notificação
        $sql = "UPDATE chat SET bol_notifica = 0 WHERE id_chat = {$id}";
        $this->executar($sql);
    }

Minha dúvida é a seguinte:

Executando todo esse código com o intervalo entre 1 a 5 segundos seria muito pesado ? Isso poderia gerar alguns problemas ?

Eu não tenho muita noção do peso que o ajax gera, por isso sempre fico com receio de exagerar nele, vale lembrar que eu tenho outras execuções que serão feitas nas páginas, e todas as páginas do site vão executar o código acima, porém só esse código terá um setInterval().

Estou também aceitando sugestões, caso tenham alguma forma melhor de fazer algo que gere notificação.

Desde já, agradeço pela ajuda!

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Will871 Creio que não tem problema  em usar  um intervalo assim.. veja o caso do facebook, a cada segundo é atualizado o feed além do carregamento por demanda.

 

O que eu vi no seu código é a respeito do banco de dados.

Talvez você melhoraria o desempenho dele aplicando as "NF" e otimizando o banco de dados.

Por exemplo usar o inner join no lugar de left join,   ter as tabelas com os relacionamentos corretos e índices definido na tabela controladora..

 

Fora isso, a parte do Javascript está legal.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Will871 Bueno, o assunto seria ideal no setor de banco de dados, pois aí é questão de modelagem.

 

As normas formais são necessárias para evitar inconsistências.

Então basicamente você pensa primeiro nas entidades que vão ser "esmiúçadas", ou seja, em tabelas separadas.

Vou tentar retratar algo simples, mas dentro do seu contexto.


Primeiro vamos pensar em qual tabela vai controlar os relacionamentos.
chat_usu é nossa tabela.

 

Quem vai participar?

Usuários além de administradores. Então criamos uma tabela membro

 

Com estas duas primeiras tabelas vamos ainda longe, definir uma tabela para o tipo de usuário. se é admin ou normal.
Com isso  teremos mais uma tabela por exemplo tipo_user

 

Temos as nossas 3 principais tabelas. Recapitulando:

  • chat_usu -> armazenará as mensagens, hora postada, quem postou..
  • membro -> armazenará os membros que participarão do chat
  • tipo_user -> armazenará o tipo de usuário que é.

 

Agora vou explicar em detalhes cada tabela:

 

chat_usu -> ID auto increment INT 11 PK, dataHora datetime, ID_usuario INT 11 FK, mensagem Varchar 500(pode ser longtext ou mediumtext se quiser)


membro -> ID auto increment INT 11 PK, ID_tipo_usuario INT 11 FK ,nome varchar 100, email varchar 100, senha varchar 100


tipo_user -> ID auto increment INT 11 PK, tipo_user varchar 50

 

Agora que temos uma estrutura definida, lembre-se de que a tabela chat_usu é a tabela que comanda. Então é nela que você deve criar os índices dos campos de chave estrangeira.

 

No Phpmyadmin, você vai encontrar na aba da estrutura, onde diz " índice"  clicando ali, você nomeia o índice, como por exemplo ID-usuario, seleciona na lista o tipo "INDEX" e por fim, seleciona o campo que será usado no caso o ID_usuario INT 11.

Fazendo isso, sua tabela está pronta para receber um relacionamento via chave estrangeira.

Para fazer o relacionamento 1:N entre a tabela chat_usu e membro use a aba do designer(modo desenho) aí você cria o relacionamento( é intuitivo) depois salva.


Você vai adicionar o índice na tabela membro também, porque é nela que fica a chave estrangeira para o tipo_user.
   
PS: em ambas tabelas ao fazer o relacionamento, se tudo estiver correto, você deverá marcar como "ON cascade" o relacionamento. Pois isso mantém a integridade. Onde se um dado requisito de outro for apagado, o resto relacionado a ele também será apagado ou terá acesso negado ao ser apagado, por conta da dependência.

Depois de feito tudo corretamente,  fazer a consulta seria algo assim:

SELECT membro.nome, tipo_user.tipo_user, chat_user.dataHora, chat_usu.mensagem 
FROM chat_usu
INNER JOIN membro ON membro.ID = chat_usu.ID_usuario
INNER JOIN tipo_user ON tipo_user.ID = membro.ID_tipo_usuario
WHERE tipo_user = [número]

Onde o [número] seria o valor do tipo de usuário 1(admin), 2(membro)

Claro que ali é só um exemplo você pode acrescentar mais cláusulas como order by  

 

Para melhor compreensão, recomendo assistir estes dois vídeos que gravei a um tempo. Embora seja um pouco mais antigo a versão do phpmyadmin,  ainda é 100% funcional(basta achar as opções!)

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Entendi, vi os dois vídeos, e vou rever meu banco de dados, eu realmente não fiz nada sobre foreing key, eu sempre apliquei isso diretamente no php e ignorei o mysql, pra mandar a real, eu nem sequer sabia dessa aba "designer", sei que foi apresentado para mim em aulas o modelo "entidade e relacionamento", mas faltei nas aulas que aplicaram no phpmyadmin, fez falta!

Vou aplicar isso agora aqui no meu banco, estou apelando pra qualquer coisa que garanta que o desempenho do site seja bom.  haha'

Novamente muuuito obrigado.     ^^

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!