Domanda

Comprendo le sottili differenze tra richiedono , carica e autoload in Ruby, ma la mia domanda è: come fai a sapere quale uso?

Oltre a poter "avvolgere " un carica in un modulo anonimo, richiedi sembra essere preferito.

Ma poi autoload ti permette di caricare i file in modo pigro - il che suona fantastico ma non sono sicuro praticamente ciò che guadagni su richiedono

È preferibile un metodo rispetto all'altro? C'è una situazione in cui un metodo si distingue?

È stato utile?

Soluzione

Generalmente, dovresti usare richiedi . load ricaricherà il codice ogni volta, quindi se lo fai da più moduli, dovrai fare molto lavoro extra. La pigrizia di autoload suona bene in teoria, ma molti moduli di Ruby fanno cose come l'applicazione di patch di scimmia ad altre classi, il che significa che il comportamento di parti non correlate del programma può dipendere dal fatto che una determinata classe sia stata utilizzata ancora o no. autoload è in procinto di essere deprecato , quindi il suo utilizzo dovrebbe essere evitato.

Se vuoi creare il tuo ricaricatore automatico che carica il tuo codice ogni volta che cambia o ogni volta che qualcuno colpisce un URL (per scopi di sviluppo, quindi non devi riavviare il tuo server ogni volta), quindi usa caricare per questo è ragionevole.

Altri suggerimenti

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Prova in irb

irb(main):001:0> require 'mylibrary'
I was loaded!
=> true

irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>

Vedi la differenza.

ecco cosa ottieni con caricamento automatico su richiedi :

autoload serve principalmente per accelerare la fase di inizializzazione del programma Ruby o dell'applicazione Rails. Non caricando le risorse fino a quando non sono necessarie, può accelerare un po 'le cose.

Un altro vantaggio è che potrebbe non essere necessario caricare alcune parti del codice, se l'utente non utilizza determinate funzionalità, migliorando così il tempo di caricamento e riducendo il footprint di memoria.

A parte ciò che altri ti hanno già detto, il futuro di caricamento automatico è incerto. È stato pianificato di essere deprecato in Ruby 2.0, ma la deprecazione non è stata effettuata in tempo per il blocco delle funzionalità 2.0. Ora si prevede che autoload sarà deprecato in Ruby 2.1, ma questo è nemmeno più certo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top