Comprimo il mio JS utilizzando YuiCompressor, ma c'è qualche motivo per cui MicrosoftAjax.js non è stato minimizzato? O c'è qualche impostazione per dire di eseguire la versione compressa di esso (se c'è una versione compressa). O devo decompilarlo e ridimensionare la risorsa script da solo?C'è qualche motivo per cui MicrosoftAjax.js non è stato minimizzato?
risposta
Mi meraviglio di queste risposte fuorvianti.
ASP.NET AJAX ha sempre fornito sia versioni debug che compresse di MicrosoftAjax.js. Una combinazione dell'impostazione di debug di web.config e del controllo a cui viene fatto riferimento.
Inoltre, è possibile utilizzare the "retail" setting per forzare gli script compressi a prescindere.
Grazie per questo Dave. Bello sapere – nickytonline
Brillante, non avevo idea del setting "retail", la nostra azienda ha l'abitudine di distribuire roba in produzione ancora in modalità debug ecc. – Matt
Posso solo supporre che sia stato lasciato così com'è per facilità di comprensione, e come hai già accennato, vedo sapere il motivo per cui non puoi comprimerlo da solo, dopo tutto è solo JavaScript - Sebbene MS potrebbe piacere che tu creda diversamente, non la cospargono di polvere magica per renderla diversa! :)
[E diciamocelo; MS non ha mai avuto paura delle dimensioni del proprio codice, no?]
MODIFICA: Nella mia difesa, al momento della stesura di questa risposta non ho avuto esperienza con .NET 3.5; Ora mi rendo conto che hanno apportato diversi miglioramenti tanto necessari in questo settore.
Evidentemente, MS non ritiene che la dimensione del file JavaScript sia molto importante (che è folle). Inoltre, in base alla mia esperienza con MS Ajax, iniettano anche diversi tag SCRIPT (a volte più di 10) nel markup. Questi tag portano script da un gestore WebResource.axd. Quindi devono essere fatte dieci o più richieste solo per ottenere il Javascript necessario per eseguire la pagina! Giusto per aggiungere ridicolo, virano su una stringa di query pazzesca sull'URL del gestore, il che probabilmente impedisce che lo script venga memorizzato nella cache dal browser.
questa follia era abbastanza ragione per me di abbandonare MS Ajax completamente e passare a jQuery, che è di gran lunga migliore biblioteca, soprattutto dal Visual Studio now has Intellisense for jQuery.
Chi ha votato questa risposta e perché? –
Non sono sicuro, ho un voto da me perché condivido la vista su ASP.NET Ajax. –
Anch'io ho downvoted - forse abbiamo uno staff MS su SO? :) Vorrei che i down-elettori spiegassero perché hanno votato così ... – CJM
Quale preferireste avere:
- MicrosoftAjax.js viene compresso, offuscato già.
- MicrosoftAjax.js viene decompresso e aperto in modo che tu possa leggerlo e comprenderlo da solo.
perché non entrambi? jQuery arriva in entrambi, giusto? –
Anche se sarebbe banale avere entrambe le versioni, e anche abbastanza utile, se si dovesse prendere la via più semplice, è necessario fornire la versione non compressa. +1 perché questo non meritava il down-voting. – CJM
@Neil N. Sono d'accordo, perché non entrambi? Quando si sviluppa usa non compresso e in prod usa la versione minified/offuscata. – nickytonline
Vedi http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx, è necessario l'opzione
enableScriptMinification="true"
e aggiungere MicrosoftAjax.js alla lista
Ho letto questo articolo prima, ma grazie per averlo postato qui. Quello che stavo cercando era una soluzione pronta per l'uso da parte di Microsoft Ajax. Sembra che il fai da te sia la strada da seguire per questo. – nickytonline
Tutti gli script in System.Web.Extensions sono miniati - ci sono due versioni di ciascuno, come sottolinea l'eccellente risposta di Dave Ward. ScriptManager utilizzerà di default la versione di debug quando web.config è in modalità debug. Giralo per rilasciare con l'impostazione retail o debug = "false", quindi guarda lo script.
Inoltre, gli script serviti tramite WebResourceHandler o ScriptResourceHandler sono in effetti memorizzati nella cache.Vengono memorizzati nella cache nel miglior modo possibile - per sempre, quindi non hanno nemmeno bisogno di 301 in future visite. La querystring è così com'è, perché contiene dati crittografati. È crittografato perché contiene informazioni sulla risorsa dello script, incluso il nome di un assembly, e anche perché impedisce attacchi di flooding della cache.
Non cercando il rappresentante qui, volevo solo dare maggiori dettagli.
Buono a sapersi su WebResourceHandler o ScriptResourceHandler in fase di cache. Quindi presumo che quando apporti modifiche e ridistribuisci, questi vengono nuovamente memorizzati nella cache ma come file diversi perché la querystring crittografata è cambiata? – nickytonline
Sì. Qualsiasi modifica alla risorsa cambierà la querystring, risultando in un elemento appena memorizzato. Inoltre non ho menzionato che anche gli script sono compressi con gzip. – InfinitiesLoop
- 1. OpenLayers che non è minimizzato?
- 2. Qualche motivo per assegnare -0?
- 3. GROUP CONCAT non funziona per qualche motivo
- 4. Qual è stato il motivo per cui la valutazione dell'assegnazione Swift è stata annullata?
- 5. C'è qualche motivo tecnico/concettuale per cui iOS non supporta Cocoa Bindings?
- 6. Qualche motivo per non utilizzare USE_ETAGS con CommonMiddleware in Django?
- 7. Motivo per cui il rolagismo intorpidito è così confuso?
- 8. database: il motivo per cui l'accoppiamento
- 9. Non capisco il motivo per cui questo accade ClassCastException
- 10. C'è qualche motivo per usare il threading.Lock over multiprocessing.Lock?
- 11. Rilevamento del motivo per cui non è possibile aprire un ofstream quando fail() è true
- 12. C'è qualche altro motivo oltre alle prestazioni e alla leggibilità del motivo per cui System.String è un tipo di riferimento anziché di tipo valore?
- 13. C'è qualche motivo per usare "return! 0" in javascript?
- 14. C'è qualche motivo per usare se (1 ||! Foo())?
- 15. API MapQuest: qualche motivo per utilizzarlo su Google Maps?
- 16. C'è qualche motivo speciale per cui il costruttore di movimento non viene elidato nello snippet mostrato di seguito?
- 17. Controllare il motivo per cui il computer ha ripreso dallo stato di ibernazione
- 18. C'è un motivo per cui jQuery.each non si basa su Array.forEach quando è disponibile?
- 19. C'è un motivo per cui non è possibile popolare i tipi con DataKinds?
- 20. Diagnosi del motivo per cui le richieste WebResource.axd sono vuote
- 21. C++: C'è qualche motivo per usare uint64_t invece di size_t
- 22. Il processo non verrà minimizzato in C#
- 23. Quale codice di stato HTTP restituire quando l'operazione DELETE non è consentita per un motivo particolare
- 24. HtmlAgilityPack - Lo <form> si chiude per qualche motivo?
- 25. C'è qualche motivo per preferire UTF-16 su UTF-8?
- 26. Qualche motivo per usare byte/short ecc. In C#?
- 27. Qualche motivo per utilizzare NSViewAnimation su tecniche CoreAnimation?
- 28. C'è qualche motivo per precaricare i drawable dalle risorse?
- 29. Java: c'è qualche motivo per verificare se un singleton è nullo due volte?
- 30. Il motivo per cui MonadState viene messo e messo?
+1 Buona domanda! –
Bene dalle risposte che ho ricevuto, non sembra esserci comunque per ottenere una versione minified/compressa di MicrosoftAjax.Js fuori dalla scatola. Quindi sembra che il fai da te sia la strada da percorrere, come ho detto nella risposta che ho scelto. Come ho detto a Josh, in ASP.NET 3.5 è possibile combinare gli script ora, http://msdn.microsoft.com/en-us/library/cc488552.aspx. Non siamo ancora passati alla versione 3.5, ma quando lo faremo lo verificherò. Ho letto recensioni contrastanti a riguardo. Inoltre, ho aggiunto jQuery al progetto qualche tempo fa, quindi sto pianificando lentamente tutto ciò che può essere jQuerified. – nickytonline
Il mio commento sopra non è più vero. La risposta di Dave Ward è buona, quindi niente fai da te. – nickytonline