2013-02-15 17 views
13

Avvierò una ricca applicazione Web lato client con Ruby on Rails 3.2. Intendevo utilizzare RequireJS, ma sembra entrare in collisione con la pipeline di asset. Per quanto ne so, ciò che fondamentalmente fa è concatenare le risorse dipendenti, minimizzarle e comprimerle (correggimi se ho torto), che non sembra molto compatibile con il caricamento di file JavaScript in modo asincrono.Rails 3.2 Asset Pipeline and RequireJS

A prima vista, Asset Pipeline sembra avere prestazioni molto migliori. Tuttavia, RequireJS ti consente di organizzare il codice JavaScript nei moduli facilmente riutilizzando e mantieni le sue dipendenze.

C'è un modo per combinarli entrambi? Nel caso non ci sia, quale sceglieresti?

+0

Cosa si intende per RequireJS: inclusione nel browser dei moduli js o lato server? –

+0

Sarebbe usato nel browser – davids

+0

Farà il lavoro bene. –

risposta

4

Vorrei suggerire di scaricare la libreria RequireJS e lanciarla su vendor/assets/javascripts. Poi, nel tuo application.js del file:

//= require require 

(? Divertente, sì), e che dovrebbe essere sufficiente.

Questo è il modo più semplice per combinare asset-pipeline e una libreria js modulare. Non sono a conoscenza di ulteriori impostazioni necessarie per questa particolare libreria, ma è possibile dare un'occhiata a this Railscast, che descrive qualcosa di simile.

+0

Va bene, funzionerà, ma, perché non disabilitare la pipeline, allora? – davids

+0

Penso che se qualcosa funziona bene dovrebbe essere mantenuto così com'è. Cosa sarebbe senza la pipeline: js non compresso avanti e indietro ... –

+1

Ma il mio punto è che gli script caricati in modo asincrono non sarebbero compressi, vero? Non sarebbero inclusi nel manifest – davids

7

si potrebbe desiderare di avere uno sguardo a questo gioiello https://github.com/jwhitley/requirejs-rails/

sembra fare ciò che si vuole - che è quello di utilizzare requirejs per lato client di carico, pur approfittando di alcune delle pipeline di risorsa.

Sarei tentato di suggerire che suppongo che nella maggior parte dei casi la pipeline delle risorse sarebbe molto più veloce in quanto carica una risorsa js minificata singola. La gestione delle dipendenze non è così buona, quindi dipende molto dall'app.

+1

Dipende totalmente dal processo di creazione/dall'app. È possibile utilizzare r.js per eseguire il minify in un singolo file per la produzione, oppure sfruttare AMD e creare pacchetti che caricano pacchetti on-demand o a carico lento che verranno utilizzati in seguito. – kmiyashiro

Problemi correlati