मिला जेसनस्मिथ का एवर जबरदस्त मददगार है, शायद आवश्यकता से अधिक जरुरी दस्तावेज।
हालाँकि, अलग-अलग AJAX अनुरोधों के लिए (छोटे) परिभाषित-घोषित मॉड्यूल ("requ_jquery" "requirement_sammy") से बचने के लिए इस पर अनुकूलन करने का एक तरीका है। मुझे संदेह है कि r.js इसे ऑप्टिमाइज़ेशन स्टेज पर करेंगे, लेकिन आप पथ, बेसुरि सिस्टम से न लड़ने के लिए समय से पहले ऐसा कर सकते हैं।
index.html:
<html>
<head>
<script data-main="js/loader.js" src="js/require.js"></script>
</head>
</html>
loader.js:
var jQueryAndShims = ['jquery']
if(window.JSON == null){
jQueryAndShims.push('json2')
define(
'json2'
, ['js/libs/json2.min.js']
, function() {
return window.JSON
}
)
}
define(
'jquery'
, ['js/libs/jquery_custom.min.js']
, function() {
return window.jQuery
}
)
require(jQueryAndShims, function($) {
define(
'sammy_and_friends'
, ['jquery','js/libs/jquery_pluginone.min.js','js/libs/jquery_plugintwo.min.js','js/libs/sammy.min.js']
, function($) {
return $
}
)
require(['sammy_and_friends'], function() {
define(
'sammy_extended'
, ['sammy_and_friends','js/libs/sammy_pluginone.min.js','js/libs/sammy_plugintwo.min.js']
, function($) {
return $
}
)
define(
'myapp'
, ['sammy_extended', 'js/myapplication_v20111231.js']
, function($, myapp_instantiator) {
return myapp_instantiator($)
}
)
require(['jquery', 'myapp'], function($, myappinstance) {
$(document).ready(function() {myappinstance.Run()})
})
})
})
अंत में, myapplication.js:
define(function() {
return function($) {
var MyAppClass = function($) {
var me = this
this._sammy_application = $.sammy(function() {
this.raise_errors = true
this.debug = true
this.run_interval_every = 300
this.template_engine = null
this.element_selector = 'body'
})
this._sammy_application.route(...)
this.MyAppMethodA = function(blah){log(blah)}
this.Run = function() {
me._sammy_application.run('#/')
}
}
return new MyAppClass($)
}
})
इस संरचना (शिथिलता की जगह (डुप्लिकेट?) की आवश्यकता हैJJS आदेश प्लगइन, लेकिन) आप निर्भर करता है और निर्भर पेड़ की परिभाषा के लिए और अधिक नियंत्रण जोड़कर AJAX के लिए आवश्यक फ़ाइलों की संख्या को prune करने की अनुमति देता है।
अलग से jQuery लोड करने के लिए एक बड़ा बोनस भी है (जो आमतौर पर 100k पर आता है) - आप सर्वर पर कैशिंग को नियंत्रित कर सकते हैं, या ब्राउज़र के लोकलस्टोरेज में jQuery को कैश कर सकते हैं। यहाँ AMD-Cache प्रोजेक्ट पर एक नज़र डालें। https://github.com/jensarps/AMD-cache फिर डिफाइन को बदलें (स्टेटमेंट्स टू "कैश!": और यह यूजर के ब्राउजर में अटका रहेगा।
define(
'jquery'
, ['cache!js/libs/jquery_old.min.js']
, function() {
return window.jQuery
}
)
JQuery के 1.7.x के बारे में नोट करें। यह अब केवल विंडो ऑब्जेक्ट के साथ संलग्न नहीं होता है, इसलिए ऊपर अनमॉडिफाइड jQuery 1.7.x + फ़ाइल के साथ काम नहीं करेगा। वहां आपको अपना jquery **। Js को बंद करने से पहले इसे शामिल करना होगा "}) (विंडो);";
;window.jQuery=window.$=jQuery
यदि आपके पास कंसोल में "jQuery के अपरिभाषित" त्रुटियां हैं, तो यह एक संकेत jQuery संस्करण है जिसका आप उपयोग कर रहे हैं, स्वयं को विंडो में संलग्न नहीं कर रहा है।
कोड लाइसेंस: सार्वजनिक डोमेन।
खुलासे: जावास्क्रिप्ट ऊपर "छद्म कोड" की बदबू आ रही है क्योंकि यह अधिक विस्तृत उत्पादन कोड का एक पैराफ्रीजिंग (हाथ से छंटाई) है। जैसा कि ऊपर प्रस्तुत कोड काम करने की गारंटी नहीं है और प्रस्तुत के रूप में काम करने के लिए परीक्षण नहीं किया गया था। ऑडिट करो, परखो। अर्धविराम उद्देश्य पर छोड़ दिया गया है, क्योंकि वे जेएस कल्पना के अनुसार आवश्यक नहीं हैं और कोड उनके बिना बेहतर दिखता है।