Drupal Code Stats - I grafici preliminari di PureGin

[title-raw]

PureGin sta preparando una serie di grafici che saranno possibile oggetto di un talk al DrupalConSF.

Lo studio va ad analizzare una serie di statistiche dal punto di vista del codice; Commenti, dimensione dei file, numero di funzioni e chiamate ad esse, nonchè i diversi tipi di files in percentuale. Per ora PureGin ha analizzato Drupal (nelle release 4.6, 4.7, 5, 6 e 7) e Joomla! (ultima release).

Potete trarre le vostre conclusioni dopo aver confrontato il numero di linee di commento tra le diverse release di Drupal rispetto a Joomla :D

Drupal-Stats

jQuery and performance mini-analysis

[title-raw]

Mavimo ha recentemente scritto un interessantissimo post sul suo blog riguardo alle prestazioni dei selettori jQuery. Mi è servito come spunto per analizzare la questione delle performance, importantissima soprattutto in ambienti con risorse limitate come i cellulari/pda.

Analizzando il codice inserito da Mavimo possiamo notare come la più grande differenza tra i due selettori è che il primo non utilizza i context, mentre il secondo si. In altre parole

$('#menu-container a').each(function () { /* */ });

Effettua prima il parsing della "formula" css like, poi cerca l'elemento con ID "#menu-container" in tutto il documento e infine cerca tutti i tag 'a' al suo interno.

Il secondo selettore, ovvero

$('a', '#menu-container').each(function () { /* */ });

usa il context #menu-container, ovvero cerca tutti i tag 'a' usando come contesto la funzione nativa getElementByID(), che è ovviamente più veloce.

Qui sotto altri test con la libreria jQuery 1.4.2/1.3.2 (browser: Firefox 3.6.2)

  console.time("select element nested");
  for(var i = 0; i < 10000; i++ ) {
    $('a', '#menu_container');
  };
  console.timeEnd("select element nested");

Time: 741ms/828ms

  console.time("select element w/o context");
  for(var i = 0; i < 10000; i++ ) {
    $('#menu_container a');
  };
  console.timeEnd("select element w/o context");

Time: 1362ms/1543ms

  console.time("select element cached+find");
  for(var i = 0; i < 10000; i++ ) {
    var elem = $('#menu-container');
    elem.find('a');
  };
  console.timeEnd("select element cached+find");  

Time: 716ms/1044ms

  console.time("select element cached+find");
  for(var i = 0; i < 10000; i++ ) {
    $('#menu-container').find('a');
  };
  console.timeEnd("select element cached+find");  

Time: 914ms/795ms

  console.time("select element cached+find");
  var elem = $('#menu-container');
  for(var i = 0; i < 10000; i++ ) {
    elem.find('a');
  };
  console.timeEnd("select element cached+find");  

Time: 575ms/629ms

Il testo è stato effettuato su questa pagina (http://drupal.org/project/install_profile_api) e effettivamente non ho rilevato le grandi differenze riscontrate da mavimo tra i due metodi.

Per chiudere, il vantaggio va totalmente a perdersi nel caso si usino selettori multipli come context, anzi, cosa per me per ora inspiegabile il metodo a context è perfino più lento.

  console.time("selector1");
  for(var i = 0; i < 10000; i++ ) {
    $('a', '#menu_container #link');
  };
  console.timeEnd("selector1");

Time: 2131ms (1.3)

  
  console.time("select element w/o context");
  for(var i = 0; i < 10000; i++ ) {
    $('#menu_container #link a');
  };
  console.timeEnd("select element w/o context"); 

Time: 1897ms (1.3)

Photo Credits: Peter Hellberg

Views API Parte 1: come collegare il vostro modulo a Views

[title-raw]

Ne abbiamo viste di Viste, e le viste su Database non differiscono molto da quelle che si possono realizzare con il modulo Views, tanto famoso quanto incompreso.

In attesa di avere una documentazione migliore, faccio un tutorial a puntate, molto semplice che mira a risolvere un problema da me affrontato, ovvero come integrare Views2 con il proprio Modulo.

Per prima cosa vediamo come organizzare il Vostro modulo tenendo separati in una cartella a se i files riguardanti Views2 e indicare a quale versione dell'API ci stiamo riferendo.

La funzione qui sotto indica che l'API usata è la 2, mentre la cartella in cui Views dovrà cercare tutti i file sarà CARTELLA_DEL_PROPRIO_MODULO/views.

/**
 * Implementation of hook_views_api(). 
 * @return unknown_type
 */
function IL_TUO_MODULO_views_api() {
  return array(
    'api' => 2,
    'path' => drupal_get_path('module', 'IL_TUO_MODULO') .'/views',
  );
}

Nella cartella views andremo ad inserire IL_TUO_MODULO.views.inc, ovvero il file che indica tutte le tabelle e i campi (anche esterni), ma questo sarà argomento della prossima puntata :)

Recent comments

Social Me

DA Member

Drupal Association Badge