如何获取一组依赖关系并将其建模为串行和并行操作?
例如:
U1取决于U2
可以是
的连续表示S: [U1, U2]
U1和U2不依赖是并行表示。
P: [U1, U2]
S表示串行,P表示并行。在此示例中,U指的是指向资源的URL。
在并行资源中,排序无关紧要。在串行资源中,排序很重要。
我正在尝试构建资源加载器。
它只需要与本地服务器一起使用。此外,它只使用Ajax get请求来加载资源。
但我想用一种语言/语法来模拟依赖资源的复杂性。
澄清和示例
这是为了学习/以后的实施。没有外部库,除非您可以将它们用于加载的语法与问题联系起来。
示例1
Jqueryui依赖于jquery。这将表示为......
S: [U-jquery, U-jqueryui]
示例2
jquery.js不依赖于underscore.js。这将表示为......
P: [U-jquery, U-underscore]
示例3
backbone.js取决于underscore.js和jquery.js
P:[U-underscore, U-jquery] // group1
S:[some_notation to represent group1, U-backbone.js]
答案 0 :(得分:1)
除非您可以将用于加载的语法与问题相关联,否则不要使用外部库。
您可能希望查看require.js以及它如何指定其依赖项。 MediaWiki的ResourceLoader也很有趣,虽然JS依赖关系图是由PHP脚本动态生成的,但它的结构可能是相关的。
Jqueryui依赖于jquery。这将表示为......
S: [U-jquery, U-jqueryui]
可能,为什么不呢。但是我不确定你是否想发明自己的DSL用于依赖管理;如果您更愿意坚持使用标准的JSON /对象文字,我建议使用对象的键来表示您声明其依赖关系的模块,然后将其列为值:
deps = {
"U-jqueryui": /*depends on*/ ["U-jquery" /*and nothing else*/]
};
jquery.js不依赖于underscore.js。这将表示为......
P: [U-jquery, U-underscore]
我不明白。为什么需要明确声明?所有不相关的东西(不会[明确地]以某种方式相互依赖)应默认为无序加载/执行。否则,您将拥有指数量的独立模块的P声明;如果你错过了会发生什么?
backbone.js取决于underscore.js和jquery.js
P:[U-underscore, U-jquery] // group1 S:[some_notation to represent group1, U-backbone.js]
我只会使用与示例#1中相同的形式:
deps = {
"U-backbone.js": /*depends on*/ ["U-underscore", /*and*/ "U-jquery"]
};
如果你确实需要某些组,你可以创建它们就像一个没有主体的模块,它只是加载它的所有依赖项并提供它们。在你的加载器代码中然后为它们做一些例外(基于不以U-
开头的名称?)因此它们不会触发实际的ajax请求。您的最终依赖对象将看起来像
deps = {
"U-jqueryui": ["U-jquery"],
"group1": ["U-underscore", "U-jquery"],
"U-backbone.js": ["group1"]
};
答案 1 :(得分:-1)
检查Modernizr.load
:
你很可能对自己并不十分不满 脚本下载速度现在,但你会很高兴知道 Modernizr.load不会减慢任何速度,有时可以提供 通过异步加载脚本来提高性能 平行。这个领域有很多变量需要权衡,所以我们 建议你尝试一些事情来确保你获得最大化 针对您的具体情况的表现。