2009-06-22 6 views
5

Ho un piccolo sito Web con circa 5-10 amministratori. L'ho configurato per monitorare ciò che ogni amministratore sta facendo (aggiungendo oggetti, rimuovendo oggetti, ecc.). Ho avuto una lista all'interno del nostro pannello di amministrazione che mostra le 10 attività precedenti eseguite dall'amministrazione collettiva. Oggi ho deciso di fare questo autoaggiornamento ogni 30 secondi.Server di query costante via Javascript - Buona idea?

La mia domanda è semplice: c'è qualche problema a fare questo? Sto chiamando un piccolo pezzetto di testo con ogni richiesta, e probabilmente la richiesta è in esecuzione solo su 3 o 4 computer alla volta (rispecchiando il numero di amministratori simultanei loggati).

$(document).ready(function(){ 
    setInterval("activity()", 30000); 
    }); 

    function activity() { 
    $("#recent_activity").load("../home/login #recent_activity .data"); 
    } 

Produce quanto segue (o simile - solo con 10 righe) per ogni richiesta.

<table> 
    <tbody> 
    <tr> 
     <td><p>jsampson</p></td> 
     <td><p>logged out</p></td> 
     <td><p>28 minutes 27 seconds ago</p></td> 
    </tr> 
    <tr> 
     <td><p>jdoe</p></td> 
     <td><p>logged in</p></td> 
     <td><p>29 minutes 45 seconds ago</p></td> 
    </tr> 
    </tbody> 
</table> 

risposta

4

3-4 utenti ogni 30 secondi non è molto. Anche 300 utenti a quel ritmo non sarebbero molto.

Si consiglia di verificare in queste domande:

È possibile cache di questo pure, e sarebbe consigliabile soprattutto se la query generare la pagina è computazionalmente pesante, ma ovviamente prendere in considerazione che tipo di ritardo si desidera nel contenuto più recente sia visualizzato.

0

Non penso che costituirebbe un problema.

1

No, non dovrebbe esserci alcun problema. Faccio la stessa cosa a intervalli di 1 minuto per un sistema di notifica che ho scritto sul portale intranet della mia azienda. Qualsiasi server web dovrebbe essere in grado di gestirlo, onestamente.

Non è davvero peggio (anzi, decisamente migliore) di loro, ad esempio, rinfrescando il browser ogni 30 secondi ... Considerando il trasferimento di dati notevolmente inferiore, sarebbe probabilmente qualcosa sulla scala di 10-20 volte migliore che rinfrescarlo ... o, circa la stessa larghezza di banda di rinfrescare una volta ogni 5-10 minuti. :-)

4

Si dovrebbe memorizzare nella cache e aggiornare la cache solo ogni 30 secondi.

+1

Dato che si sta servendo la stessa lista per tutti gli amministratori, rendere questa cache centralizzata in modo che tutti possano estrarre lo stesso elenco. Forse i trigger di DB guidano le modifiche del contenuto –

1

Nessun problema, a mio parere. I siti che funzionano su una scala molto più grande (Betfair per esempio) usano centinaia di chiamate xhr al minuto per client connesso. Ovviamente hanno infrastrutture hardware molto più grandi ma il browser se la cava bene.

Ho siti che utilizzano un intervallo più piccolo e si ridimensionano a poche centinaia di utenti simultanei che girano da un server web sinlge.

0

Direi che dipenderebbe principalmente da quanto è costosa questa query.

Anche se ora è un numero basso di utenti, sarà sempre così?

0

Come sottolineato da altCognito, il traffico Web da questo non è probabilmente un problema.

L'unica cosa che controllerei è se il carico del database richiesto per questo sarà un problema. Vale a dire. se questo è alimentato da una query che richiede un po 'di tempo per essere eseguito, causerà problemi. Se è così, ti consiglio di aggiungere un po 'di cache ai dati, o di mantenere i dati per questo in memoria invece del DB (solo caricando dal DB all'avvio e aggiungendo cose a questo elenco di memoria in-server come accadono).

0

Pesare contro l'alternativa. Se ogni utente aggiornava la pagina ogni 30 secondi, caricando l'intera pagina, la quantità di elaborazione lato server e il traffico generato sarebbero molto maggiori rispetto al semplice aggiornamento delle "parti interessanti".

Questo è il motivo per cui è stato creato AJAX.

0

Hai visto l'anteprima Google Wave ...? Per un numero così piccolo questo non è un problema, soprattutto perché gli amministratori lo sapranno. (Non è che stai mettendo un po 'di peso sulla CPU di alcuni visitatori o sulla connessione Internet mobile.)

0

Che molti utenti non stanno andando a far cadere il tuo server.

Se siete veramente preoccupato per le prestazioni, vi darò 2 consiglio:

  • Usa JSON per l'invio di dati al client, sarà più leggero di formato HTML.
  • Usa data fissa per i dati della cronologia e calcola il tempo relativo sul client, ti permetterà di memorizzare nella cache i dati della cronologia.

    {"user":"jsampson","action":"logged out","date":"20090622T170822"}

0

Sì, questo non dovrebbe essere un problema nel minimo.

Detto questo, se sei preoccupato per la quantità di dati che vengono rimandati puoi sempre fare in modo che la chiamata rispedisca un semplice flag SE ci sono nuovi dati e poi vai a prendere i dati se questo è il tuo caso.

Ma sì, con quel numero di utenti non dovresti avere problemi. Una bacheca personalizzata basata su RoR che uso frequentemente usa una tecnica simile per vedere se i thread sono stati aggiornati mentre lo stai leggendo e ha fino a 100 utenti che lo colpiscono contemporaneamente senza alcun problema.

0

Esistono diversi modi per emulare il push del server su HTTP. Tali tecniche hanno recentemente ricevuto un nome di fantasia: Comet.

Se la configurazione del server consente di eseguire script in modo indefinito, è possibile utilizzare un iframe per implementare il pannello e utilizzare i trasferimenti chunked (ad esempio tramite PHP flush()) per creare una connessione HTTP permanente. Tale soluzione dovrebbe avere il minimo di spese generali se l'intervallo di tempo tra i messaggi consecutivi è breve. Per lunghi intervalli, il polling lato client è preferibile in quanto non è necessario mantenere alcuna connessione TCP.

0

Penso che quello che hai fatto sia fantastico.

Se stavo facendo questo progetto, inizierei con quello che hai e aggiungere un evento setTimeout() per incrementare la visualizzazione dei minuti/secondi ogni secondo.

Gli utenti percepirebbero il display in tempo reale e probabilmente non avrebbero mai ricevuto l'aggiornamento della pagina.

Il pericolo con l'aggiornamento solo ogni 30 secondi è che alcune persone colpiscono di riflesso l'aggiornamento per "l'ultimo" ogni volta che rivolgono la loro attenzione verso di esso.

Considerare anche la marcatura speciale di qualsiasi cosa con un tempo inferiore a cinque minuti. E la codifica dei colori è stata registrata rispetto a quella disconnessa. Sarà più facile per le persone "scansionare" perché saranno in grado di scegliere le modifiche senza leggere tutto il testo.

+0

In realtà ho appena completato la codifica a colori per vari eventi diversi :) Grazie per l'input! – Sampson

Problemi correlati