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

这样的乱象何时能了?不知道。
29909 次点击
所在节点    前端开发
173 条回复
2zH
2016-10-18 10:33:44 +08:00
@murmur react 有一堆 promise 封装好的 xhr 库,操作起来也比$.ajax 优雅,不用 fetch 也可以。
murmur
2016-10-18 10:33:44 +08:00
@fakefish js native 还是需要一个牛逼的 native 层,这反倒要求精英的 native 程序员,小公司或者初创就只能找插件多或者成熟的
rn 是一个方向我从没否认,但是 rn 现在很明显火候不够,现在 ios 和 android 差异性 API 还是非常多,并没有像以前的混合上来就抹平差异性
cuebyte
2016-10-18 10:34:24 +08:00
作为一个后端开发人员,我个人非常喜欢 jQuery ,简单好用足够我去开发简单页面,不用去 npm 、 webpack 搞一堆东西。

曾经试着用 vue 、 gulp 、 webpack 等东西,完了不禁在想我很大时间都在去适应这些新东西,但实际上的需求很简单,几行 jQuery 就能搞定。能在 HTML 里多写两行代码搞定的是我为啥要把事情做复杂呢……

当然了,以上都是我作为一个后端在开发简单页面中的想法。
ariesjia
2016-10-18 10:35:27 +08:00
我认为还是要看你做的东西是什么? web page 还是 web application , 如果是 web page 你用 jQuery 完全没有问题 ,如果是 web application 不上 组件化的框架就哭啦
flashback313
2016-10-18 10:36:22 +08:00
楼主写的很认真,所以想参与讨论:

1 、不认同 jq free ,虽然我不是一个深度 jq 用户,但是 jq 里面有很多代码是可以挖出来用的。 jq 设计很好,产品思维也好。

2 、前端框架其实有趋同化,这是一个趋势。例如 dom free ,重数据。

3 、打包工具 grunt gulp webpack 一路过来其实是在解决不同问题。

整个前端目前确实痛苦,但个人觉得这是在走向经典的路。这是 js 这些年积累的一次大爆发。
buckyRRRR
2016-10-18 10:39:26 +08:00
@robertlyc 不管别人说的有没有道理,人家能写这么多也是认真诚意的表现,这是交流的地方,这么喜欢喷人直接去打架好了
robertlyc
2016-10-18 10:40:19 +08:00
一般问出这种问题的 都是工作不超过 3 年 对前端的认识停留在操作 dom 修改一下某个 value 用 css 写写 animation
所以才会对 jq 产生莫名的好感

从来没有从工程角度考虑过前端应用的演变和富交互化带来的复杂性 一个工具的诞生从来不是产品经理来决定 都是源于解决工程中遇到的实际情况 看 lz 这样子是没怎么认真看过 jsx 才会觉得拿它和模板引擎做比较 拿浏览器版本兼容和后端语言版本做比较也是风马牛不相及

多说无益 在论坛从来不要指望去教育别人接受自己的观点 反正 lz 高兴就好
ctsed
2016-10-18 10:44:37 +08:00
和 YY 有啥关系...
buckyRRRR
2016-10-18 10:45:10 +08:00
@robertlyc 有这么高的觉悟还一上来就喷人,嘴上说不要。身体不是很诚实吗
robertlyc
2016-10-18 10:48:09 +08:00
工作不超过三年这是喷人? 手动滑稽
buckyRRRR
2016-10-18 10:52:52 +08:00
@robertlyc 几不几年和别人说的观点正不正确没有关系,不去有理有据反驳别人的观点,直接抛出别人工作不超过三年来暗示别人经验浅,用此种办法降低别人观点的可信度,这不叫喷人叫什么
depress
2016-10-18 10:54:56 +08:00
作为一个 java 后端表示也不是什么项目都用 spring...不过我承认未来可能确实是 js 的天下,虽然现在前端乱成一锅粥,这也就是我不做前端的原因,啃一门语言可以啃透,前端变幻莫测。
qiukong
2016-10-18 10:55:09 +08:00
用户是上帝?扯,
过时的东西就该让它被淘汰,前端联合起来迫使用户升级才是硬道理。
你说一两家网站不兼容用户趾高气昂,所有网站都像抵制 IE6 那样,用户就不得不升级了。
ianva
2016-10-18 10:56:06 +08:00
这是脱离业务场景谈技术

jquery 是个基础库,用于替代 dom 接口,至于其他 utils 都是附带品,选择 jquery 是在于 dom 基本操作能满足当前业务,但业务逻辑稍复杂点的业务 jquery 维护就是坑, dom 操作和逻辑混杂而且开发效率低下,

从基础库来看在于维护性和复用性上论起来,比起 yui3 和 mootools 都差的远。 jquery 在那个时代里之所以能比 yui3 和 mootools 火的原因是在于简单易学 api 明了,比如只是插件而论相比 yui3 的 widget , jquery 插件的设计太过丑陋和简单,各种功能的全面性和复用性更没的比。

如果业务复杂,状态满天飞的时候 react 提升太明显, redux 即是。另外组件化, hoc ,等等各方面让维护性和复用性提升不止一个档次

如果只是简单的增删查改的项目自然 mvvm 的双向绑定更合适,但维护复杂的状态变化而业务周期又长,双向绑定设计不好就是个定时炸弹,这个时候就会知道数据不可变对于维护性有多重要。

另外关于 grunt 和 gulp , webpack , grunt 的本质是配置文件,每个功能都是单独的配置,开始谁想到前端的工程有这么复杂了,当处理的流程越来越多自然就觉得不看重负,我一个还是用的 coffee 写的 gruntfile 都有 500 行以上了,这还不算上插件,每次需要改的时候要回顾整个流程,后来迫不得已重构分任务分文件,其实就类似与 gulp 了,所以 gulp 是自然而然的。

任何 dsl 配置复杂到一定程度会变成一门编程语言,或者是脚本语言介入,这是太自然的事情了,就好比 css 之余 sass , stylus ,当然一个业务没这么复杂的时候 grunt 的配置文件比掺和逻辑的文件更容易维护。

webpack 其实主要解决的是打包问题相比的也应该是 requirejs 和 seajs 这类东西,至于有工作流的功能是因为有些地方更自然, grunt 和 gulp 并不方便,但主要功能依然是打包,对比 requriejs webpack 带来了太多有用的东西,有什么抱怨的

至于 IE8 这个占有率已经 14%了很多大公司都无视了,移动端的重要性也越来越高了。

毕竟前端这个环境碍于浏览器,各种功能都是社区慢慢搭建起来的自然是问题多多,但这些都是说明前端的技术在不断的演进,在解决各种问题。
leonlu
2016-10-18 10:56:08 +08:00
**前端轮子多,是有原因的!**

相比于 java ,浏览器端的生存环境就是荒漠。别说 JAVA utils ,就是 console.log 在 ie6 上也不支持啊!但就是因为这是一片鸟不拉屎的荒漠,才会有这么多的轮子。**轮子有好有差,选哪一个这是体现你能力的地方**。如果总是期待有 spring 一样的东西出来一统江湖,说明在一定程度上你已经开始懒得思考了。

其实还是一个从实际情况出发,不断进化的过程。如果楼主觉得 jQuery 可以 100% 完美解决自己手上的问题又很容易维护,那还有什么好讲,就 jQuery 就好了。不要被跟风,要坚持自己。搞了一堆跟风的东西又不能更好的解决问题,那都是无用功。至于为什么会出现 react / vue / ng1 / ng2 / polymer ,那也肯定是因为其他的场景有需要、用来解决某些个问题。可能你也有遇到这些问题时,才会明白『哦, react 这么干真漂亮!』或者 『 Vue 可以这么写太爽了!』。

jQuery 从技术角度来讲完美么?哦,不。实际上问题一大堆。我就不一一列举了。 jQuery 有一天一定会死, react / ng / vue 也一样会死。只不过会死在更好的浏览器 / 框架 / 库的手下。而我们正是这一趋势的推进者。

PS :那个 jsx 啊,看着是 html ,实际上还是 js 。。。而且 if 逻辑难道不是{this.props.enable ? <div>haha</div> : null},立即执行函数是个什么鬼。。。从对待 JSX 的态度上,可以看到楼主对于旧有观念的执念太深了。。。
otakustay
2016-10-18 10:56:29 +08:00
当前的前端分为 page 和 app ,这完全就是 2 个领域了,你把它们混在一起然后说混乱那是必然的,以后也应该有 webpage developer 和 webapp developer 这样的垂直岗位才好
qiukong
2016-10-18 10:57:18 +08:00
真像你说的那样也有,我们公司内网报表系统还停留在 IE6+ACTIVX 阶段。
要完完全全往兼容上靠,那干脆老系统都不要升级, HTML3.2 足够了。
robertlyc
2016-10-18 10:59:18 +08:00
很正常啊 因为工作的都是零散的页面 聚焦不在工程化的前端项目上 看不到 web components 带来的变革 前端的变化又不是突然就行成的
jq 之后的 backbone 就在着手工程化解决 js 结构 require.js 带来的各种 loader 着手解决加载机制 前端的变革加速于 node 社区的成熟
作为前端 如果只顾看着自己用 jq 写的快 写的方便 不去整体看社区的变化和工程上的努力 这才是开倒车
andypinet
2016-10-18 11:02:22 +08:00
太在意这些了 不好
俗话说的好 分久必合 前端也会表面上统一
合久必分 java 系已经开始被其他 jvm 语言干了
onion83
2016-10-18 11:02:30 +08:00
1 、楼主老司机
2 、前端水太深,一直敬畏,不明觉厉
3 、后端的人都往 Devops 、大数据方向走,数据存储方面这几年变化也不少,但是基本有迹可循,相对而已没有人愿意拿数据开玩笑和冒险。

路其实还是那条路,就是跑在上面的车不一样了,开桑塔纳还是还特斯拉,还得看人的追求。跑得快的不一定好,跑得慢的也未必差。

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

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

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

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

© 2021 V2EX