javascript - 图 - 将依赖关系建模为并行/串行

标签 javascript

如何获取一组依赖项并将它们建模为串行和并行操作?

例如:

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/

相关文章:

php - 验证所有国家/地区的身份证号码

javascript - 为什么我得到 ngRepeat :dupes when sending data from an Array into a differently named Array?

javascript - 令人困惑的 Javascript 属性访问器

javascript - 除了问号之外还有其他缓存方法吗?

javascript - 如何在新窗口中以及右键单击新选项卡/窗口中打开链接?

javascript - 滚动上的 jQuery 滑动菜单

javascript - jQuery 从许多具有相同 .class 的元素中更改单击元素的 CSS 背景

c# - C# 中的服务器端 Javascript 警报

javascript - SquareUp 支付 : Can we turn off SSL verification for development server?

javascript - React 片段序列化。错误: Cannot convert a Symbol value to a string