用了5年的笔记工具mybase这周突然用着用着崩溃了,导致一份2G的笔记挂彩打不开,差点欲哭无泪,幸好最后都全部修复了。也因为这样重新整理一遍笔记,发现3年前写的一篇笔记,那时H5还不像现在这么火,Flex也还苟延残喘着,当时公司有个3D大屏项目,需要我内部培训几个小伙伴来扛这活。想想有点过意不去,我也不想他们把时间耗在学习一门将死的技术上(我当时确实认定flex将死,现在应验了),所以在部门wiki上写了一篇文章,题目叫《flex开发初识上篇》,目的是让他们辩证的看这个技术,既然公司需要,那么可以站得高一点去学一门技术,不是学它的语法和技巧,而是去认识它,了解它的来龙去脉和原理。
我的flex开发经验杂谈:flex开发初识上篇
我从事flex相关开发已经4年有余,至今我仍认为自己不是一名专业从事flex开发的从业人员,flex开发对我来说更多只是其中一项开发技能,所以谈不上指导或分享flex开发之道,只是简单谈谈和分享一下我个人在flex学习和开发上的点滴体会和经历,思路零散,文笔粗俗,不喜勿喷!
flex是什么?这个问题度娘能很好回答你。要是你问我度娘是谁?那么恭喜你奥特曼了。不过对flex一无所知的人在得到度娘的回答之后可能仍是会有一个非常大的误区和疑惑存在。那就是flex和flash的关系,他们的区别同样可以问度娘,请原谅我的偷懒,不过我在此说一个"非常非常"深刻的体会!那就是大多数所谓的官方说明,官方解释,甚至产品白皮书,你不能全信!(还有某台的新闻,你懂的)要有自己的思考和探索!我可是经常很汗颜的看自己参与过的项目或产品的介绍或白皮书,心里都会直嘀咕"卧噻!这真的是在说这个产品吗?"。其中我说个关于flex的官方说明中的其中一个优点举例"flex提供了很多组件,可以直接应用,也有很多免费的框架,大大提高了开发效率。"以我个人的开发经验(虽然不多)来说,真实情况却是:"flex组件虽多",但你拿他来学习和做个过家家的程序可以,拿来直接做企业级开发嘛,没戏(不是不能,是不值和不便)!"有很多免费的框架",没有喔,完全没有,当然我说的是能在企业级开发中使用的,别说免费的,收费的也没多少。"大大提高了开发效率",如果你的企业级应用,前端完全采用flex呈现,那么我可以很负责任的告诉你,开发效率只有降低的份,要想提高,自主研发一套框架吧,而且会有一大堆已经存在非常成熟解决方案的问题需要你重新面对。那么是不是就不适合用flex做企业级开发呢?答案肯定是否的,企业级的应用还是存在的,至少我就做了1年半纯flex前端的企业级开发,那是给美的做的CRM管理系统和上海樱花卫厨做的IMS系统,都是纯flex前端开发。也就是说有利有弊的,虽然个人认为目前是弊大于利(主要是指选择上,与选择传统技术相比,因为其他技术太成熟、资料繁多、且免费居多)。但若是有能力有成本去面对这些弊而又非常喜欢这些利,那完全可以选择flex,你看页游不是红红火火的吗,页游可是大多都有使用flex进行开发,不过严格来说应该是使用AS进行开发。(flex和as有什么不同?问度娘吧,让我一句话比喻就类似html和js的关系,但又不完全像,还是去问专业的度娘吧!)而且页游算不算企业级开发呢,见仁见智吧。
学习flex有没有前途?不少人都问过我这个问题,我自己刚接触时也不能说没想过这个问题,但这个问题对我来说,说句心里话,真没那么重要。因为我一直以研发自居,我喜欢的是研发,所以没想太多。在我刚工作时,因为公司需要,当时公司没人会这门技术,有幸我们一群毕业生被拿来做白老鼠,这真是一件非常幸运的事,因为后来在公司主推这个开发平台框架(SDP,自主研发的框架)的时候,所有毕业生后面都成了主力开发人员,虽然现在这个平台已经夭折了(据旧同事透漏)。那么回到这个问题,让我回答的话就是如果项目没有需要,您没有必要专门去学习这门技术,如果项目有需要的话,不管这门技术有没有前途,假如你学透的是面向对象编程、封装、组件开发、框架开发,那么对您其他技能只有好处没有坏处。像要我开发js组件或jsp自定义标签那是完全没有问题的。这个答案是不是有点避重就轻呢?那我还是稍微正面一丁点回答这个问题吧,总体来说flex的应用范围和使用率在未来都不会有太大变化甚至是呈减少下降的趋势,其竞争技术则呈慢慢提升的趋势,如html5、WebGL、Node.js等技术(虽然Node.js算不上前端技术,但它确实有可能让前端开发产生一些变革,在最近的3D开发研究中就看过node.js与WebGL结合的框架),是否会被淘汰呢?难说,当年诺基亚手机漫天飞的时候谁也没想到他会有今天这样的窘境。但至少未来几年还不至于被淘汰,它在某些应用方面暂时还是首选的,所以您真要到了精通的程度,不可能没有用武之地,能精通Flex那么学习html5也是手到擒来,学习其他技术也一样。但是还是不能忽略国内行情,在中国软件开发行业,能长期专研基础开发的人员并不多,除非你是非常牛的人,真到你花了N年精通了一门技术了,你已经不需要或现实已经不允许你再去花大量的时间去专门纯研究另一门技术了。这也是大多数技术人员的悲哀,当然包括我在内。在"技术->能力->效益->价值"这条链条上,我和大多数技术人员一样,还是徘徊在前两者之间。
flex开发的利于弊。flex在企业级应用中并不是很广泛,对此我谈谈个人的一些看法。作为使用了flex技术4年有余的开发人员,我认为我对flex开发中最大的问题便是,缺乏企业级开发的框架,而这个问题我觉得不是问题的根本,为什么呢?因为我觉得这个说是原因,其实更是结果,因为有更深层的原因所以产生了这个结果,而对开发人员来说这个尤其是对希望快速低成本构建自己的企业级应用的团队或公司来说,这个是很严重的问题,我所在的第一家公司就花了半年多去研发自己公司的flex开发框架(不过它的定位并不是纯flex的开发框架,事实上这是一个与普元开发平台耦合的一个快速开发应用前端的框架),我认为这个框架最终是失败的,因为在后续的持续两年多里该框架面临了总总挑战和不断修补。能坚持几年有余还支撑了5~6个项目上线,已经值得我们那群初生牛犊自豪了,当然少不了当时有一位资深技术总监在,我们当时即不是称他做"老大"也不是"老总",都叫"傅老师",因为当时我们实际还没毕业,也因此这个称呼后来就在公司出名了,谁见到他都叫"傅老师"。扯远了,flex开发有什么利呢,那就是"炫",这个没什么好说的,我要说的利正是前面说的弊之所在。也就是没有企业级开发框架,虽然没有,但是可以创造,他的利就是你可也很方便的扩展SDK,只要有条件,可以做出非常棒的框架,可以不断扩展和完善框架,用js做组件和框架,像jquery组件,做容易,但是要想改,要想优化,想不断升级,想继承,那是异常痛苦的,而flex则不仅显得简单,关键是"舒服",如果你很习惯面向对象编程的话。另外一个好处就是它不存在浏览器兼容性问题,兼容性有时是让人头痛不已的事情。不过对这个优点我一直有自己的看法,说白了flash不是运行在浏览器上,它是运行在flashplayer插件上(更深一层是运行在AVM2上),跟java程序运行在JVM上一样,也就是任何一门新技术都可以做到跨平台,只要你有能力让浏览器默认都安装了你的某种类似叉叉VM的东西或者轻易的能装上。虽然目前绝大多说电脑装机就有,但是以前浏览器要装flashplayer插件也是要自己下载的。
以上扯了不少,虽然说我曾参与过的flex框架最终并没有存活下来,但对于flex框架的开发我还是获益不少的,下次有机会再谈一下我个人对flex框架开发的一点设想。此文仅做分享用途,仅是个人见解!不喜勿喷!欢迎指教!