2013-10-29 11 views
15

L'ultima volta che ho avuto il problema con active_admin. Nelle tabelle in cui ho più di 5000 righe di dati, funziona molto lentamente. Come posso ottimizzarlo? Forse qualcuno conosce alcuni plugin di caricamento asincrono per questo modulo?Come ottimizzare active_admin

risposta

35

Ci sono un paio di cose che puoi fare.

Per impostazione predefinita, Active Admin carica le associazioni come filtri a discesa nella pagina dell'indice. Se questi filtri non vengono utilizzati, è utile rimuoverli poiché creano un'istanza di ogni record di quel modello per creare il menu a discesa.

ActiveAdmin.register Post do 
    remove_filter :categories 
end 

Se la pagina dell'indice contiene colonne che dipendono dai record associati, è utile caricarle in modo ingombrante.

ActiveAdmin.register Post do 
    controller do 
    def scoped_collection 
     super.includes :author, :publisher 
    end 
    end 
end 

Questo in realtà non applicabile in quanto hai solo 5000 record, ma se si arriva al punto in cui anche un DB COUNT del tavolo richiede molto tempo, si potrebbe desiderare di disabilitare il conteggio sul fondo destra della pagina indice. (questa funzionalità è stata aggiunta in 0.6.1)

ActiveAdmin.register Post do 
    index pagination_total: false 
end 
+3

Grazie! Questa è un'ottima risposta! – itdxer

+0

Sarebbe molto più veloce impostare il filtro su qualcosa come 'filter: association, come:: select, collection: -> {Association.pluck: id}' ... in opposizione all'istanziazione di un oggetto Ruby per ogni 'associazione' row as è l'impostazione predefinita quando si 'filter: association' incondizionatamente? – mecampbellsoup

+0

Sì, sarebbe di grande aiuto. Ma avresti bisogno di essere sicuro di restituire anche un nome umano. Ad esempio: 'Author.pluck (: name,: id)' – seanlinsley