在做前后端分离时,第一个关注到的问题就是渲染,也就是 View 这个层面的工作。
在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但是模版却又在这两者中间的模糊地带。因此模版上面总不可避免的越来越多复杂逻辑,最终难以维护。
而我们选择了 Node.js,作为一个前后端的中间层。试图藉由 Node.js,来疏理 View 层面的工作。
使得前后端分工更明确,让专案更好维护,达成更好的用户体验。
渲染这块工作,对于前端开发者的日常工作来说,佔了非常大的比例,也是最容易与后端开发纠结不清的地方。
回首过去前端技术发展的这几年, View 这个层面的工作,经过了许多次的变革,像是:
可以观察到在这几年,大家都倾向将 渲染这件事,从服务器端端移向了浏览器端。
而服务器端则专注于 服务化 ,提供数据接口。
浏览器端渲染的好处,我们都很清楚,像是
但是在享受好处的同时,我们同样的也面临了 浏览器端渲染 所带来的坏处,像是:
其实回头想想,在我们把渲染的工作从 服务端(Java)抽出来到 浏览器端(JS)的时候,我们的目的只是明确的前后端职责划分,并不是非浏览器渲染不可。
只是因为在传统的开发模式中,出了服务器就到了浏览器,所以前端的工作内容只能被限制在浏览器端。
也因此很多人认定了 后端 = 服务端 前端 = 浏览器端 ,就像下面这张图。
而在淘宝 UED 目前进行的中途岛(Midway)项目中,藉由在 JAVA – Browser 中间搭建一个 Node.js 中间层,试图把这个前后端的分割线,重新针对工作职责去区分,而分针对硬体环境去区分(服务器 & 浏览器)。
因此我们有机会做到模版与路由的共享,也是一个前后端分工中最理想的状态。
在中途岛项目中,我们把前后端分界的那条线,从浏览器端移回到了服务器端。
藉由一个由前端轻松掌控且与浏览器共通的 Node.js 层,可以更清晰的完成了前后端分离。
也可以让前端开发针对不同的情况,自行决定最适当的解决方案。而不是所有事情都在浏览器端来处理 。
中途岛并不是前端试图抢后端饭碗的项目,目的只是把 模版这个模糊地带切割清楚,取得更明确的职责划分。
而不再拘泥于服务端或浏览器端的差异。
在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但是模版却又在这两者中间的模糊地带。因此模版上面总不可避免的越来越多复杂逻辑,最终难以维护。
有了 Node.js,后端同学可以在 JAVA 层专注于业务逻辑与数据的开发。而前端同学则专注于控制逻辑与渲染的开发。并且自行选择这些模版是要在 服务端(Node.js) 或是浏览器端做渲染。
用着一样的模版语言 XTemplate,一样的渲染引擎 JavaScript
在不同的渲染环境(Server-side、PC Browser、Mobile Browser、Web View、etc.)渲染出一样的结果。
也因为有了 Node.js 这一层,可以更细致的控制路由。
假如需要在前端做浏览器端路由时,可以同时配置服务器端的路由,使其在 浏览器端换页 或是 服务端换页 ,都可以得到一致的渲染效果。
同时也处理了 SEO 的问题。
通常我们在浏览器端渲染一份模版时,流程不外乎是
<script type="js/tpl"> ... </script>
印在页面上從以上的流程可以观察到,要想要做到模版的跨端共享,重点其实在一致的模块选型这件事。
市面上流行很多种模块标准,例如 KMD、AMD、CommonJS,只要能将NodeJS的模版档案透过一致模块规范输出到 Node.js 端,就可以做基本的模版共享了。
而后续的系列文章会针对 Model 的 Proxy 与共享,做进一步的探讨。
因为有了中途岛这中间层,针对过往的一些问题都有了更好的解答,例如说
过去的 AJAX、Client-side MVC、SPA、Two-way Data Binding 等技术的出现,都是试图要解决当时的前端开发遇到的瓶颈。
而 Node.js 中间层的出现,也是在试图解决现今前端被侷限在浏览器端的一个限制。
这边文章专注于前后端模版共享,也希望能抛砖引玉,与大家一起讨论如何在 Node.js 中间层这个架构下,我们可以怎样的改善我们的工作流程,怎样的跟后端配合,来把前端这个工作做得更好。
结构。
4. 脱离对于后端开发、发佈流程的依赖。
5. 方便联调。
但是在享受好处的同时,我们同样的也面临了 浏览器端渲染 所带来的坏处,像是:
其实回头想想,在我们把渲染的工作从 服务端(Java)抽出来到 浏览器端(JS)的时候,我们的目的只是明确的前后端职责划分,并不是非浏览器渲染不可。
只是因为在传统的开发模式中,出了服务器就到了浏览器,所以前端的工作内容只能被限制在浏览器端。
也因此很多人认定了 后端 = 服务端 前端 = 浏览器端 ,就像下面这张图。
而在淘宝 UED 目前进行的中途岛(Midway)项目中,藉由在 JAVA – Browser 中间搭建一个 Node.js 中间层,试图把这个前后端的分割线,重新针对工作职责去区分,而分针对硬体环境去区分(服务器 & 浏览器)。
因此我们有机会做到模版与路由的共享,也是一个前后端分工中最理想的状态。
在中途岛项目中,我们把前后端分界的那条线,从浏览器端移回到了服务器端。
藉由一个由前端轻松掌控且与浏览器共通的 Node.js 层,可以更清晰的完成了前后端分离。
也可以让前端开发针对不同的情况,自行决定最适当的解决方案。而不是所有事情都在浏览器端来处理 。
中途岛并不是前端试图抢后端饭碗的项目,目的只是把 模版这个模糊地带切割清楚,取得更明确的职责划分。
而不再拘泥于服务端或浏览器端的差异。
在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但是模版却又在这两者中间的模糊地带。因此模版上面总不可避免的越来越多复杂逻辑,最终难以维护。
有了 Node.js,后端同学可以在 JAVA 层专注于业务逻辑与数据的开发。而前端同学则专注于控制逻辑与渲染的开发。并且自行选择这些模版是要在 服务端(Node.js) 或是浏览器端做渲染。
用着一样的模版语言 XTemplate,一样的渲染引擎 JavaScript
在不同的渲染环境(Server-side、PC Browser、Mobile Browser、Web View、etc.)渲染出一样的结果。
也因为有了 Node.js 这一层,可以更细致的控制路由。
假如需要在前端做浏览器端路由时,可以同时配置服务器端的路由,使其在 浏览器端换页 或是 服务端换页 ,都可以得到一致的渲染效果。
同时也处理了 SEO 的问题。
通常我们在浏览器端渲染一份模版时,流程不外乎是
<script type="js/tpl"> ... </script>
印在页面上從以上的流程可以观察到,要想要做到模版的跨端共享,重点其实在一致的模块选型这件事。
市面上流行很多种模块标准,例如 KMD、AMD、CommonJS,只要能将NodeJS的模版档案透过一致模块规范输出到 Node.js 端,就可以做基本的模版共享了。
而后续的系列文章会针对 Model 的 Proxy 与共享,做进一步的探讨。
因为有了中途岛这中间层,针对过往的一些问题都有了更好的解答,例如说
过去的 AJAX、Client-side MVC、SPA、Two-way Data Binding 等技术的出现,都是试图要解决当时的前端开发遇到的瓶颈。
而 Node.js 中间层的出现,也是在试图解决现今前端被侷限在浏览器端的一个限制。
这边文章专注于前后端模版共享,也希望能抛砖引玉,与大家一起讨论如何在 Node.js 中间层这个架构下,我们可以怎样的改善我们的工作流程,怎样的跟后端配合,来把前端这个工作做得更好。
← 前后端分离的思考与实践(三) 前后端分离的思考与实践(一) →题图:https://unsplash.com/photos/4V4B8VdHRNw By @Friso Baaij