JS/React/Electron吐槽手记

最近完整的用React写了前端。除了不能切页面做设计。和各种复杂的css调用。真的应该算是真全栈工程师了。
React真的是一个比较合适后端的框架。毕竟我对这个框架吐槽真的不多。基本上都是对js语言层面的吐槽。js这门语言的槽点真的太多了。估计下次真的再次做前端。估计会用typescript。或者试用下KotlinToJS。不过可能性也不大吧。

动态语言出问题真的是致命,尤其在写后端的时候。

JavaScript的吐槽

这么语言真的设计的太糟了。浏览器我还能忍。毕竟可见即可得。但是后端用js写真的能忍?
我就想简单的引用一个库。然后做一个简单的操作一定要我写成异步的。
然后我就嗝屁了。我才不要写成异步的。
然后看了很久的promise和async和wait。然后知道把异步用同步方法写。我当时又ORZ了。这不就是一个yield的方法的变体。
但是开始没想那么多。因为要用Electron写一些后端的业务逻辑。Electron的东西等下吐槽。但是一旦开始把js做后端我就受不了了。
ES6半吊子的组件化。工具链这么多。为了能写es6(不过es6的语法确实比以前的语法舒服)。webpack和polyfill。然后用webstorm来debug的时候就嗝屁了。真的是从来没有如此不舒服的嗝屁。
设置的断点从来没有一个断点是真实的断点+各个变量的名字替换了。特别不好debug。有当年用ddddebug的感觉。而且更糟。 然而你又不能不用。真难用到爆。 还有特别难用的bind(this)。第一次用的时候简直是(这也可以?这也可以?这也可以?)作用域可以这样乱来的。不过想到只能回调。也慢慢理解这种方法的特殊性了。
还有基本的数据结构。Dict没有keys的方法。那可以这样Object.Keys(Dict)这种奇怪的方法。而且还是es6以上才有。
同理还有更加傻逼的事情:
for(var key in Object.keys(dict)){console.log(index)}
这key不是去遍历dict的key值。而是遍历其index。哪有这样玩的?debug了良久。
还有就是前端js,这种语言真的一大堆全局变量全局方法。全局类。还能用。这我都能感觉到Chrome这种内存吞噬者的贪婪根深于js这门语言难以进行的gc,辛亏一个页面的生命周期这么短。要是用js做后端。谁部署谁完蛋。我作为一个从运维起步的假全栈。绝对不能忍nodejs项目的部署。
幸亏前段时间微博有一次大争吵。再跟我说js可以做全栈的。谁跟我说我喷谁。
最大的吐槽是。写完这个项目。突然发现自己不能写python了。这能忍?必须大吐槽。

React

其实挺喜欢React的设计理念的。React是一个好的组件化框架。好的表现方法和模式。好的生态化。
就是js吐槽的有点严重。React具体用起来没什么可吐槽的。毕竟我水品就那么高。还没用到特别不好用的地方。 界面直接用的materialUI。这个框架做界面开发太爽了。 AJAX用的是axios,这个也没有啥吐槽的。
页面router部分是ReactRouter。也蛮好用的。没啥吐槽的。就是刚开始的时候吓我。因为微信有个不兼容部分。我开始并不知道怎么debug。还以为是History这个东西不兼容。其实不是。

只是某个部分不知道怎么搞就乱搞的就是弹窗。因为是事件触发。用了原生的js库。然后动态创建个div然后再加载。基本上还好,没啥难度。

这个东西开发起来挺快的。也蛮好用的。
真正吐槽的是redux。看redux的教程是下班事件等女朋友时候看的(我就是在炫耀)。看起来蛮复杂的。写起来也感觉蛮复杂的。然后真正的用到项目后。就一个感觉。这就是函数式版本的MessageHandler。

action->前端发送逻辑
reduce->后端逻辑
store->消息总线

能把一个简单的东西搞这么复杂。真的只有js有这个本事啦。

Electron

首先得继续吐槽javascript的生态圈。这个真心差。一个解压zip的库有无数个。同步的异步的都有。就是没有一个可以带密码解压的库?太浮躁了。前端真的太浮躁了。
开始写的时候。直接用的Event的方式实现electron和渲染程序进行交流。后来发现可以用remote来直接调用好开心。可惜后端每次写完都得重启。debug特烦。而大部分代码还真的只能跑在electron上面。
不过Electron真的是个大趋势。至少该有的功能都提供了。界面也做的蛮好的。

friddle

继续阅读此作者的更多文章