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能让用户放弃之前的东西,重新再造一次海量的轮子呢?

这样的乱象何时能了?不知道。
29931 次点击
所在节点    前端开发
173 条回复
yoa1q7y
2016-10-18 12:15:13 +08:00
我只能说,你爱用啥就用啥
你觉得 JQuery+模板好那就选这个
你觉得 React 好就选 React
谁也没有逼你
wtser
2016-10-18 12:15:26 +08:00
这不叫混乱,这叫繁荣好嘛。虽然可能 90%的东西在你看来都是垃圾,至少还有 10%的确是好东西。
murmur
2016-10-18 12:19:48 +08:00
@ariesjia 我也在苦思这个问题, SAP 到底用在什么地方,我至今用过的 2 个,一个 teambition ,一个是阿里云后台,然而这两个东西都是面向开发者,可以强迫用户使用 IE10+或者 chrome 解决 scope 大带来的性能问题,而企业开发因为 IE 的兼容性要求更高反倒不能随便上 react 、 ng2 这些(好羡慕只做 chrome 兼容的公司)
手机上,我还是坚信一点,能让你装了就不敢(不是不想哦)卸载的,都是 native 重应用,微信、 qq 、支付宝,这些,其余的,应该慢慢被其他应用( ROM )整合,最典型的就是美颜相机,其余的比如天气、便签,甚至未来可能是音乐视频这些,我概括为根本不需要安装或者安装了只为情怀的 app ,差异性是不可能的,以前追求差异性的优酷土豆,以及很多类似的公司都最终合并了,这是个资本的年代,也是寡头的游戏。
@robertlyc 我们一路从 backbone , ng1 走来,到现在挣扎于 vue2 、 react 、 ng2 ,被你一说好像成了彩笔一样,我很伤心啊,另外你不看我写的东西就来回复么?我只是说 jq 的设计思路很优秀,从来没说过他现在还应该被广泛使用或者现在依然牛逼之类的东西。企业开发的人是互联网的看不起(但是我们真的不加班啊,我入职快 3 年一天班,准确点说总加班时间不超过 5 个小时,然后我不想回答为什么不去互联网的问题),就跟用 ios 的看不惯用 windows 的一样,我都习惯了。

@ctsed 360 流氓也只停留在诱导安装 360 浏览器这一步, YY 是静默安装,而且总静默,动不动就想给你装点什么,而且他这个产品(浏览器)设计的也不值得我留下

@buckyRRRR 兄弟感谢你为我说话,超感动

@qiukong 我升级了 chrome 用了 edge ,换了最新的小米手机(穷用不起 iphone 另外我要 u 盘功能),结果“你们”回报给用户的是越来越差的产品体验(哦我说的就是 x 浪微博、 x 鱼),又是开发者,又是用户所以我才有这样的观点。

@ianva ie8 的国内占有率是多少,在企业中占比又是多少

@otakustay 移动端本身更乱,比前端还乱,可以说是为了 app 而 app ,以前可以 web 的功能现在强制 app (最重要的是用户装了 app 并没有更好的体验啊), pc 端很好的设计阉割了必须用 app (对就是那些视频网站),这也没办法,本来就是烧钱,谁只专注于提供功能谁就得死,你没广告没推广的话,真正笑到最后的,还是微信支付宝这些几年前就在笑的 app

@robertlyc ng2 我认为是更彻底的 web component 设计,虽然存在问题但是从设计理念来说绝对 1 流,可惜 ng2 也被鄙视

@andypinet java 系最大的风险不是 java 本身,是因为 oracle 跟 google 干仗让人看到了不明朗的未来,这跟前端乱象不是一个原因

@leonlu 第一个感谢给你了,我一直以为 jsx 必须放到 return 里才能被解析

@reus 不要着急下结论,自己写一下就知道, jq 的我早就写过了, react 的我也写过,我就算傻还不会 google ?! react-tabs 的代码我看过了,通过设置 selectedIndex 放到 status 激活 tab 也非常好懂,但是不优美的地方就出在他核心那段 cloneElement 里,源生都能做到的东西 react 当然能做到

@caiya21 最近流行用 2016xx 做标题,不要介意

@airyland 都选了开源框架肯定选轮子多的,如果背后没一群人替你填坑,敢用么,我不敢

@zongwan native 掌握两门还是不容易啊,羡慕同时学 2 门 native 的大神

@dmyang 一个 react bundle 没做什么东西 minify 完了就 800 多 k ,嗯这真的不冗余,前端(尤其移动端)根本承受不起代码膨胀所带来的一系列问题。到时候会有 2019 年开发前端是什么体验的。

另外回复一下那位用中国路线比喻的,同志,你这问题不小啊,中国是特色社会主义,但是中国什么时候允许多党制了(开玩笑)。
最后, v2 的回帖 cd 是重复计算的么?!这么 xx 的设计,我要精确计算 1800 秒,少一秒回复不仅失败还要重新来 1800 秒的 cd ,日了。
我表明一下我的观点,我不排斥新技术,我接受新技术,但是我也是人,人习惯于以前接受的东西,移动电话在飞速变革,但是你以前打电话是按键拨号,后来手机是按键拨号,触屏也是点击数字拨号,没有人说让你做个 pose 输入电话号码吧?当你用到的框架动不动大动干戈居然连一点抱怨(为啥后端尤其是 java 稳的 1b 呢)都没有还在给变化辩解,愣是把不合理的设计想为 feature ,我看不太科学吧。
ooTwToo
2016-10-18 12:29:11 +08:00
A : 什么年代了还在学 jQuery ? 用 Vue 、 React 吧!
B :为什么?
A :不知道,感觉很牛逼。。
yyy
2016-10-18 12:37:21 +08:00
楼主脱离许多实际业务场景各种狂喷,感觉是在耍流氓啊。
标题所说的混乱,也只是因为在前端这层场景太多,所以才有各种层出不穷的各类技术。同时技术选型的时候,会比较考验眼力。

至于说开倒车,嘛。。。楼主开心就好。
murmur
2016-10-18 12:40:45 +08:00
@yyy 哦, java 也有各种实际业务场景,那怎么没人说 java 乱呢,人家可是站在 android 的 native 层,桌面端也有很多跨平台 app 在用
Ahri
2016-10-18 12:47:28 +08:00
有一点深表认同就是用 Redux 的项目门槛高,只要有一个猪队友就能给你弄的乱七八糟。
lijsh
2016-10-18 12:49:51 +08:00
在全世界前端社区都已成为潮流的东西,规范都出了,网上有的是最佳实践,在国内就因为 IE8 的苟延殘喘,被喷成开倒车。

为免说我纯喷回复无意义,就说一个单向数据流, Vue 默认不支持双向绑定,需要显式指定; ng2 同样如此。大型应用的状态管理是个复杂的问题,如果你做的是大型应、团队作业,还打算用双向绑定,那只能祝你好运了。
coffce404
2016-10-18 12:51:36 +08:00
框架是需求推动的,如果 JQ 极其完美没有痛点,就不会出现 Angular 和 React 了,出现了也没人用。事物的发展是呈螺旋上升的, JSX 和过去的模板都能叫做 Template ,但已经不是一个高度的事情。
ibufu
2016-10-18 12:51:53 +08:00
jq 就一个工具库而已,和 node 的 underscore 差不多,磨平浏览器 api 差异的。
jq 的 api 优雅好用,这是事实,但不能和框架什么的比。
murmur
2016-10-18 12:52:02 +08:00
@lijsh “不支持”和“默认不开启”是 2 个概念
arzusyume
2016-10-18 12:53:01 +08:00
用着用那的无非两个原因, 提高效率及质量
各种工具和框架的变革本质上也离不开这两点

选择当然也是一样啦, 单纯的更风是没有意义的
coolzjy
2016-10-18 13:00:40 +08:00
> 用$代替所有选择器是太牛逼的设计

看到这句就不想再往下看了,对 jQuery 的理解仅限于 Sizzle 估计也不会有什么有价值的见解。可以很明确的回答你的问题:如果业务场景需要, jQuery 的选择器即使改成 `jQuerySuperSelector` 我仍然会去用。

一个行业是在进步还是退步并不是这个行业内部决定的,而是外部因素决定了,只要外部对前端的需求在不断提高,前端总是不断进步发展的。你可以吐槽某些技术的跑偏,但无法否定整个行业的进步。(我自己不支持也不看好混合开发)

如果你确实产生了行业在退步的感觉,真正退步的其实也是你自身而已。用对的方法做对的事,这就足够了。
lijingyu68
2016-10-18 13:02:34 +08:00
人类不都喜欢挖坑再填坑吗?如果你觉得这是开历史倒车的话,人类从农耕开始就在开倒车了。

人的每一个发明都会带来更多待解决的问题,前端也一样。
jin5354
2016-10-18 13:08:33 +08:00
首先你得明白你手头有什么需求,这个工具是解决什么需求的,然后再去用。

fetch 是下一代 XHR ,是规范的一部分,它的出现是用来替代 XHR 的,不是用来替代 $.ajax 的。 fecth 的语法原始又简陋,啥语法糖都没,就像没人手写 XHR 一样,肯定不是用来手写的。从标准角度来看,提供 plain 的语法其实是优秀的设计。你只需要继使用 axios 这种语法糖多又实用的库就好。 axios 这种第三方库会逐步把自己内部的 XHR 实现换成 fetch 实现。

同理,存在海量表单、数据展示的页面,适合选用带有数据绑定的框架。存在大量跨页数据传递、状态传递的站点适合使用状态管理工具,用 webpack 打包成 spa 。复杂度越高的页面,越适合用这些工具。

现在很多人写文章吹框架,大家就盲目的跟着上,不管自己做的项目是大是小,一窝蜂的去装全家桶。业务代码量加起来连 3000 行都不到,就急着配一大堆新东西,然后再喷说咋这么难用。其实这东西根本就不是给你用的。
bobsam
2016-10-18 13:12:03 +08:00
我个人觉得 如果前端只剩下 jq+模版,我也许很快就转行了。但是正正是因为前端有 react , vue , ng1 , ng2 等等这些框架和库的出现,让我感觉到了前端的繁荣,还有发展的无限可能性,所以我一直坚持下来了。我想很多人也是这样的吧。 jq 好是好,但是一直固守于它也不是好事,既然有更好的方案解决,何不去尝试一下呢?
Felldeadbird
2016-10-18 13:14:11 +08:00
现在不流行写 JQ 了吗?我公司的产品都是用 JQ 的。
前端配置工程师。
leer561
2016-10-18 13:14:52 +08:00
的却 -> 的确
indooorsman
2016-10-18 13:16:24 +08:00
呵呵
ssehacker
2016-10-18 13:22:26 +08:00
至少可以得出两个结论:
1. 楼主前端经验 3 年以下
2. 楼主接触的项目大都比较小

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

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

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

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

© 2021 V2EX