Visualizzazione dei risultati da 1 a 5 su 5

Discussione: array in js

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    array in js

    ciao.
    Volevo chiedere qual è la differenza tra un array dichiarato con var xxx = new array() e un array con xxx = [].
    Esistono significative differenze di prestazioni ?
    perche devo inserire circa 1000/2000 elementi di una classe mesh e scorrerli ogni 1/30 di sec per richiamere la loro funzione draw

    for(i = 0 ; i < 2000 ; i++){
    var mesh = m_meshes[i];
    mesh.Draw();
    }

    è un progetto webgl.
    scusate l'ignoranza.
    grazie.

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669

    Re: array in js

    Sì, dichiarare un array in maniera letterale ([]) è più rapido che dichiararlo attraverso l'invocazione del suo costruttore (new Array()). Ma dipende dai browsers... Provalo tu stesso! Il codice seguente esegue 10000000 volte la costruzione di un nuovo array. Provalo così e poi prova a sostituire new Array() &ndash; in rosso &ndash; con [] e fai i test sui vari browsers&hellip;

    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Tempo impiegato</title>
    <script type="text/javascript">
    function getElapsedTime (func) {
    	var nStartDate = new Date(), vReturn = func(), nEndDate = new Date();
    	alert("Tempo impiegato: " + String(nEndDate.getTime() - nStartDate.getTime()) + " millisecondi");
    	return vReturn;
    }
    
    
    getElapsedTime(function () {
    	var bResult;
    	for (var iCount = 0; iCount < 10000000; iCount++) {
    		bResult = new Array();
    	}
    	return bResult;
    });
    </script>
    </head>
    <body></body>
    </html>
    http://stackoverflow.com/questions/9...javascript-arr

    P.S. Puoi usare questo script e la relativa funzione getElapsedTime per misurare tutte le prestazioni che ti occorrono. Per renderti conto se una cosa è più prestante di un'altra devi utilizzare cicli molto grossi.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    no , non è il test corretto perchè l'array viene inizializzato una sola volta e non ha senso testare il tempo che ci mette ad essere creato , il tempo di dichiarazione che sia con new o meno non è il parametro giusto.
    Piuttosto dovrei provare a caricare l'array con 213092792138721 elementi e verificare il tempo che ci mette a scorrerlo .
    Adesso lo faccio.
    grazie per le funzioni che gestiscono il tempo , non le conoscevo.
    ciao.

  4. #4
    Il motivo per cui sono state introdotte le due notazioni è il seguente:

    se tu dici (notazione originale)
    var foo= new Array(7)
    il numero 7 NON è un elemento della array, ma ne segnala la LUNGHEZZA. Cioè se come argomento viene passato UN SOLO numero, esso non è una entry della array, ma la sua lunghezza.
    Se invece scrivi
    var foo= new Array(7,2)
    allora sia 7 che 2 erano elementi della array.

    Per ovviare a questo "inconveniente" o a questo aspetto vagamente irrazionale, venne in seguito ammessa la sintassi
    var foo=[]

    All' interno di tale sintassi se poni
    var foo=[7]
    7 NON è la lunghezza, ma è direttamente un elemento della array.

    Avendo una memoria storica della vicenda, ci si ricorda bene di quel momento in cui la seconda notazione venne ammessa e di quali erano i problemi allora dibattuti. ma da un punto di vista pratico, questa è l'unica differenza: le due strutture dati poi sono entrambe array, per proprietà e metodi, INDIPENDENTEMENTE dalla notazione del costruttore impiegato, e con gli identici caratteri in termini di prestazione.

    spero che questo chiarisca il tuo dubbbio.

    ps array molto lunghe non ha senso farle ciclare dal lato client: rischi di impallargli il browser perchè non è detto che tutti gli utenti abbiano il nostro esacore

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da giuseppe500
    no , non è il test corretto perchè l'array viene inizializzato una sola volta e non ha senso testare il tempo che ci mette ad essere creato , il tempo di dichiarazione che sia con new o meno non è il parametro giusto.
    Piuttosto dovrei provare a caricare l'array con 213092792138721 elementi e verificare il tempo che ci mette a scorrerlo .
    Adesso lo faccio.
    grazie per le funzioni che gestiscono il tempo , non le conoscevo.
    ciao.
    In quel caso il tempo dovrebbe essere lo stesso&hellip; come ti diceva TrueLies, l'array creato con new Array() è identico all'array creato in maniera letterale. È nel crearlo che può cambiare qualcosa. Ma se devi creare un solo array è praticamente la stessa cosa comunque!!!

    Originariamente inviato da TrueLies
    identici caratteri in termini di prestazione.
    Fare test con Chrome, please

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.