`

不同的声音-我为什么反对用Node

    博客分类:
  • web
 
阅读更多

随着无线端的快速普及,前后端分离技术走上前台,而Node由于它的一些特性被工程师快速接受尤其是前端工程师,所以产生了很多Node是否会引起 新的技术变革的讨论。我本人是淘系的一个Web开发人员,基本上经历了淘系关于Node和Java技术选型讨论的过程,所以今天我给大家推演一下在像淘系 这个环境下Node能否会成为主流的Web开发技术,当然后面也给出了我认为比较适合的场景。

Node火了

在百度中搜索Node可以得到105w个结果,图书出版方面13年3月到15年6月2年时间有近20种相关的Node书出版,实践方面国外公司 PayPal、LinkedIn、groupon也都在使用,国内大公司阿里、腾讯、百度也都有实践项目在尝试。这让我想起了当初Nosql新出来是一样 的场景,大家都一窝蜂的涌上去拥抱新技术,获取新技术带来的红利。

Node很火的另一个推手是当前的无线技术流行,很多应用从传统的PC开发要转到无线等多端,这种情况下渲染层和逻辑层的分离变得重要起来,而Node刚好可以很好的渲染前端页面,所以我们的开发同学不遗余力的在推广Node技术。

Node能够火起来最重要的原因还是它的确给我们的开发带来了很多好处:

  • 基于事件驱动
  • 无阻塞I/O

Node还有其它一些优点如单线程,总体来说Node是为轻量级的分布式的实时数据服务这类应用提供运行容器而设计的,这类应用很容易想到微博、Facebook这类典型场景,需要非常实时化、个性化、高并发的数据服务。

为什么火了

今年由于无线终端的兴起,后端要提供基于JSON API的数据接口非常普遍。目前来看公司还存在两种形态:一个是无线作为新系统独立存在于传统PC系统;另外一种是将无线系统合并到老的PC系统,在一个 系统里同时支持多端服务。长期来看无线和PC系统的合并是必然,业务上以无线为主,PC仅仅作为一个终端而已,不可能存在无线和PC两套业务逻辑。

那基于无线和PC业务合并,由一个系统提供多终端、多语言适配的角度来看,Node能否在其中扮演传统服务端 MVC中的V角色?

要回答这个问题,我们再设想一下,在多端情形下,需要怎样的交互:PC、手机端、Pad、TV、Car、Watch等其它移动终端。

是Native还是H5

当前移动端主要还是以Native实现为主,从用户体验角度来考虑Native的实现要比H5更流畅,同时Native还可以基于本地做很多在浏览器里不能做的优化,如大数据的存储、可以定制的通信协议、更方便的保持长连接以及更容易实现的实时消息推送。

当然H5也有其无法比拟的优势,客户端更轻量级,服务端发布更迅速,不需要用户升级版本等。长期来看移动端能否会向早期PC那样也从富客户端转向浏览器呢?

我的判断是未必,有几个因素,首先Native实现性能优势相比H5会好很多,当前移动端都在追求极致体验的时代,无疑APP会比H5有很多的优 势;其次,移动端屏幕较小,基于网页的交互和APP相比还有很多限制。最重要的是不同的商家是主推带有品牌标识的APP还是向统一的浏览器靠拢,从目前的 趋势看,APP 会是手机端上争夺的重点。所以推测直接基于手机端的浏览器的应用不会成为主流前端。

如何实现快速迭代

基于APP的Native如何解决客户端更新和服务端的快速迭代,这个问题是当前正在着力解决的,目前为止有两种思路:一种是客户端用同一种技术开 发,然后通过工具编译技术把它编译成不同平台上能够执行的代码,如当前的React Native;另一种思路是将客户端中经常需要更新的模块做成动态推送的,用模板+数据的方式,在不同的客户端平台上实现一个小的解析引擎来实现快速个性 化的定制,目前手淘主要采用后面一种实现方式,当然前一种也正在尝试。

那么再说回来,基于前面的这些推断,多终端和服务端交互主要是数据+模板的方式为主,那么服务端提供格式化的数据将成为必然选项。所以涉及到的问题 就是服务端既要提供格式化的数据(Http JSON数据),又要支持传统的PC的方式:基于JSON数据渲染出HTML页面,所以很容易想到将渲染层独立出来用Node完成。

真的靠谱吗

既然Node可以带来这么多好处,那么我们不妨就继续向下推演,看是否真的很靠谱?下面看下Node在我们的实际的开发环境中如何使用,在引入Node之前我们有必要先介绍下当前Web服务端架构:

(点击放大图像)

图1. 传统的web架构

在当前这种架构下Node怎么融入进去呢?最保守的一种方案是将当前的Java Web中的VIEW层从MVC中独立出来,交给Node来完成,Java Web只提供基于JSON数据接口给Node调用,架构图变成了如下的形式:

(点击放大图像)

图2. Node作为渲染层加入到传统架构中

很明显的差别是在我们当前的访问路径上多增加了一个Web代理层,而这一层和当前的Web服务器层怎么看都有点别扭,两者同时存在始终觉得有一个是 多余的,那么Node能否替代掉Nginx成为Web代理服务器呢?理论上是完全没问题的,就像我们用PHP来代替Java Web开发一样,不过你放到具体的公司运维体系中,你会发现目前在Nginx上的防攻击、限流、数据埋点、热点cache等模块都要在Node上重新开发 一遍,最重要的是用Node取代Nginx并不能带来额外的好处,如果你说Node可以渲染页面,那么Nginx的开发会和你讨论Nginx lua模块和Node哪个更合适,所以用Node取代Nginx作为代理服务器也不太现实。

那么Node能否取代前端台的Web系统,成为主流的MVC框架呢?

未必

Node和Java Web一样可以提供MVC管理功能,一个系统中同时存在两套MVC框架显然不合理,那么如果用Node 来替换Java Web的话,服务端的架构变成如下的:

(点击放大图像)

图3. Node替代Java Web

从技术实现上这种架构没什么大问题,就是用Node上的MVC框架如express来替代Java Web中Webx,也就是用JavaScript替换Java,以及整个运行容器和中间件都要替换,那么是否真的带来那么大的好处呢?

我们从语言特性、开发效率和成本因素三个方面来看,Node作为后来者能否比我们现在的Java更优秀。

语言特性

JavaScript作为Node上运行的语言和Java相比,优缺点很明显。JavaScript语法简单,很容易编写基于事件的驱动的实现。但 是JavaScript基于面向对象的描述能力偏弱,不像Java是真正的面向对象语言 ,同时JavaScript的对数据类型定义也比较单一,要么是数值类型要么是字符类型。很明显Java更擅长构建复杂逻辑的大型应用程序,在这一点上 JavaScript明显落于下风。

在语言运行效率上,JavaScript本来是解释执行,而Java是编译执行,但是由于Node做了优化,所以运行效率差别不大。

开发效率

开发效率可以从语言的复杂度、程序员培养、开发工具包的丰富性以及编码效率几个方面比较。

  • 语言的复杂度。Java和JavaScript从开发角度都不需要关心内存的管理,都是基于虚拟机来管理内存,从并发角度来 看:JavaScript是基于事件触发的,而Java是基于线程的,JavaScript更占优势。另外JavaScript是无阻塞 I/O的,在I/O效率上JavaScript也更占优势,虽然Java8也将更好的支持异步I/O。
  • 程序员培养。目前Java语言仍然是仅次于c语言的第二大编程语言,而JavaScript排查第10位,Java程序员队伍要比JavaScript大很多,很显然Java程序员招聘要比JavaScript更容易一点。
  • 开发工具包。一个语言的开发效率很多时候要这个语言的支持工具包和组件的丰富性,Java经过这么多年的发展,工具类库已经非常丰富,几乎你想 要的工具类库都能在网上找到。JavaScript虽然也发展很长时间,但是基于JavaScript的工具类库主要集中在前端,能够直接用于Node上 的仍然很少,当然Node的社区非常活跃,可以预见Node的工具类库增长也会非常迅速。但是短时间内要达到Java的规模尚需时日。
  • 编码效率。Java语言的运行基于JVM,但是Java的部署效率稍差,而JavaScript使测试更加简单,容器重启更快,但是debug机制仍然不完善,所以很难做debug测试。

成本因素

前面主要是从技术角度考虑,但是如果往Node迁移的话,成本也是一个考虑因素。

  • 首先是学习成本。公司大部分是Java程序员要往Node迁移很明显这个学习成本会非常巨大,即使这个迁移是逐渐的,长期来看仍然是要将一部分 Java程序员替换成JavaScript程序员,不管这个程序员是公司内培养的还是从外部招聘的,我们可以算一下帐,公司招聘一个程序员的成本有多大: 一个普通的工程师的年薪假定有10w以上,猎头费一般是年薪的20%以上,也就是2w,再加上一个月的实习成本1w,加在一起约3w,对于一个有1w以上 开发的大公司成本可想而知,即使是招聘应届生,由于应届生的培养周期更长,所以学习成本会更高。
  • 其次是环境成本。公司的基础服务产品,如中间件都是基于Java开发的,如果要替换成JavaScript 必然要再开发一套,还有配套的运维工具等,这个成本也可想而知。
  • 最后是维护成本。Java和JavaScript都是基于容器运行,JVM和v8引擎相比,程序员显然对JVM更熟悉。另外从排查问题的难易程度来看针对JVM的工具显然更完善。

从上面几个方面来看,当前在阿里要让JavaScript完全取代Java作为后端开发语言,基于Node用JavaScript 实现整个服务层逻辑显然成本会比较高。

换个角度

我们再换一种角度推演一下,假如我们现在的Web系统都用Node实现,那必然有很多Java工程师会做Node的开发,因为我们现有的前端工程师 人数肯定是支撑不了现有的业务发展的。我们假定一部分Java工程师愿意学习JavaScript成为全栈工程师,但是是否同一个人愿意用两种不同的语言 完成同一个任务呢,正常来说,如果我能用同一个方式完成全部工作,我为什么要把一个任务分成两种不同的方式来完成,这显然也不太合理。

怎么办

基于前面的分析,Node不管是在现有基础上单独增加一层还是要整个替换Java Web层都不太合理,那是否意味着这种前后端分离的思路有没有合理之处?有没有更好的实现呢?

传统的MVC Web软件架构将渲染层独立出来交由前端同学控制有其合理性,在当前的多终端开发模式下,将业务逻辑层和前端渲染层分离有利于提升后端的开发效率,后端只 需要关注后端的业务逻辑和数据的输出,因为在Native开发下服务端只需要输出JSON数据,客户端的页面渲染有客户端同学完成。H5和PC需要的 HTML渲染统一交给前端同学完成有利于前端更好的开发模板,从以往的先画好模板(HTML),给后端同学转化成相应的模板(如Velocity或 JSP),然后再基于复杂的Java Web工程下调试页面(前端要独立的运行整个Java Web工程还是相当的困难)。而渲染层全部交给前端的话,前端同学和后端只需要约定好数据后,页面完全由前端同学完成,减少了不少交流成本(不过从淘宝的 基于Node实践来看,整个效率提升还不是那么明显,大部分是把原本是后端的开发工作量转嫁给前端了)。

还有一个重要的理由是前端有了渲染层的控制权,前端的开发体验有了不小的提升,说白了就是前端从以往的配合角色转变成一个Web渲染层的 Owner,更加有了主人翁角色,如果再维护Node的话,和以往的后端Java开发几乎一样了,而这种前端职责的提升恰恰是从后端削弱过来的,所以第一 个出来反对的肯定是后端同学,当前在阿里Node发展比较缓慢我想也有一点关系吧。

再说回来,我们一直讨论的基于Node实现的前端分离方案,可以把他分解一下Node技术和前后端分离。很明显前后端分离在当前多终端背景下有其合理性,但是是否一定要用Node来实现呢?答案是不一定。当前还有两种方案:

将Node层代码抛到Java体系上,如下图:

(点击放大图像)

图4. Node嵌入到Java中

当前的Java8(Nashorn)已经可以支持JavaScript的解析,而Avatar.JS可以将Node无缝迁移过来,但是经过测 试,Nashorn+Avatar.JS的执行效率太差,有4到10倍的性能下降,最好也有一半的下降,这样很难达到工程级别的使用。

另外一种就是仍然在基于Java Web体系下,而是将渲染层独立出来,渲染层和业务逻辑层仍然通过JSON(或者大对象)数据交互,使得渲染层既可以在Java上渲染也可以在Node上执行。如下图所示:

(点击放大图像)

图5. Java Web兼容Node的模板层

这种方式与前一种的区别是只做渲染引擎的适配,即模板在Node和Java上都可以解析,而不是把Node的整个MVC都搬过来,由于Node和 Java Web上都有控制逻辑(即MVC中的C),所以如果Node和Java中逻辑不一致会导致两边渲染出来的HTML不一致,所以需要把URL改造成满足 RESTFULL的格式,尽量把C的逻辑简单化。

上图的架构正是目前我们在详情系统上做的一个实践,成功的关键是将XTPL的模板从Node上无缝迁移到Java上,另外就是保持页面的路由尽量简单,这样前端在Node上开发的重点只是XTPL模板。这种解决方案达到几个目的:

  1. 我们的后端系统完成的组件化改造,PC和无线逻辑统一起来了;
  2. 将渲染层独立,渲染层后业务量逻辑层通过JSON数据对象交互;
  3. 前端开发同学完全掌握了XTPL+JS逻辑,有更多的掌控力;
  4. 前端开发页面不需要依赖后端的Java系统,调试页面可以在Node中完成;
  5. 系统的架构并没有增加一层,运维上也没有引入新的Node系统。

没有无往不能的神器

前面介绍了在现有Java体系下,要将Node替换Java Web其实是比较困难的,所以没有一个技术是无往不能的神器,但是是否意味着Node就没有应用场景了呢?肯定不是,下面这些情况下Node很有用武之地。

创业公司很合适,尤其当创始人之一是熟悉前端的同学的话,用Node实现Web系统很合适,Node和PHP一样具备快速发布的优势,代码copy 上去就生效,甚至不需要重启服务器,这一点相比Java有很大的优势。当业务逻辑还没有非常复杂时,JavaScript语言的弱点也没有暴露的那么明 显,从系统的维护角度来说,不需要一个工作有两个角色的工程师完成,可以提升开发效率。

重页面交互轻业务逻辑的系统也适合Node来开发,说白了如果Web系统如有一半以上的 工作量都是需要前端同学来完成的话,那还不如把整个系统都交给前端同学来维护。

如果公司的工程师都是全栈工程师能在不同语言之间自由切换,那么也就没有所为的成本一说了。当然这个仍然要受到公司基础环境的约束,如运维和中间件产品仍然不会同时开发两套。

小结

随着技术的不断进步我们的开发模式也在一直发生着变化,早期的页面渲染和业务逻辑全部集中在一起,如ASP、PHP、JSP技术,后来由于业务逻辑 不断变得复杂,出现了MVC的开发框架,前后端工程师分工也越发清楚。中间也有过前端工程师负责整个渲染层和控制层的实现如Extjs+Ajax的开发模 式,但是由于整个渲染是在浏览器端完成的受制于客户端渲染性能和搜索引擎的收录页面的硬缺陷很难成为主流。一直到今天前后端开发模式仍然是后端工程师管理 M和C,而由前端来实现V,开发环境和运行环境是一套,所以开发上的耦合导致沟通和调试成本增加。直到Node的出现缓解了前后端开发上的耦合,但是这种 分离仍然是以增加运行时的维护成本来换取开发时的便利,所以我觉得还不是最佳实践。

本文给出的解决方案也是想兼顾开发时的便利而同时也不增加运行时的维护成本为出发点,当然每种方案都不是完美的,找到适合才是最重要的,随着Java中执行JS技术的不断成熟,我想开发环境和运行环境的分离肯定不久就将实现,前后端开发的耦合度也就最终解决。

作者简介

许令波,2009年毕业加入淘宝,目前负责商品详情业务和稳定性相关工作,长期关注性能优化领域,参与了淘宝高访问量Web系统主要的优化项目,著有《深入分析Java Web技术内幕》一书。 @淘宝君山、http://www.xulingbo.net、xulingbo0201@163.com可以联系到我。

分享到:
评论

相关推荐

    洛谷愚人节比赛.pdf

    洛谷愚人节比赛.pdf

    ### 文章总结:北京迅为 iTOP-3568 开发板 Linux 系统开发和应用开发手册. **文档概述

    内容概要:本文档是北京迅为电子有限公司针对iTOP-3568开发板的Linux系统开发和应用开发手册,详细介绍了开发板在Linux系统下的配置与开发方法。手册涵盖Buildroot、Debian、Ubuntu等多个Linux发行版的系统开发笔记,涉及屏幕设置、待机和锁屏、显示颜色格式、分辨率和缩放、静态IP设置、Qt程序操作、开机自启、音频视频和摄像头开发、VNC和ToDesk远程控制软件安装等内容。同时,手册还提供了关于Buildroot编译常见问题的解决方案、U-Boot和内核开发细节,以及IO电源域的配置方法。手册不仅适用于初次接触嵌入式Linux系统的开发者,也适合有一定经验的研发人员深入学习。 适合人群:具备一定编程基础,尤其是对Linux系统和嵌入式开发有一定了解的研发人员,工作1-3年的工程师,以及希望深入了解嵌入式Linux系统开发的爱好者。 使用场景及目标:①帮助用户掌握iTOP-3568开发板在Linux系统下的基本配置与高级开发技巧;②指导用户解决Linux系统开发中遇到的常见问题;③为用户提供详细的编译和调试指南,确保开发板能

    基于MATLAB2020b的CNN-LSTM与GTO算法优化的电力负荷预测研究

    内容概要:本文探讨了基于MATLAB2020b平台,采用CNN-LSTM模型结合人工大猩猩部队(GTO)算法进行电力负荷预测的方法。首先介绍了CNN-LSTM模型的基本结构及其在处理多变量输入(如历史负荷和气象数据)方面的优势。随后详细解释了模型各层的功能,包括卷积层、池化层、LSTM层和全连接层的作用。接着讨论了超参数选择的重要性,并引入GTO算法来进行超参数优化,提高模型预测精度。文中展示了具体的MATLAB代码示例,涵盖了数据预处理、模型构建、训练配置等方面的内容。此外,还分享了一些实践经验,如卷积核配置、LSTM节点数设定等。 适合人群:从事电力系统数据分析的研究人员和技术人员,尤其是对深度学习应用于电力负荷预测感兴趣的读者。 使用场景及目标:适用于需要精确预测未来电力负荷的场合,旨在帮助电力公司更好地规划发电计划,优化资源配置,保障电网安全稳定运行。通过本篇文章的学习,读者可以掌握如何使用MATLAB实现CNN-LSTM模型,并学会运用GTO算法优化超参数,从而提升预测准确性。 其他说明:文章强调了数据质量和预处理步骤的重要性,指出高质量的输入数据能够显著改善预测效果。同时提醒读者注意模型训练过程中的一些常见陷阱,如避免过度拟合等问题。

    TIG焊接工艺中二维电弧仿真的理论与程序实现

    内容概要:本文详细介绍了TIG(钨极惰性气体保护焊)二维电弧仿真的理论基础和程序实现。首先阐述了TIG电弧的本质及其在二维仿真中的数学描述,主要采用磁流体动力学(MHD)方程进行建模。接着展示了如何使用Python生成仿真所需的网格,并初始化温度场、速度场和电场强度等物理参数。随后,通过迭代求解MHD方程,逐步更新各物理量,最终得到电弧内部的温度、速度和电场分布情况。通过对仿真结果的分析,能够深入了解焊接过程中熔化和凝固的现象,从而优化焊接参数,提高焊接质量。 适合人群:从事焊接工程、材料科学及相关领域的研究人员和技术人员,尤其是对TIG焊接工艺感兴趣的学者。 使用场景及目标:适用于希望深入了解TIG焊接过程并希望通过仿真手段优化焊接参数的研究人员。目标是通过仿真更好地理解电弧行为,进而改善焊接质量和效率。 其他说明:文中还提到了一些实用技巧,如网格划分、边界条件设置、求解器选择等方面的注意事项,以及如何使用不同软件工具(如MATLAB、ParaView)进行数据可视化。此外,强调了多语言混合编程的优势,并提供了一些常见的调试和优化建议。

    jenkins操作诶udrtyui897t86r5drctvghuiyft

    jenkins操作诶udrtyui897t86r5drctvghuiyft

    帆软本地打印插件FinePrint 8.0版本

    帆软本地打印插件FinePrint 8.0版本,适用于FineReport8

    基于TMS320F2812的光伏并网逆变器设计与MATLAB仿真及DSP代码实现

    内容概要:本文详细介绍了基于TMS320F2812 DSP芯片的光伏并网逆变器设计方案,涵盖了主电路架构、控制算法、锁相环实现、环流抑制等多个关键技术点。首先,文中阐述了双级式结构的主电路设计,前级Boost升压将光伏板输出电压提升至约600V,后级采用三电平NPC拓扑的IGBT桥进行逆变。接着,深入探讨了核心控制算法,如电流PI调节器、锁相环(SOFGI)、环流抑制等,并提供了详细的MATLAB仿真模型和DSP代码实现。此外,还特别强调了PWM死区时间配置、ADC采样时序等问题的实际解决方案。最终,通过实验验证,该方案实现了THD小于3%,MPPT效率达98.7%,并有效降低了并联环流。 适合人群:从事光伏并网逆变器开发的电力电子工程师和技术研究人员。 使用场景及目标:适用于光伏并网逆变器的研发阶段,帮助工程师理解和实现高效稳定的逆变器控制系统,提高系统的性能指标,减少开发过程中常见的错误。 其他说明:文中提供的MATLAB仿真模型和DSP代码可以作为实际项目开发的重要参考资料,有助于缩短开发周期,提高成功率。

    基于鲸鱼优化算法与深度极限学习机的回归预测模型(WOA-DELM)及其应用

    内容概要:本文详细介绍了如何结合鲸鱼优化算法(WOA)和深度极限学习机(DELM)构建回归预测模型。首先,文章解释了鲸鱼优化算法的基本原理,这是一种受座头鲸群体狩猎行为启发的元启发式优化算法。接着,阐述了深度极限学习机的工作机制,它结合了极限学习机的快速学习能力和深度学习的层次结构。随后,文章展示了如何使用时间窗法处理数据,并构建自动编码器和极限学习机的具体步骤。特别地,文中详细描述了如何利用鲸鱼优化算法优化自动编码器的输入权重与偏置,从而提高模型的预测性能。最后,给出了完整的代码实现,包括数据预处理、模型构建、优化和预测等环节。 适合人群:具备一定机器学习基础的研究人员和技术开发者,尤其是对时间序列预测感兴趣的从业者。 使用场景及目标:适用于需要高精度回归预测的任务,如金融数据分析、能源消耗预测等领域。主要目标是通过优化模型参数,提高预测的准确性。 其他说明:本文提供的代码示例详尽且易于修改,用户只需替换自己的数据路径即可复现实验结果。同时,文中还提供了调参的小技巧,有助于进一步提升模型表现。

    ### 标题:【电动船舶充电通信协议】基于CAN的非船载传导式充电机与电动船舶间数字通信协议设计及应用

    内容概要:T/CIN 029—2024标准规定了非船载传导式充电机与电动船舶之间的数字通信协议,涵盖了一般要求、通信物理层、数据链路层、应用层、充电总体流程、报文分类、格式和内容等方面。该标准旨在确保电动船舶连接到直流电网时,充电机与电池管理系统(BMS)或船舶管理系统(SMS)之间的稳定通信。标准详细定义了各层的通信要求,如物理层的ISO 11898-1和SAE J1939-11规范,数据链路层的CAN扩展帧格式,以及应用层的参数组编号和传输协议。此外,还详细描述了充电的六个阶段(物理连接、低压辅助上电、充电握手、参数配置、充电和结束)的具体流程和涉及的报文格式,确保了充电过程的安全性和可靠性。 适用人群:从事电动船舶充电系统设计、开发、维护的技术人员及工程师;相关行业的研究人员;对电动船舶充电通信协议感兴趣的学者和专业人士。 使用场景及目标:① 为电动船舶充电系统的开发和优化提供技术依据;② 确保充电机与BMS/SMS之间的高效、可靠通信;③ 保障充电过程的安全性和稳定性,防止因通信故障导致的充电中断或事故。 其他说明:本标准由中国航海学会发布,适用于电动船舶连接到直流电网时的充电通信,为电动船舶行业的标准化发展提供了重要支持。标准中还包含了详细的故障诊断代码和报文格式,帮助技术人员快速定位和解决问题。

    vue 基础语法使用心得

    vue 基础语法使用心得

    根据“意见”创新银发经济新模式.pptx

    根据“意见”创新银发经济新模式.pptx

    机械故障诊断中盲反卷积与周期估计的MATLAB实现及应用

    内容概要:本文详细介绍了用于机械故障诊断的盲反卷积方法及其周期估计技术。首先探讨了利用自相关函数和包络谐波乘积谱(EHPS)进行周期估计的方法,提供了具体的MATLAB代码实现。接着阐述了如何将这两种方法集成到盲反卷积框架(如MCKD和CYCBD)中,形成迭代优化的解决方案。文中通过多个实际案例展示了这些方法的有效性和优越性,尤其是在转速波动较大情况下,能够显著提高故障识别率并减少计算时间。 适合人群:从事机械设备状态监测与故障诊断的研究人员和技术人员,尤其是有一定MATLAB编程基础的工程师。 使用场景及目标:适用于各种旋转机械设备(如风力发电机、压缩机、齿轮箱等)的状态监测和故障诊断。主要目标是在缺乏精确转速信息的情况下,通过盲反卷积技术和周期估计方法,从复杂背景噪声中提取出有用的故障特征信号,从而实现高效精准的故障检测。 其他说明:文中不仅提供了详细的理论解释和技术实现步骤,还包括了许多实用的经验技巧,如参数选择、算法优化等方面的内容。此外,作者还强调了不同方法之间的互补性和组合使用的必要性,为读者提供了一个完整的解决方案视角。

    腰髋疼痛医案解析与经典学习.pptx

    腰髋疼痛医案解析与经典学习.pptx

    scipy-0.12.0.tar.gz

    该资源为scipy-0.12.0.tar.gz,欢迎下载使用哦!

    基于Python的二手车爬虫数据可视化分析设计(毕业设计源码)

    用Python开发的爬取二手车网站数据及其分析的程序,爬取的时候采用selenium驱动google浏览器进行数据的抓取,抓取的网页内容传入lxml模块的etree对象HTML方法通过xpath解析DOM树,不过二手车的关键数据比如二手车价格,汽车表显里程数字采用了字体文件加密。据的展示采用pyecharts,它是一个用于生成 Echarts 图表的类库。爬取的数据插入mysql数据库和分析数据读取mysql数据库表都是通过pymysql模块操作。

    机器学习(预测模型):一个包含职员考试结果的数据集

    “Clerk Exam result”数据集是关于职员考试结果的集合,它为研究职员招聘与选拔提供了丰富的数据资源。该数据集可能包含了众多考生的基本信息,如姓名、性别、年龄、学历等,这些信息有助于分析不同背景考生的考试表现差异。考试成绩是数据集的核心部分,它可能涵盖了笔试、面试等多个环节的分数,通过这些分数可以直观地看出考生在专业知识、综合能力等方面的掌握程度。此外,数据集还可能标注了考生是否通过考试,这为研究考试的选拔标准和通过率提供了依据。 从数据的来源来看,它可能是由某个或多个组织在进行职员招聘考试后整理而成,具有一定的权威性和实用性。通过对该数据集的分析,可以发现考试过程中存在的问题,比如某些题目的难度是否过高或过低,以及不同地区、不同岗位的考试难度是否均衡等。同时,它也能为后续的招聘考试提供参考,帮助优化考试流程和内容,提高招聘的科学性和有效性。 然而,需要注意的是,此类数据集可能涉及考生的隐私信息,因此在使用时必须严格遵守相关法律法规,确保数据的安全和合法使用。同时,由于考试内容和标准可能会随着时间、地区和岗位的不同而有所变化,因此在分析数据时也需要考虑到这些因素,避免得出片面或不准确的结论。

    基于Matlab/Simulink的5MW海上永磁直驱风电系统与1200V并网控制策略研究

    内容概要:本文详细介绍了基于Matlab/Simulink平台的5MW海上永磁直驱风电系统及其1200V并网应用。文章首先阐述了系统的整体架构,包括机侧变流器的矢量控制和网侧变流器的直流电压外环+电网电压定向控制。特别强调了滑动平均滤波在功率分配中的应用,以及混合储能系统(超级电容和锂电池)的设计与优化。文中还讨论了关键参数的选择依据,如PI参数整定、PLL模块参数设置等,并展示了仿真过程中遇到的问题及解决方案。此外,文章分享了风速数据处理方法、故障穿越性能测试结果以及模型的实际应用情况。 适合人群:从事风电系统设计、控制工程、电力电子领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解海上风电系统控制策略的研究人员和技术人员,旨在提高对直驱永磁风电系统的理解和掌握,特别是在复杂工况下的稳定性和效率优化方面。 其他说明:文章提供了详细的代码片段和仿真结果,便于读者复现实验并进行进一步研究。同时,作者提到了一些实用的经验和技巧,有助于解决实际项目中可能遇到的技术难题。

    使用 workerMan 搭建一个简单的聊天室 本项目,实现了聊天室的基础功能,目的就是演示 workerMan 的使用

    使用 workerMan 搭建一个简单的聊天室 本项目,实现了聊天室的基础功能,目的就是演示 workerMan 的使用

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip 该项目是用脚本实现部分视频网站视频内容的自动化下载、剪辑以及上传,其中界面是用PyQT做的。 使用的浏览器驱动是undetected_chromedriver,可以跳过tiktok的机器人检查 使用的浏览器是91,版本:Google_Chrome_(64bit)_v91.0.4472.77 【功能】 自动从各种视频网站下载视频 支持视频剪辑和合集制作 支持自动上传视频到视频网站 技术栈 Python PyQT undetected_chromedriver

    微电网多目标优化调度模型与改进粒子群算法的应用研究

    内容概要:本文探讨了微电网多目标优化调度的重要性和挑战,提出了一种创新的多目标优化调度模型,该模型综合考虑了微电网系统的运行成本和环境保护成本。文中详细介绍了模型的成本计算方法,并阐述了改进粒子群算法(PSO)在求解该模型中的应用。改进后的PSO算法通过非线性递减的惯性权重和引入柯西变异因子,提高了求解效率和准确性。仿真结果显示,该模型和算法不仅降低了用户的用电成本,还显著减少了环境污染,证明了其优越性能。 适合人群:对微电网优化调度感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于微电网系统的优化调度,旨在降低成本、提高经济效益的同时减少环境污染。目标是在满足电力供应的前提下,实现经济和环境效益的最大化。 其他说明:尽管改进的粒子群算法表现优异,但在处理极端天气引起的可再生能源波动方面仍存在挑战。未来的研究可以进一步整合天气预报数据,增强算法的鲁棒性。

Global site tag (gtag.js) - Google Analytics