一点随想,回:为什么Webapp现在很多都用某种js的框架来开发了? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
suriv520
V2EX    程序员

一点随想,回:为什么Webapp现在很多都用某种js的框架来开发了?

  •  
  •   suriv520 2014-01-24 17:50:56 +08:00 3888 次点击
    这是一个创建于 4359 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是一点感想。我把它从回复里提出来了post了一篇新主体。希望更多人能探讨。

    原post:
    好奇为什么web app现在很多都用某种js的框架来开发了?
    http://v2ex.com/t/98188

    无论是从耦合、性能、扩展、模型等方面来讲,都应该建立起一个明确且界限清晰的『层次』,看到的用JS框架开发webapp只是表象,从更深层次来讲,它实际上是一种数据与逻辑分离的设计理念。

    - 10年前,浏览器功能很弱,JS支持有限。因此后端的作用是取出数据、设计逻辑、合成成完整的『HTML』(视图)然后返回给前端。当项目的规模增大到一定程度后,这种模式的弊端就凸显出来了:视图既可以在前端通过JS处理,也可以在后端(如PHP)处理,越来越难以维护;后端数据模型和前端视图死死地捆绑在MVC框架中,过于耦合;后端不仅要处理数据层的CURD持久化等,而且还要花相当的资源处理page partials,进行模板解析。

    - 随着浏览器的功能越来越完善,软件工程与架构理念也越来越倾向于前端处理,前端的MVC设计也随之被完善并证实好用。这种设计模式通常如下:

    1. 对于数据运算简单的应用,后端仅仅作为一个数据持久化层,对数据进行CURD操作。对于计算复杂的应用(如分析等),后端则同时承担起这一层分析功能,仅仅暴露出输入、输出接口。除此之外,后端不进行一切模板、视图处理。具体来讲,就是RESTful的设计。

    2. 前端(浏览器端)程序需要完整的MVC:
    M作为一个服务层,主要用于与后端服务交互。这一层,需要一个适配器来把后端的数据抽象成模型。需要一个输出输入的接口,代理后端请求。
    V是标准的HTML组成的页面、样式等等。这一层尽量没有任何与用户交互有关的JS代码。
    C用来连接M与V,各种JS代码各种交互控制数据绑定等等。

    好处就是,

    后端接口抽象出来了,前端可以自成体系开发UI,而不需要折腾各种奇怪的Jade、PHP template Engeen之类的东西;
    后端可以作为API独立提供服务,甚至足够开放,让前端UI形成丰富的生态系统;
    后端不再处理页面上的事情,把页面拼凑生成模板等任务移交给用户端,减小开销提高性能;
    前后端通过前端的Model层耦合,复用性高,替代性好;
    TDD模式的开发变得更为简单彻底;
    在迭代或重构时,只需要确保前后端Restful API的一致性。

    Angular.js在这方面走到了前面,这种思路运用得非常彻底。不妨一看。

    但至于Ruby/Rails很多教程涉及到的那一块的backbone.js, jqeury, d3d等相互嵌套使用,个人不敢恭维。

    如有兴趣,当你更深入的开始研究Node.js等的时候,你会发现,前后端的界限其实越来越模糊了,模糊到你根本不知道当前正在写的代码会在服务器运行还是在客户端运行但其实这并不重要,重要的是,它们正在全力支撑着你的项目。

    说的有点多。一点感触。
    7 条回复    1970-01-01 08:00:00 +08:00
    suriv520
        1
    suriv520  
    OP
       2014-01-24 17:54:58 +08:00
    我还在研究Post为什么不会被显示在流上……
    chemzqm
        2
    chemzqm  
       2014-01-24 23:31:47 +08:00
    Friendly advise, do not use Angular unless you don't maintain your code,it only suitable for creating apps with only CRUD.
    suriv520
        3
    suriv520  
    OP
       2014-01-24 23:39:01 +08:00
    @chemzqm Thanks for the advise, and can you be more specific on your point? especially since I'm currently using angularjs in many projects.
    mengzhuo
        4
    mengzhuo  
       2014-01-25 22:49:14 +08:00
    >>> 1. 对于数据运算简单的应用,后端仅仅作为一个数据持久化层,对数据进行CURD操作

    奇葩的各种校验权限,各种安全、防渗透,数据统计、修复问题是前端能解决的?
    前端把后端想得简单了吧?

    两端都在做的苦逼人深深地了解一个真理Nothing is simple.
    suriv520
        5
    suriv520  
    OP
       2014-01-25 23:39:14 +08:00
    @mengzhuo 我不清楚你是在尝试理解我的意思还是在咬文嚼字,但我敢肯定你还没有从上一个项目的阴影中走出来。
    另,做Python+PHP+Ruby+Nodejs+Golang+Javascript/coffeescript+HTML5+LESS的人我也不知道应该定位成前端还是后端。
    mengzhuo
        6
    mengzhuo  
       2014-01-26 00:30:15 +08:00
    @suriv520 既然是有些经验的dev,那就不多说了,你应该能明白后端不“仅仅”是CRUD。

    阴影说不上,我只是个打杂的

    回到题目上,前端有Adday那帮家伙吆喝,跟一堆人搞出的Grunt、Yeoman、Bower加上Angular确实加速了我们的生产/调试的效率,不过也只能在产品认为目标客户高大上的时候才能用上,碰到IE6-8,再多Polyfill也白搭,不如JQuery来得短平快(虽然难看难维护,好歹还能跑)
    rekey
        7
    rekey  
       2014-01-26 01:59:26 +08:00
    所谓前端工程师的自我臆想...

    P.s : 我也是是所谓前端...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1693 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:14 PVG 00:14 LAX 08:14 JFK 11:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86