simplify the life

技术选型 — 关于前端路由和后端路由的个人思考

前端路由 or 后端路由

关于这个问题,无论是平时工作中,还是业余学习中,都有过思考。到底什么样的项目适合前端路由,什么样的项目适合后端路由?可能我目前的想法还很稚嫩不成熟,欢迎吐槽。

首先需要明确的是,无论前端还是后端路由,我们看到的 URL 都是马甲,需要通过路由触发/执行真实需要执行的逻辑路径。

先说前端路由,很重要的一点是 页面不刷新,和后端采用 ajax 交互,实际生产中多用在 单页应用 中。举个例子,webapp 一类就比较适合用前端路由,页面不刷新使得交互友好(毕竟移动端请求还是挺耗时的),另外,单页应用通常代码量不大,只提供某一方面的功能(比如猫眼 webapp,只提供电影票功能)。而在单页应用中,通常 大部分页面结构不变,只改变部分内容的使用,这样就使得共用的部分不需要重复请求(js、css 等)。

后端路由为传统的路由方式,也就是传统的后端套模版。首先,我觉得 比较重 的网站适合后端路由,比较重的意思就是网站功能复杂(路由复杂),比如博客园,我倒是觉得如果把博客园细分为多个子站,或许某些子站点可以做单页应用,不过那样又是另外一回事了。后端路由的另外一个极大的问题就是 前后端不分离,因为模版后端控制,那么这部分代码谁来写呢?如果是前端的话,前端本地就要有后端的项目(来写模版),如果是后端,是前端写完静态页面再让后端套模版吗?这样经常会出现样式问题。所以如果是后端路由的项目,我还是建议前端来写模版。

前端路由和后端路由并不是绝对的,有的网站有用全局后端路由、局部前端路由的做法,比如 GitHub,有部分地方(比如项目详情页)有用到 pjax(可以理解为前端路由?)。

总结

简单总结几点:

  1. 如果是功能复杂的网站,建议后端路由,不建议大型网站用前端路由,太重(通常来说就是整个网站,也可能是功能单一的大型网站,比如携程这样的)
  2. 功能单一的网站,比如 webapp 那种,建议前端路由(通常说的单页应用 SPA)
  3. 页面有很多组件复用的情况,建议前端路由(如果页面功能复杂,参考第一条)
  4. 无所谓前端还是后端路由的网站,比如后台管理系统,那就前端路由吧,毕竟无论是 Vue 还是 React,都有好几个搭配的 UI 库,前端撸会比较顺心
  5. 功能太简单的网站,简单到就几个静态页面,前端路由、后端路由均可,甚至不需要路由
  6. 事情并没有绝对性,任何前端路由的网站肯定能用后端路由实现,反之亦然

更多可以这个讨论 为什么我不喜欢「前后端分离」(个人观点,欢迎来喷)


2017.10.10 add:

最近在做一些组件化的工作,后端路由非常不适合组件化。组件化将具体的功能抽象成对应的 html + js + css,最好是能放在一个文件夹下,但是后端路由的项目模版控制在后端,也就是 html 代码在后端,html + js + css 不可能放在一个文件夹下,从而使得组件的文件分离,不易于维护。因为公司项目的组件是高度定制的,并不像 antd 一样,可以弱化 html 部分。

posted on 2017-09-23 19:17 韩子迟 阅读(...) 评论(...) 编辑 收藏

导航

统计信息

News