nodejs+java混合网站开发实践

纯Java网站开发改造为nodejs混合编程 如何利用nodejs加速java制作的网站,进行改造混合开发. 阅读详情

网站技术选型之痛

对于网站开发的技术选型,我们听到最多的就是: 网站是基于xxx(如java,php,ruby)上的某某框架构建的。
一门主要开发语言、一个独立项目,好处是结构简单,不好的地方也显而易见:

  • 不利于前后端独立开发。前端等后端完成后台业务,后端等前端写完页面模板,时间就是这么等走的。
  • 前后端经常需要介入对方领域,不利于专业分工。后端时不时改个html模板,有时候还要改css,前端需要理解整个网站的原理,甚至后端语言,调试页面需要启动整个网站所有功能,而不能单独运行页面前端代码,费时费力。
  • 如果网站需要个后台,单独开发个会造成业务逻辑重复书写;直接集成进网站项目会造成网站代码更难组织。
  • 如果再需要加上某某移动平台定制app,不用响应式页面,这不又得开发个。。。

团队技术背景

几个月前,在接到进行几个类似小电商网站开发任务之前,我们的团队已经在java平台上开发了好几个网站和企业应用。经过了几次演进(纯jsp到freemarker,struts到spring mvc,管理后台使用extjs+java单独项目),但总体上还是纠结于网站项目前后端过度耦合问题。
对于nodejs,我虽然接触时间不短,但大部分做过的东西还属于玩票性质,还停留在nodejs适合做api输出这个简单层面。

目标及思路

当时面对的是:几个类似的网站结构,都要后台管理功能,可能以后会有定制移动app需求,团队人员有限,时间周期有限。
按照以前那套前后端各搞一个项目的套路继续开发下去,铁定完不成,就算复制项目完成了,后期维护代价也非常大。所以问题的核心是:

  • 如何最大化复用我们的代码(1)
  • 如何尽量提高我们的开发效率(2)

除了核心目标,还有几点我们必须满足:

  • 数据保存操作需要事务支持(3)
  • 网站搜索功能需要尽量强大,比如支持模糊搜索,分组统计(4)
  • 开发语言优先选择我们会的,或者熟悉的,如果其他语言确实有比较大的优势,也可以考虑(5)
  • 我们的服务器资源有限(6)

以上几个约束分别考虑下,其实我们的选择已经不多:

  • 要达到3的要求,spring + hibernate声明式事务我们最熟悉,并且很方便;要解决4的要求,内嵌solr是我们想到的最现实方案。所以基本上我们的业务处理无法离开java。
  • 问题1其实是所有软件开发人员一直在考虑的问题。包含很多,放在当下,可以分成几部分:
    • 前后端能否一起整体复用?
      这种想法优先否定,会回到之前单项目的老路
    • 后端如何复用?
      因为已经订下后端使用java,java的项目的整体复用形式就是jar依赖或者远程service调用
    • 前端如何复用?
      功能/组件级别的复用形式听起来很好,但是开源的方案如(java)wicket使用起来还是相当不便,会加重前端的困扰
      微观的复用形式很多,如requirejs/seajs对js的复用优化,各种html模板复用
  • 对于问题2,以上几个方面的合理选择肯定会大幅度改善开发效率。其他促进项目还有:
    • 采用熟悉的语言
      开发团队最熟悉的语言当然是java和javascript
    • 成熟的依赖管理框架
      如java的maven,前端的bower.js,nodejs的npm
  • 问题6对我们的选择也有很大影响。基于以前的经验,要开发的几个网站(全都带有后台)如果全部采用java,并且做前后端项目分离,由于java是出了名的内存大户,那服务器压力会很大,甚至无法承受。

最终方案

在理性和感性的双重推动下,我们最终使用了以下方案:

  • 网站:nodejs + express + jade + less,采用q.js的promise方案, gruntjs用于开发及打包优化
  • 管理后台:extjs静态网站,gruntjs用于开发及打包优化
  • 统一的service api输出restful json: java + spring mvc + hibernate(没用jersey)

实现效果

  • 前后端分离,开发人员都是用最擅长的语言,没有太多学习负担
  • 后端java api服务是无状态的,便于性能扩展
  • 企业用户需要的事务支持得到了保证
  • jade模板和less简洁易懂的语法保证了html和css的书写效率和质量
  • 网站的总体资源占用不多(nodejs 100M左右,extjs静态托管,忽略),适当优化后整体响应速度还不错
  • 要开发新的网站/app可以最大化复用后端api逻辑,只管书写表现页面
  • 在保证service 程序对应数据库模型一致和api设计合理的前提下,我们只维护一份service代码,但完成了几个同类型网站的开发(使用maven profile配置)

最终网站开发时间节省明显,第二个网站的开发时间是第一个的不到1/3。

?

后话:前阵子偶尔发现sea.js的作者淘宝玉伯分享说他们的团队也是这么做前后端分离的~?链接

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南 STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。 阅读详情

相关推荐

EtherCAT主站视角:如何正确配置一个支持动态PDO的从站(以倍福TwinCAT为例)

本文详细解析了在TwinCAT环境下配置支持动态PDO的EtherCAT从站的全过程。通过MDP(Modular Device Profile)实现模块化配置,涵盖从站工作原理、TwinCAT工程配置、调试技巧到高级应用实践,帮助工程师快速掌握动态PDO配置技术,提升工业现场设备扩展与维护效率。

weixin_30466039的博客 266

nodejs和java混编

【代码】nodejs和java混编。

m0_59799878的博客 554

Ubuntu 解决WPS缺少宋体,微软雅黑等中文字体

这篇博客解决Ubuntu 18.04 无法使用中文字体的问题 问题描述

分享日常的学习,开展的项目,编写的软件,解决的问题等~ 1万+

NodeJs 与 Java 服务互调

最轻量,选择最普遍。需要在Node.js和Java上实现相应的服务端代码,用于处理HTTP请求和响应。对于Node.js,你可以使用Express框架或其他框架来实现服务端。对于Java,你可以使用Spring框架或其他框架来实现服务端。

qq798280904的博客 3454

AURIX TC397开发板到手第一步:用iLLD库驱动LED流水灯(附完整代码)

本文详细介绍了如何使用英飞凌AURIX TC397开发板和iLLD库实现LED流水灯效果。从开发环境配置到硬件连接,再到完整的代码实现,逐步引导开发者完成项目。文章还提供了优化建议和常见问题解决方案,帮助嵌入式开发新手快速上手。

weixin_30911451的博客 390

【Bug已解决】codex: rate limit 429 / Too many requests / RPM exceeded — CodeX CLI 速率限制解决方案

CodeX CLI 触发 429 速率限制(RPM/TPM/并发)的解决方案,含请求间隔、自动重试、便宜模型、Tier 升级与多 Key 轮换。

博客 4891

Java使用ProcessBuilder类执行Node脚本

ProcessBuilder类是Java中的一个用于创建操作系统进程的类。它允许你在Java程序中启动外部程序或命令,并与它们进行交互。ProcessBuilder类提供了一种灵活的方式来构建和管理进程,使得你可以方便地执行各种任务,如运行脚本、执行系统命令等。以下是关于ProcessBuilder类的详细介绍:构造函数:ProcessBuilder类有一个无参构造函数,可以创建一个空的ProcessBuilder对象。此外,它还有两个重载的构造函数,分别接受一个字符串数组和一个字符串列表作为参数。

m0_67087330的博客 1451

RGB渐变颜色转换公式及例程

设Step=51,将RGB(255,0,0)颜色渐变为RGB(0,255,0),即RGB(255,0,0)经过51次颜色渐变转为RGB(0,255,0);设Step=51,将RGB(0,255,0)颜色渐变为RGB(0,0,255),即RGB(0,255,0)经过51次颜色渐变转为RGB(0,0,255);设Step=51,将RGB(0,0,255)颜色渐变为RGB(255,0,0),即RGB(0,0,255)经过51次颜色渐变转为RGB(255,0,0);分步骤的方式,使其渐变色循环整个颜色值;

1万+

java-Nodejs

Nodejs

qq_40301475的博客 486

Python全栈项目--手机语音远程控制智能家居系统(含嵌入式控制)

摘要:本项目实现了一个基于Python全栈的智能家居语音控制系统,支持手机端语音指令控制家居设备。系统采用FastAPI后端+Vue3前端的架构,集成Web Speech API实现语音识别,通过嵌入式设备(如ESP32)执行硬件控制。功能包括用户认证、设备管理、场景联动、指令解析和日志记录,支持HTTP轮询和直推两种命令下发模式。项目涵盖物联网全链路开发,适用于课程设计或毕业设计原型开发。

exlink2012的专栏 877

把 LDB 讲透:SAP ABAP 逻辑数据库的结构、事件模型、动态选择与现代替代方案

摘要:SAP中的Logical Database(LDB)是一种将表组织成树形结构并统一生成选择屏幕的技术,通过事件驱动方式向报表程序传递数据。虽然被标记为过时,但在理解标准代码和优化性能方面仍有价值。LDB通过SE36事务码创建,其结构包含层级关系、选择屏幕和数据库程序。报表通过NODES声明和GET事件处理数据,支持动态选择以减少数据库访问。在S/4HANA和ABAP Cloud环境下,建议使用CDS View和ABAP SQL等现代方案替代LDB,以提升可测试性和架构清晰度。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 215

Nginx + Node.js + Java 的软件栈部署实践

关于前后端分享的思考,我们已经有五篇文章阐述思路与设计。本文介绍淘宝网收藏夹将 Node.js 引入传统技术栈的具体实践。淘宝网线上应用的传统软件栈结构为 Nginx + Velocity + Java,即:在这个体系中,Nginx 将请求转发给 Java 应用,后者处理完事务,再将数据用 Velocity 模板渲染成最终的页面。引入 Node.js 之后,我们势必要面临以下...

weixin_33719619的博客 347

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 998

java 转 nodejs_纯Java网站开发改造为nodejs混合编程

早已对纯JAVA版的网站不满了,不管是繁重的代码编写量,和无谓的3层代码编写都让我提不起兴趣。但是提到nodejs我就有兴趣来做了,原来的网站是放到云服务器上的,由于CPU和内存的限制进一步影响了网站速度和承载量。达到什么程度呢,就是3个人同时应用就会造成访问慢或卡死。于是我想到nodejs将原来网站重写。将来就会加速网站和体现并发数优势。很多人反对我这样做,说nodejs不适合重逻辑的部分,但好...

weixin_29028145的博客 1186

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

nodejs开发视频网站,nodejs前端开发教程

方法:第一:理清Web前端的知识结构。要想高效学习Web前端知识,首先应该搞清楚Web前端都包括哪些技术结构。Web前端开发虽然技术难度并不高,但是技术细节却比较多,内容也比较杂。Web前端的基础包括三大部分,包括Html、CSS和JavaScript,其中JavaScript是学习的重点,也是难点。另外,vue等框架也是需要熟练掌握的。第二:紧跟技术发展趋势。目前Web前端的技术发展趋势有三个,其一是前端开发数据化;其二是前端开发高效化;其三是前端开发全栈化。前端开发数据化主要是大数据发展的影响,在大数据

纸尿裤排行 417

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python+uniapp基于微信小程序的摄影知识网站 java+nodejs+php-计算机毕业设计

该网站是一个专为摄影爱好者、专业摄影师打造的摄影知识共享与交流平台。它利用django/flask框架的简化开发、快速搭建系统架构、提高开发效率的特点,以及微信小程序原生开发框架的丰富组件库和API,实现了用户界面的友好交互和数据的实时更新。

QQ_1963288475的博客 1030

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

如何用C++扩展NodeJS的能力?

如何用C++扩展NodeJS

曲折旅程,艰难人生 2265

基于vue+nodejs+mysql游戏商城销售分析网站设计与实现

Node被初学者会误以为是一种语言,其实node.js是使得JavaScript能在服务端运行的平台,使得 JavaScript 能像其它的后台语言一样可以操作网络、系统等。它的产生是由于Ryan Dahl认为I/O处理地不好,会因为同步执行造成代码阻塞,以前传统的Web服务技术是对每一个请求都启动一个线程进行处理。因此大部分的时间都宠物在了等待线程上,所以需要大量的资源来管理这些线程。造成服务器的“一个请求就开一个线程”这样的方式并不是很好。

qq840612233的博客 1105

nodejs+vue旅游景区商城网站

Node被初学者会误以为是一种语言,其实node.js是使得JavaScript能在服务端运行的平台,使得 JavaScript 能像其它的后台语言一样可以操作网络、系统等。它的产生是由于Ryan Dahl认为I/O处理地不好,会因为同步执行造成代码阻塞,以前传统的Web服务技术是对每一个请求都启动一个线程进行处理。因此大部分的时间都宠物在了等待线程上,所以需要大量的资源来管理这些线程。造成服务器的“一个请求就开一个线程”这样的方式并不是很好。

我的个人的博客 682

混合开发(一)Ionic环境搭建

混合开发环境搭建

ms 433

微信小程序的房屋房产中介系统java Nodejs python flask django php

如今我们已经越来越离不开互联网给我们带来的生活便利,希望通过微信小程序的房产中介系统也能提高房产购买效率。希望通过活泼、清新的界面给用户提供简单的与快捷互动的网站。方便用户在浏览一些最新的售房房源、租房房源,也让宝贵的时间不在等待中流失。此同时越来越多的房地产建立了自己的微信小程序的房产中介系统,管理员通过网站可以添加房源类型、装修风格、房东、用户、中介、委托信息、售房房源、租房房源、租房订单、购房订单、系统管理,用户可以在线咨询房源信息,以及开展电子商务等。

懒人的博客 1057

后端:nodejs 支付宝-手机网站支付 (混合应用APP/h5可以走这种支付方式)

如果您app中可以接入app支付客户端SDK,那可以使用app支付接口,如果不能使用,那只能接入手机网站支付接口 功能一样的,手机网站支付接口一样是唤起支付宝app进行支付。 只是app中使用app支付接口能够提高唤起支付宝app 的概率 官方文档: 地址 ...

qq_36413371的博客 2157

[精品]基于nodejs+Vue的动漫视频网站

随着动漫文化的普及和受欢迎程度的提高,越来越多的观众希望能够方便地观看各种动漫作品。近年来,互联网技术取得了巨大的进步,这为开发高质量的动漫视频网站提供了可能。为了让更多的动漫爱好者有一个专门的平台我们通过Vue和Node.js开发了动漫视频网站,通过本网站可以让动漫爱好者更好的查看动漫和交流。 本基于Vue的动漫视频网站是根据当前人们对动漫的实际需求而开发的,在系统开发上我们选择Vue和Node.js结合的方式来进行开发,数据库是小巧灵活的MySQL数据库,本系统的开发可以极大的提高动漫视频网站的管理效率

z459382737的博客 855

NodeJS和CommonJS

前言: 早就听说有用于本地编程的JavaScript框架,但总觉得是小打小闹不成气候,也没有什么实用价值。但自从CommonJS和NodeJS两个项目的出现,JavaScript作为本地编程语言的这种特殊应用形式,才开始进入进入大众的视野。 本文翻译CommonJS首页的介绍,说明什么是CommonJS。 另外随着并行计算的普及,像JavaScript这种函数式语言,由于其固有的易于进行并行计算

蜜蜂的专栏 4760

python+uniapp基于微信小程序培训机构平台java+nodejs+php-计算机毕业设计

本系统分为学生,教师,管理员三个角色,其中学生可以在线注册登陆系统,查看课程资讯,培训课程详情,在线报名课程,退订课程,课程评价,查看成绩,在线留言;教师可以查看报名课程,审核报名,退订课程,课程打分,评价回复;管理员对学员信息,教师信息,课程类型,课程报名,课程退订信息,课程成绩,课程评价,留言板信息,轮播图信息等进行管理。

QQ1963288475的博客 1108

Hybrid App混合模式移动应用开发(AngularJS+Cordova+Ionic)

以前公司开发了某手机APP是通过jquerymobile来实现的,发现它对手机上的原生设备无能为力。于是在下一个项目到来之际,通过筛选最终决定使用cordova+Ionic。看起来简单,但是因为他们各自有一些依赖,林林总总,最终涉及的内容便不少了。   如下所示:   环境搭建:window     1、JAVA-SDK 安装配置(版本7以上)       这个没什...

289
上一篇: 通过NodeJS,Express搭建本地HTTP访问服务.
下一篇: Express作者TJ告别Node.js奔向Go
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值