前不久发了一篇文章:《复杂还是分歧》,惹起了不少热议。淘宝前端工程师拔赤就此总结了一篇文章,十分值得思辩。全文如下。—

一段代码的两种了解(1)

看这段代码:

“`js
seajs.use(‘a’, function(A) {
A.doSth();
console.log(‘a’);
});

// some logic…

seajs.use(‘b’, function(B) {
B.doSth();
console.log(‘b’);
});
“`

效果来了,我们想象这段代码出如今淘宝首页,淘宝首页的结构是被联系为很多个“区块”,每个“区块”由不同业务线中的同窗开发维护,他们之间互不知晓,最终首页是被“拼凑”而成的。那么这个例子中,若A的代码报错,会不会影响B的代码?

依照玉伯的设计,由于同步执行回调,当然会影响。怎样办?淘宝首页架构师要call正在休假的A让他去改`A.doSth()`的逻辑以顺应seajs的复杂性吗?原本是一个小功用出效果,招致整个页面瘫痪掉,这种架构当然有效果。

这段代码真实的语义应当是:

“`js
seajs.use(‘a’, function(A) {
A.doSth();
console.log(‘a’);
}, {
async: true // 异步执行callback
})

// some logic…

seajs.use(‘b’, function(B) {
B.doSth();
console.log(‘b’);
}, {
async: false // 同步执行callback
})
“`

seajs的“分歧性”隐藏了这个重要的配置。

一段代码的两种了解(2)
看这段代码:

“`js
seajs.use(‘a’, ‘b’, ‘c’, callback)
“`

这段代码有两种了解

1、我想依次执行`a.js`,`b.js`,`c.js`,这时a、b、c之间有依赖。

2、我想尽快执行`a.js`、`b.js`、`c.js`的代码,三者无依赖。

关于第一种状况,三段代码的加载顺序无要紧,只需三者顺序执行即可,这和阅读器中写入script标签一样。
关于第二种状况,由于有“商定”三者无依赖,每段js代码加载完成后立刻执行。
`a.js`、`b.js`、`c.js`之间究竟有无依赖,在这段代码中是看不出来的。其实上段代码的真实语义其实同等于
“`js
seajs.use(‘a’, ‘b’, ‘c’, callback, {
sequential: false // 不要顺序执行a,b,c
});
“`

效果又来了,seajs默许三者之间无依赖。假设真有呢?异样,seajs的“分歧性”隐藏了这个配置信息。
小结
其实,代码所包括的信息,不会由于代码量增加而增加。代码过于繁复,就需求额外的“规约”来传达这些重要信息。“黄金规律”中提到的“复杂性”就是指商定,商定共识,做事才会复杂。其中提到的“完整性”是指的底层机制的强健,说的直白一点就是面向场景的设计。

这时,seajs就和旧有的类库有所不同,seajs提供“方法”和“思绪”,而jquery、yui、mootools等则提供“工具”。两种思绪直接决议了类库所面向的“效果集合”。因此,seajs需求“学习”,而jquery更多的则是需求“查阅”。

关于详细的场景来说,“分歧”的商定难免单薄,相比之下,“工具”则更易于被群众接受。实际最终是要和业务结合,这也是为什么一个“懂”业务的框架看起来不美的缘由。“懂业务”带来的复杂性和“强商定”带来的优雅的编程体验,两者之间,你会选择哪个?

提供最优质的资源集合

立即查看 了解详情