您的位置:首页 > Web前端 > JavaScript

纯粹吐槽

2015-08-20 12:51 585 查看

PostCSS

最近PostCSS风生水起,一方面由于cssnext这个神级插件的存在,使得我们可以尝鲜CSS的新标准,就像我们现在已经开始使用ES 2015一样。

PostCSS让人开心的地方包括:

1. 我们可以定制自己的CSS开发规范,几乎可以完全模拟Less\Sass\Stylus。

2. 新的CSS语法。

3. PostCSS的架构允许我们随意扩展CSS的功能。

下面开始吐槽

我尝试在自己的工作流中,用PostCSS替代原先的less+autoprefixer+cssmin的开发流程。开始还是很愉快的,因为对于我来说,改动量不大。之后诡异的事情就发生了。

一丝大神的cssgrace插件很牛,即包含了一些autoprefixer的东西,也包含了一些cssnext的东西。但是它必须检查background-image中引用的文件是否存在。由于cssgrace帮你检查图片的尺寸,所以这一点无可厚非,可问题在于:

通常开发中文件的相对路径与线上的文件的相对路径是不一样的。为此我甚至改动了我项目的目录结构和打包方式。

理想情况下,图片是需要放在一个CDN服务器上得,所以图片的路径都是引用的url,而不是相对路径,这个时候cssgrace就完全没办法工作了。这让我想到了同样神一样的Emmet插件就可以通过图片路径计算出图片的尺寸,无论线上图片还是本地图片。

cssnext、cssnano、autoprefixer,这三个我需要用到的PostCSS插件,无论我用什么方式排列组合,都不能正常工作,要么cssnano无法压缩CSS,要么cssnext无法正确的处理css。

结论

目前看来PostCSS本身是一个创举,它设定了一套CSS后处理器工作流程,首先它会分析CSS的语法树,然后各种插件就可以按照自己的粒度,或者按照一条css声明,或者按照一个选择器声明来工作。总体而言对于CSS只有一次解析,类似于编译器的一遍编译。但是它的插件众多,造成了

1. 各个插件之间兼容性很难处理。

2. 太灵活了,插件存在海量的组合可能,造成我们每个人都可能写出完全不一样的CSS代码,如果团队协作开发,你告诉我这不是噩梦?

3. 现在的插件还不能说非常成熟,有着各种bug。

BTW

中间尝试过一次,使用PostCSS处理Less输出文件的愚蠢做法,打包效率会略微慢一些。

React

这里要吐槽的是单纯的ReactJS,不包含React Native之类的周边产品。按照惯例,先扬后抑。

React确实是伟大的创新,在我看来创新点包括:

1. Virtual Dom使得Dom变得稍微快了一点。

2. 几乎是强制开发者开发组件化的代码。React的架构决定了,你不会将一个复杂的页面整块的放到一个React Class/Component中,否则这个类的复杂度会非常高,比不用React还要高。 同事,每个组件(React Cass或者说Component)都天然的拥有状态。很容易开发出组件的状态自动机。

3. 与Flux结合,一切都变得清晰了,Store和Component的复用性得到大大提高。单向事件流(其实是Action啦),使得事件变得清晰,开发者不会被淹死在事件\消息混乱造成的Bug上面。

开始吐槽

React也会有些让人很难受的地方。比如:

学习成本稍微高了一点,因为这样的开发方式与原先荒蛮时代的前端开发,或者说与现有的MV*架构完全不一样。从React几乎重新发明了JS就可以看出来。

React最新版中已经不鼓励使用mixins这种不雅的做法了,但是Reflux之类的flux实现还没有及时跟进。说实话,我没觉得mixin会破坏类的独立性,也没有觉得它难以维护。mixin就像让一个类继承了一个抽象类,FB可能觉得不爽的地方可能是它其实是在React的lifetime上做了一个hook,并且修改了JSX的语法。

看下React打包之后的体积,如果再加上一个flux的实现,加上jQuery或者zepto这样的工具库,页面的脚本体积已经非常大了,即便在PC端,这样的体积也不是可以忽略的,更遑论在移动端了。

对于新手很容易写出代码层次很深的过度设计的代码,当然这个不算啥缺点,我只是嘴秃噜了,顺口说一句。

zepto和underscore

这两个家伙对于移动端开发很重要,因为即便定制过的jquery,也比zepto大很多,国内使用2G网络的用户比例依旧很高(这一点不用怀疑),所以移动端使用zepto是必须的。 underscore提供了很多非常有用的方法。这两个家伙让我感觉唯一不爽的是:这两个都是单文件的,没有模块化,如果使用就必须使用完整的版本,无法定制。另外,zepto这个东西,居然在webpack中无法直接require,只能全局引入,这几乎是不可原谅的。

所以准备把zepto精简下,就像淘宝的代码女神妙境将它精简到10KB这样吓人的体积一样,希望我不会差太多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息