注册 登录
阳新论坛 返回首页

heyishun8.com https://bbs.435200.com/?130873 [收藏] [复制] [RSS] 必需品省钱秘笈

日志

【围笑】前端技术分析

已有 483 次阅读2018-2-4 08:41 |个人分类:日记

angular,react,vue 出现了三国鼎立的状态。各个框架开始瓜分前端技术上的仅有的份额。因为国内vpn被墙,但技术又有它的开放性,出来一个新框架,有了相对完善的中文文档就备受热捧。最近三个框架撕逼比较厉害。技术圈的门阀之争,存在已久。不同的 OS 可以撕,不同的编辑器可以撕,不同的语言可以撕,到今天不同的框架也可以撕。

angular  相对来说比较强势,技术涵盖全面,适合大型企业级应用和开发。但是比较刻板,就是说,不按照它给出的方法不行,没有一个渐进式的学习梯度。接触angular 需要很强的JavaScript技术积累,angular1.0升级成2.0就会放弃1.0 ? 为什么,太过于前卫。angular早已支持ES6标准,让还在处在ES5标准的浏览器和解析器情何以堪?学习angular你还要学习TypeScript,让开发前端如同写java程序一般。没错就是这么专业,没错你按照我提供的方法来,准没错,还对angular存在什么问题吗?angular就是这么全面。大漠穷秋作为angular中文社区掌门人,因为黑Vue 被请辞。文章确实写得过分,可以去知乎搜索相关文章。

React 并不强势,但是限制却很多。刚开始学习你会四处碰壁,没法让初学者体会到前端技术的快感。在团队中,对于前端技术充满兴趣的新人,这会备受打击。难道我真的不行?JSX又是沈馍?为什么独立组件里面的html模板在放在jsx的组件里用单引号?不利于新人的技术过渡和培养。一个团队里,总有几个做设计很牛B,对页面交互感兴趣得不得了,难道不拉他们入坑?


Angular,一站式提高生产力 与 Backbone 同一时代诞生的 Angular 便是一个大而全的 MVC 框架。在这个框架里,它提供了我们所需要的各种功能,如模块管理、双向绑定等等。它涵 盖了开发中的各个层面,并且层与层之间都经过了精心调适。 我们所需要做的便是遵循其设计思想,来一步步完善我们的应用。Angular.js 的创建理念是:即声明式编程应该用于构建用户界面以及编写软件构建,而命 令式编程非常适合来表示业务逻辑。 我开始使用 Angular.js 的原因是,我使用 Ionic 来创建混合应用。出于对制作移动应用的好奇,我创建了一个又一个的移动应用,也在这时学会了 Angular.js。对于我而言,选择合适的技术栈,远远比选择流行的技术栈要重要得多,这也是我喜欢使用 Ionic 的原因。当我们在制作一个应用,它对性能要 求不是很高的时候,那么我们应该选择开发速度更快的技术栈。 对于复杂的前端应用来说,基于 Angular.js 应用的运行效率,仍然有大量地改进空间。在应用运行的过程中,需要不断地操作 DOM,会造成明显的卡顿。 对于 WebView 性能较差或早期的移动设备来说,这就是一个致命伤。 幸运的是在 2016 年底,Angular 团队推出了 Angular 2,它使用 Zone.js 实现变化的自动检测、 而迟来的 Angular 2 则受奥斯本效应[osborne]的影响,逼得相当多的开发者们开始转向其它的框架。

 [osborne]: 颇受欢迎的个人电脑厂商奥斯本,其公司的创新式便携电脑还没有上市,就宣布他们要推出的更高档的机器,而又迟迟无法交货,消费者闻风纷 纷停止下单订购现有机种,最后导致奥斯本因收入枯竭而宣布破产。

React,组件化提高复用 从 Backbone 和 Angular.js 的性能问题上来看,我们会发现 DOM 是单页面应用急需改善的问题——主要是DOM 的操作非常慢。而在单页面应用中,我们 又需要处理大量的 DOM,性能就更是问题了。于是,采用 Virtual DOM 的 React 的诞生,让那些饱受性能苦恼的开发者欢迎。 传统的 DOM 操作是直接在 DOM 上操作的,当需要修改一系列元素中的值时,就会直接对 DOM 进行操作。而采用 Virtual DOM 则会对需要修改的 DOM 进行比较(DIFF),从而只选择需要修改的部分。也因此对于不需要大量修改 DOM 的应用来说,采用 Virtual DOM 并不会有优势。开发者就可以创建出可 交互的 UI。 除了编写应用时,不需要对 DOM 进行直接操作,提高了应用的性能。React 还有一个重要思想是组件化,即 UI 中的每个组件都是独立封装的。与此同时, 由于这些组件独立于 HTML,使它们不仅仅可以运行在浏览器里,还能作为原生应用的组件来运行。 同时,在 React 中还引入了 JSX 模板,即在 JS 中编写模板,还需要使用 ES 6。令人遗憾的是 React 只是一个 View 层,它是为了优化 DOM 的操作而诞 生的。为了完成一个完整的应用,我们还需要路由库、执行单向流库、web API 调用库、测试库、依赖管理库等等,这简直是一场噩梦。因此为了完整搭建出一个完整的 React 项目,我们还需要做大量的额外工作。 大量的人选择 React 还有一个原因是:React Native、React VR 等等,可以让 React 运行在不同的平台之上。我们还能通过 React 轻松编写出原生应用, 还有 VR 应用。 在看到 Angular 2 升级以及 React 复杂性的时候,我相信有相当多的开发者转而选择 Vue.js。

Vue.js,简单也是提高效率 引自官网的介绍,Vue.js 是一套构建用户界面的渐进式框架,专注于MVVM 模型的 ViewModel 层。Vue.js 不仅简单、容易上手、配置设施齐全,同时拥有 中文文档。 对于使用 Vue.js 的开发者来说,我们仍然可以使用 熟悉的 HTML 和 CSS 来编写代码。并且,Vue.js 也使用了 Virtual DOM、Reactive 及组件化的思想, 可以让我们集中精力于编写应用,而不是应用的性能。 对于没有 Angular 和 React 经验的团队,并且规模不大的前端项目来说,Vue.js 是一个非常好的选择。 虽然 Vue.js 的生态与 React 相比虽然差上一截,但是配套设施还是相当齐全的,如 Vuex 、 VueRouter。只是,这些组件配套都由官方来提供、维护,甚 至连 awesome‑vue 也都是官方项目,总觉得有些奇怪。 除此,Vue.js 中定义了相当多的规矩,这种风格似乎由 jQuery 时代遗留下来的。照着这些规矩来写代码,让人觉得有些不自在。 和 React 相似的是,Vue.js 也有相应的 Native 方案 Weex,仍然值得我们期待。

【以下总结分析】
  • 从表单时代过来的团队,建议你们使用Angular 1.4并且花点时间熟悉一下Node.js相关的工具。
  • 熟悉原生JS的团队应该开始学习ES6或者Typescript,因为早晚所有的浏览器,包括移动端的设备都会支持ES6和Typescript。
  • 熟悉ES6或者Typescript的团队可以选择任何一个你们喜欢的框架,你们需要花更多的时间去考虑使用什么UI库。
  • 使用React-Flux可以继续用下去,或者换成React-Redux试试,这可能会减少一些代码复用,不过我不认为这是个大问题。
  • 对于React的新手来讲,我建议你使用React-Redux,因为它有更好的社区支持。
  • 个人观点,别在Angular 2上浪费时间,因为Angular团队希望大家尽快地使用Angular 4,而且他们正在计划在Angular 4中修复Angular 2的问题。
  • Angular 4及其生态仍在积极的往好的方向发展,不过如果你想在实际开发中使用它们,还是需要多加小心一些。
  • Vue 2非常赞,你可以在下个项目中使用它。

  • 1. 提升自身,加强自信。就好像长得好看的人穿什么都好看,技术扎实的人用什么工具都可以做出好产品。把自己跟工具捆绑,侧面反映的是你对特定工具的依赖。当你自身的水平到了一定高度以后,工具就只是工具,而不是决定自己价值的信仰。

    2. 谈技术的时候先谈场景。你使用一项技术是为了解决什么问题?不同的产品形态、团队构成、历史包袱都会极大地影响技术的适用性。不谈场景谈选型都是耍流氓。在谈技术的时候永远先考虑场景,避免为了使用一项技术而使用一项技术。

    3. 区分偏好和客观事实。不同的开发者有不同的背景、习惯和思维模式,对于同一个技术的感受也会有不同。试图向一个觉得青菜好吃的人证明青菜并不好吃是毫无意义的事情,反过来也是一样。值得讨论的是关于青菜的客观事实,比如营养好不好。当然,还要避免对自己根本没吃过的东西乱下结论。

    另一方面,有一类具有主动攻击性的『优越感』程序员 —— 由于觉得自己选择的技术『品味』更好,所以会去嘲讽其他技术,甚至嘲讽使用其他技术的人。这类人,跟以恶心别人为乐的喷子没有本质区别,无视是最好的选择,要学会使用预防性拉黑。


    我们需要更多有理有据的『争论』,少些情绪化的『撕逼』。当然,心态相关的东西,总是说起来容易做起来难。我自己也常有做得不好的时候,与大家共勉。


    鸡蛋

    鲜花

    握手

    雷人

    路过

    评论 (0 个评论)

    facelist doodle 涂鸦板

    您需要登录后才可以评论 登录 | 注册

    QQ|Archiver|手机版|小黑屋|删帖指引|阳新新阳网 ( 鄂ICP备19013424号-2 )

    GMT+8, 2024-5-2 01:37 , Processed in 0.562162 second(s), 19 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.