2016 年做前端开发是什么体验?混乱+开倒车,这是我的体验

2016-10-18 09:16:02 +08:00
 murmur
有人说,你有什么资格发表这种高谈阔论,实际上是这样的,我在看 lol 比赛直播的时候,有个很有名的主播说过,打到 2400 以上的都去做职业玩家了, 1800-的还在挣扎,只有 2000 徘徊的才出来做主播,的却是这样,如果你是一个能力很强的程序员,你可以驾驭任何新技术、框架,那么你的牛逼可能掩盖一些真正的问题,但是有些人偏偏把问题说成 feature 。

很多前端开发以鄙视 jQuery 为荣,以 jq-free 作为吹资,这是没问题的,因为如果你的目标是 IE9+,或者移动端, MVVM 框架可以让你不用 jq 。但是,我们来考虑 2 点,为什么强迫用户升级 IE8 到 chrome ? win7 是如此优秀的操作系统,网吧的电脑,甚至很多办公电脑都是 xp ,大量的网站兼容了 IE8 ,用户就是上帝,我们有资格要求上帝无缘无故升级浏览器么?很多程序员鄙视 360 ,但是你们真应该好好感谢 360 , 360 用一种比较温和的方式让大量用户升级了有 chrome 内核的浏览器,相比之下 YY 简直是强奸用户一样,在后台做不可告人的勾当。

那么接下来说 JQ 优秀在何处, JQ 不是框架胜似框架,而且我希望每个产品经理都学习一下 JQ , JQ 的使用量绝对不是偶然,首先 JQ 的 api 设计非常优秀(用$代替所有选择器是太牛逼的设计,当然这里也要提一下underscore的下划线),这个比起开倒车的 fetch 不知道高到那里去,我也用过 axios , axios 在 get 和 post 下用一个用 params 一个用 data ,这是语义要求还是标准要求的呢?我不想管语义,因为工具类的封装就是要屏蔽掉语义的差异和不方便,做到以人为本。很多人批判 JQ 一个选择器干太多事,但是如果 jq 把$换成 jqDOM 、 jqString 、 jqSelector ,那么还会有多少人用一个框架。

兼容性就不提了, jq2 完美兼容 jq1 ,只是舍弃了一些浏览器。值得产品经理学习的是, jq 专注解决程序员遇到的 dom 操作问题,顺便附送了几乎完美的 ajax 封装和一些工具类,该有的都有了,而且几乎没有任何多余的功能。所以,在移动端没发力之前,很多前端都是 jq+模板搞定一切。所以说,想把 jq 批判一番,搞个大新闻?

接下来,让我们说一下 react ,我最近也跳了这个坑,没办法, ng2 和 vue 在我需要的一个第三方核心组件上表现的太差,甚至 vue 的这个组件 demo 都无法打开, star 也被几十倍的碾压。但是这不代表 react 没有问题,有很多人说 react 牛就牛在 jsx 上,是的,我最近在写, jsx 的却很灵活,内嵌函数的写法可以让你做到几乎无所不能。但是,我想反过来问你,你这辈子用过的模板,无论 js 、 java 、 python ,谁家的模板不支持 if 和 for ,这个时候有人跳出来教育我 jsx 不是模板,模板的定义太简单了,一个字符串,支持${}这样的变量替换,这就是模板, jsx 完全满足这个条件。当然,群众的需求总有人满足, npm 上有大量的 if 和 for 实现可以用。

另外一点我想说的是 redux 或者 flux ,这种设计,为了弥补 react 本身单向传递数据的不足(你说是 feature 我也没办法),我认为单向实际上也是一种倒车,因为无论以前 ng1 ,现在 ng2 ,国产 vue 还有支持 ie6 的 avalon 都是双绑支持,偏偏到了 react 这里就是单向绑定。我第一眼看到 redux ,这不就是一个状态机么,再想想,回想起本科学过的编译原理和形式语言与自动机这些课程,是的,状态机不简单,尤其是把一个大系统的状态清晰的梳理起来,不是一件容易的事,对团队要求很高,因此我在项目选型时,果断拒绝了 redux 使用了以前大家熟悉的事件模型。

这里顺便有一个我遇到的问题,一个选项卡组件,要求很简单(1)实现基本的选项卡功能,即点击选项卡高亮标签并切换对应选项卡(2)标签的样式和 html 由用户自行输入,不限制是什么,只要高亮标签的 bg-color 就够了。(3)选项卡标签和内容不一定在 dom 上有相邻或者嵌套关系,这点可选,这个需求用 jq 甚至源生应该是手写级别吧,那么大家试试 reactive 的开发需要多少代码呢?

接下来说说混合开发,这个东西,明显看出是专门为了企业开发而设计,当然对于那种创业多久就倒闭或者拿到钱转 native 的就不说了。企业开发,实现就可以了,不要求多炫酷的界面和流畅性,内网对网速不敏感,内部应用没人闲的去看你代码或者找你漏洞,这完美的避开的混合开发的弱点。没办法, js 的特性,无论混淆成什么样都裸的跟不穿底裤一样,这绝对比不上 lua 这种除了传统混淆还可以魔改解析器的脚本语言。那么,现在的微信小应用,除了传统 H5 的问题之外,你的入口、用户,整条命都落在别人手里,你甘心么?也许,这样可以净化一下现在的 app 乱象,留下用户真正需要的功能,也就是大公司、大企业的那些“公益”应用,比如查快递、挂号、查化验单,这些无人竞争,抄了都没用的东西,才是完美试用小应用的东西。

最近出了 rn ,又出了阿里的 weex ,这个跟 cordova (前段时间搞cordova的项目升级,真的跟名字一样,写作cordova读做坑多挖)系的框架不一样, cordova 上层无论什么,底层都有大量的 native 插件够你适配源生功能,用 rn 的还好毕竟上了 react 的船的太多了,有人解决 native 层的问题,然而对于新的 native 框架,你确认自己搞的定么。

前端人喜欢造轮子,前几天找一个 url param 拼接的框架,安装完发其他应用居然也依赖了 2 个 url param ,长的还不一样。仔细一翻,还有大量的 isEmail , isURL 这样的依赖,数一数一个项目刚开始做就 600 多个 node modules (当然包括了 dev 依存),如果放到 java 里,这简直是不可思议,因为 apache utils 一套就提供了不知道多少的功能。既然提到了 apache ,我要说一下 java ,很多人说前端风云大变,后端跟死水一样,那我到想问问,这几年无论 taobao 也好,还是 12306 ,都是前端优化的结果,后端只要放那自生自灭就能解决大并发问题了?

如果是一个 java 项目选型, spring 作为底层一定全票通过,接下来可能是 mybatis 和 hibernate 对决,这个根据项目特点也是几乎唯一的选择,这些定了后面就没什么可争论的了。但是前端选型,我估计 react 、 vue 、 ng 就能打一天。因此, java 这种十年不变的风格,沉淀了不知道多少的精髓,除了虚拟机的调优外,还有大量的跑车,这可不是轮子,包括演化了多少代的 lucene (现在都用 elasticsearch 了),还有一系列 hadoop 、 spark 这些数据挖掘框架,其余的什么工作流、数据总线都不好意思说了。但是现在前端跳出来了,他们要用 js 横扫一切,我想问一下那么多 java 、 php 、 python 、 c++、 erlang 、 golang 工程师会坐以待毙么?

不变应万变是个好事, js 当初草草开场,现在又飞速进化到 ecma2015 ,但是底层运行的还是丑陋的 ecma3 (我不拒绝上帝的要求,上帝给我钱我就做 IE8 兼容),相比之下多少人在用 java1.6 , python2.7 ,我相信,语言、语法糖本身绝对不是首选,因为如果大家真喜欢语法糖,那么你们应该拥护 c#才对,唯一的解释就是搞 js 的人没事自己闲的革自己的命。习惯是个好事,如果稳定,又能满足要求的话,你看的电视多少年都是方形的,自行车多少年都是两个圆轮子的,现在 js 世界是个什么样,有一个很牛逼的自行车,炫酷跑的又快,唯一的问题是,没有握把,握把需要你自己实现。。

刚需和自己乱革命是两回事,什么是真正解决刚需的,一个是 jq ,一个我认为是大规模推开 mvvm 的 ng1 ,可惜这两个都被你们鄙视了,然后 google 草草开出了 ng2 的车,又发现自己在前端内置一个超牛逼的 complier 反倒加重了系统负担,直到前几天正式发布才有了 aot 。然后又是react这种把html混写到js里。另一方面,我们看架构工具,glup和grunt已经是历史,webpack去年兴起今年就有人要革他的命,明年又是什么打包工具呢?grunt没有错,他的设计就是批处理,压缩、混淆、整合都能做到,webpack也是bundle更方便加热调试,那么新的架构工具又有什么feature能让用户放弃之前的东西,重新再造一次海量的轮子呢?

这样的乱象何时能了?不知道。
28774 次点击
所在节点    前端开发
173 条回复
VinKing
2016-10-18 10:07:13 +08:00
可以预见,在未来的 1-2 年内会沉淀出来一批 JS 圈里面基本的技术工具。不过 jQuery 是个好东西,这点我也很赞同哈。简单、好用。
qianddream
2016-10-18 10:08:09 +08:00
@murmur

Fetch 不光是 XHR 改进版这么简单, https://fetch.spec.whatwg.org/#goals 有解释 Fetch 是干啥的,可以与 XHR 对比一下 https://xhr.spec.whatwg.org/ ,到底又没有必要升级?

Fetch 还在 Living Stand ,不过可以用 polyfill https://github.com/github/fetch
Phariel
2016-10-18 10:10:24 +08:00
还好 我厂都是用的自有框架 有同事向老板们安利 React 现在也不了了之了。。。
jinbakei
2016-10-18 10:12:33 +08:00
点赞
murmur
2016-10-18 10:12:35 +08:00
@qianddream 我只想知道,为什么{}变 url params 这种超人性化的设计,居然不被支持,我需要的是一个 ajax 工具,是工具啊~~,我不想直接用草案开发,你可以理解的是我要一个$.fetch
Geeker
2016-10-18 10:13:34 +08:00
所以我在考虑转后端了 2333
murmur
2016-10-18 10:13:43 +08:00
@hei1000 360 不惜以伪造补丁的方式强推 360 浏览器,然而 360 系列浏览器是流氓软件中口碑不错的,你流氓虽然流氓,但是做出的产品毕竟还可以啊
否则中国的 IE6 占有率还是居高不下
Geoion
2016-10-18 10:16:12 +08:00
后端: PHP 是世界上最好的语言。
前端: jQuery 是世界上最好的框架。
dabpop139
2016-10-18 10:17:37 +08:00
@murmur 在我看来现在这些框架都是在推崇一个理念模块化,规范标准提高协助能力,包括 laravle 框架的出现,通俗的讲就是提高基层编程素质,以前前端估计还很多人不能理解 MVC 是什么?只有加入了标准才能更好的发展,我说的发展是整个前端的发展不是说个人的。有了更好的标准才可以促进发展,可以理解 JQ 其实就是不成文的标准。前端的发展模式可以参考中国的发展来理解,中国并没有选择西方的资本主义,但是也发展成为了现代化国家。前端是一样的,都是朝一个方向发展,只是一开始就落后了要选择一条相对不寻常的道路。现在也可以看到 JS 有可能要覆盖到大多数应用方向。
sutra
2016-10-18 10:17:55 +08:00
吐得不错,这也是我最近的感觉。
qianddream
2016-10-18 10:20:18 +08:00
@murmur 这个你直接用 template string 不就好了?
fakefish
2016-10-18 10:21:29 +08:00
说双向绑定好的 可能没遇到 ng1 的性能问题,虽然 c# 这种也是双向绑定,但是不存在性能问题, ng1 在上万个 scope 之后卡的教你做人,而且没办法避免,框架本身的缺陷,也就是为什么后面的框架都不是默认双向绑定了。

那篇文章讲的确实是个问题,太多人总是为了用框架而用框架,而不是因为需要用才用。

比如 grunt 到 gulp 到 webpack ,为什么要用这些,还不是越往后性能越好,轮子真的能提升开发效率才会真正发展下去。

为什么不用 jquery ,如果页面逻辑简单,开发人员不多的情况下, jquery 必然是第一选择,移动端是 zepto ,但是如果是那种页面逻辑复杂,开发人员比较多的情况下, jquery 这种随意操作的方法会带来各种问题,就为什么会出现 backbone , backbone 出现提出了一种可行的方案,但是本身还是有各种问题,后面的 ng1 也是一种尝试。

不是在开倒车,而是为了让车开的更快,边开边修车。
ty89
2016-10-18 10:22:11 +08:00
前端普遍浮躁
murmur
2016-10-18 10:22:50 +08:00
@fakefish vue(avalon)这种用 getter/setter 做双绑的解决方案你认为如何?
whimsySun
2016-10-18 10:26:50 +08:00
我到没有觉得这些框架不好,就是现在 js 开发真他么太烦,要配 babel, 要配 webpack/gulp/grunt, 要配 eslint, 要配 editorconfig, 缺少企业开发标准,各自一套标准,心好累~然后马不停蹄,各种框架狂轰滥炸
dabpop139
2016-10-18 10:28:30 +08:00
@murmur 发展最需要的是靠用户支持,你说的被产品经理虐和前端行业发展没有必然的联系,也可能是预想不到的,或者说是前端的发展不会关心这个极少数问题。
fakefish
2016-10-18 10:28:58 +08:00
js native 这个问题

native 开发最大的问题是不能热修复热更新,不能做 ab ,大家痛苦了这么多年, react native 的出现就是为了让 native 上能够解决这些问题,代价是略微牺牲性能而不是 webview 那种低性能的,而 weex ,大方向肯定是没问题,虽然现在是一堆问题,大公司太需要这两点了。

但是 js native 的最大的开发问题是 前端工程师还需要熟练掌握 native 的开发,做 js native 这种才不会有太大问题。
TimLang
2016-10-18 10:31:33 +08:00
新框架的产生肯定是要把相对底层的东西淘汰的,做做规模不大,需要兼容 ie8 的用 jQuery 还行,真的复杂的话,维护 dom 是很痛苦的一件事。

jQuery 的好处是相对插件较多,但是相对现在支持数据绑定的框架来说已经不那么方便了,比如我做个打字(typing)效果,用 jQuery 操作 dom 实现是很复杂的,但是如果在 vue, react 甚至是微信小程序,几行代码就实现出来了。
fakefish
2016-10-18 10:33:00 +08:00
@murmur 这个至少比 ng1 的脏值检测机制性能好
nino
2016-10-18 10:33:26 +08:00
@murmur 应用小的时候双向绑定是好用的,大起来就头疼了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX