Ir para conteúdo
Fórum Script Brasil
  • 0

Processos em Threads separadas


Renatho

Pergunta

Pessoal,

Estou com um problema enorme... vamos ver se alguém pode me ajudar....

Estou trabalhando em um projeto em que preciso fazer requisição a arquivos (js) externos que chamam um document.write, ou seja, as tags (<script>) tem que ser largadas exatamente na posição que quero q o conteúdo retorne. Por exemplo:

<div class="cointainerOndeDeveEscreverOConteudo"><script type="text/javascript" src="caminho_do_js.js"></script></div>

Esse js tem por exemplo:

document.write("Fizemos estes scripts assim só pra te quebrar as perna");

O problema é que tenho outros scripts rodando na página que não podem ser interrompidos e o domínio que está esses scripts é lento, ou seja, meus scripts todos param de executar até que este termine. Mesmo os que eu chamei antes da inclusão deste js e estão rodando em threads separadas por ajax (O que eu acho mais estranho).

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

oi renatho,

cara, javascript não roda threads.

threads são processos paralelos, ou seja, se estivesse realmente rodando em threads,

seus scripts não iriam parar de rodar.

porque ele iria executar um pouco de cada script em paralelo.

se seus scripts param de rodar enquanto o outro é descarregado é porque já deixou

de ser thread.

esse negocio de document.write realmente é uma incomodacao.

na verdade não precisaria estar da forma q você colocou,

posicionado exatamente em tal posicao do html.

ao invés de usar document.write, se você usar um innerHtml pra escrever na div,

você vai obter um resultado similar, sem usar o document.write e sem precisar posicionar

a importacao do js no meio do conteudo html.

sucesso ai.

Link para o comentário
Compartilhar em outros sites

  • 0
oi renatho,

cara, javascript não roda threads.

threads são processos paralelos, ou seja, se estivesse realmente rodando em threads,

seus scripts não iriam parar de rodar.

porque ele iria executar um pouco de cada script em paralelo.

se seus scripts param de rodar enquanto o outro é descarregado é porque já deixou

de ser thread.

esse negocio de document.write realmente é uma incomodacao.

na verdade não precisaria estar da forma q você colocou,

posicionado exatamente em tal posicao do html.

ao invés de usar document.write, se você usar um innerHtml pra escrever na div,

você vai obter um resultado similar, sem usar o document.write e sem precisar posicionar

a importacao do js no meio do conteudo html.

sucesso ai.

O problema é que não posso mudar este document.write... Como já falei, são arquivos externos, de terceiros, onde não pode ser alterado.

No javascript podemos simular threads sim, se usarmos um setTimeout, ou algum evento de ajax, estaremos rodando processos simultaneamente. Só que eu não posso fazer isto no document.write, pois desta forma ele apaga todo conteúdo que tem na página e escreve somente o que está mandando por parâmetro para esta função.

Alguém mais tem alguma idéia?

Link para o comentário
Compartilhar em outros sites

  • 0

oi renatho,

simular threads e rodar threads são coisas distintas.

o setTimeout não é uma thread,

a função setTimeout define que após um intervalo de tempo um evento irá acontecer.

quando você chama o setTimeout a pagina já esta carregada,

ele não compete em processamento com nenhum outro recurso.

o ajax tb não, o ajax dispara uma acao para o servidor,

então quem estara fazendo o trabalho é o server side, e não o client side

onde a pagina esta carregada.

quando o retorno do ajax chega na pagina, a pagina tb já esta carregada,

senao nem teria chamado o comando.

desta forma tb não existe competicao de processamento,

logo não tem como ser uma thread, porque não tem nem as caracteristicas de thread.

uma ideia q eu tive aqui, q você pode arriscar tentar.

crie uma div oculta no final do seu codigo, antes do </html>

dentro desta div oculta importe o codigo js de terceiros.

feito isso,

depois crie uma funcao, pode ser ate usando o setTimeout,

pra dar tempo dessa div oculta ser escrita.

então dentro do setTimeout mande escrever o conteudo dessa div

oculta dentro da div <div class="cointainerOndeDeveEscreverOConteudo">

pra isso coloque os paramentros name e id nas duas divs.

e depois envie o valor de uma para outra usando o innerHTML.

sucesso ai.

Link para o comentário
Compartilhar em outros sites

  • 0

eu sei q já faz 1 mes q esse post foi criado,

mas como não foi dado nenhuma resposta do criador falando se resolveu ou não o problema.

acabei escrevendo a solucao por mim proposta, no meu blog.

quem tiver interesse ou precisar de uma solucao como esta, esta disponivel:

http://www.mariosam.com/javascript/javascr...rquivos-pesados

feliz natal a todos.

Link para o comentário
Compartilhar em outros sites

  • 0

Senhores....

Não resisti e vou me intrometer nesta discussão.. rs

Creio que isso que o Renatho está chamando de thread, seja algo realmente muito parecido com uma thread, a concorrência de objetos XMLHTTP, ou seja os processos AJAX. (veja mais)

Provavelmente o que ocorre é a sobreposição de respostas aos processos AJAX não instanciados, já que esses processos são chamadas assíncronas que retornam a resposta para o mesmo objeto. Se a segunda chamada for mais rápida que a primeira.... pau!

...

Link para o comentário
Compartilhar em outros sites

  • 0

bom, nesse fato constatamos uma ilusao de processamento.

pelo fato de ser assincrona realmente pode confundir algumas pessoas, achando q é algo como uma thread.

como eu disse antes, o javascript roda na pagina do usuario,

é client-side.

uma requisicao ajax roda no servidor server-side, é outra maquina.

como você pode ver no link do wikipedia, thread é uma concorrencia entre processos realizado no sistema operacional.

em resumo, javascript não tem suporte a threads, ajax não é threads, e não possui as caracteristicas de threads.

agora, simular é outra historia, eu consigo simular um sistema operacional completo usando javascript.

não duvido q vocês consigam simular (visualmente) o uso de threads com ajax. mas não sera uma thread.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...