如何获取一组依赖项并将它们建模为串行和并行操作?
例如:
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]
最佳答案
No outside libraries unless you can relate the syntax they use for loading to the question.
您可能想看看require.js以及它如何指定其依赖项。 MediaWiki 的 ResourceLoader也很有趣,虽然 JS 依赖关系图是由 PHP 脚本动态生成的,但它的结构可能是相关的。
Jqueryui depends upon jquery. This would be represented as...
S: [U-jquery, U-jqueryui]
有可能,为什么不呢。然而我不确定你是否想发明自己的 DSL 来进行依赖管理;如果您想坚持使用标准 JSON/对象文字,我建议对您声明其依赖项的模块使用对象的键,然后列出为值:
deps = {
"U-jqueryui": /*depends on*/ ["U-jquery" /*and nothing else*/]
};
jquery.js does not depend upon underscore.js. This would be represented as...
P: [U-jquery, U-underscore]
我不明白。为什么你需要明确声明这一点?所有不相关的东西(不[明确]以某种方式相互依赖)都应该默认为无序加载/执行。否则,您将拥有指数数量的独立模块 P 声明;如果您错过了一个该怎么办?
backbone.js depends upon both underscore.js and 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"]
};
如果您确实需要组来实现某些功能,您可以像创建没有主体的模块一样创建它们,该模块仅加载其所有依赖项并提供它们。然后在您的加载程序代码中为它们设置一些异常(exception)(基于名称可能不是以 U-
开头?),这样它们就不会触发实际的 ajax 请求。您的最终依赖对象将如下所示
deps = {
"U-jqueryui": ["U-jquery"],
"group1": ["U-underscore", "U-jquery"],
"U-backbone.js": ["group1"]
};
关于javascript - 图 - 将依赖关系建模为并行/串行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15724403/