node.js 写的 js 代码和 html 内嵌的 js 代码有什么区别?

本贴最后更新于 2091 天前,其中的信息可能已经时过境迁

nodejs 到底是干什么的只是单纯的提供 rest 请求的数据?能否指定前端标签进行类似 dom 的指定数据渲染呢 ?用 nodejs 写的后端项目如何部署,前端和 node 交互式通过 ajax 吗?node 写的 js 和前端内嵌的 js 有什么区别?假如这样的项目开发完了,java 作为后台肯定需要(jre 还有 Tomcat),html 还有 css 文件放到 Nginx 上,那其他的呢,尤其是用 node.js 写的 js 放到什么地方?

  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 88 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7551 引用 • 34367 回帖 • 198 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    对于 SEO 来说,只要能做服务端渲染 HTML 都可以。有的搜索引擎(比如 Google)对于需要执行 JS 才能得到渲染效果的 SPA 类应用也有一定支持,我没有具体了解过,只是听说。

  • 其他回帖
  • wuhongxu 1 1 赞同

    nodejs 你完全可以和前端区分开来看,你把 nodejs 当做另外一门语言(例如 java)。这样你就好理解多了,以下我直接说明用 java 作为 nodejs 的别名,看着别扭的话,你就换成 nodejs 就行了。

    nodejs 到底是干什么的只是单纯的提供 rest 请求的数据?

    java 是一门后端语言,不仅仅可以提供 rest 服务,你可以用在任何地方,然后浏览器的编程语言仅仅只识别 js(先计较 applet,凉都凉了),所以 java 不能在浏览器上运行。你完全可以用 java 做一个 js 渲染引擎,只要你够强。

    能否指定前端标签进行类似 dom 的指定数据渲染呢 ?

    什么意思,没看懂

    前端和 node 交互式通过 ajax 吗?

    js 和 java 交互一般通过 http,因为一般情况我们接触最多的就是浏览器 <-> 服务器模式,所以是由浏览器端的 js 执行 ajax 请求服务器端的 java 数据,然而实际上还有种东西叫模板引擎,你可以通过模板引擎由服务器渲染出指定的 js 代码到浏览器端。

    node 写的 js 和前端内嵌的 js 有什么区别?

    你可以用 java 进行 js 脚本本身的预处理,特别强调一下 java 和 js 不互通,不能够直接进行语言层面的交互,例如函数调用(当然可以用中间件的形式,那也不算语言层面的交互了)。在很久很久之前,没有 nodejs 的时候,前端工程化使用的是 maven 之类的(正式 java 现在的流行的工程化工具)。js 语言本身只是脚本,例如本来的文件只是 var abc = 1;abc += abc;console.log(abc),但是你可以使用 java 写一个程序压缩代码,变成 var a = 1;a+=a;console.log(a);,使得代码更短小,前端加载的带宽压力减小,而这样一个过程需要你编写前端运行的 js,然后运行一次 java 程序来压缩它。当你需要解决前端更多的问题时,比如你想自动解决兼容性,所以你可以使用 java 编写一个兼容性处理程序,实际上就是往 js 文件里面塞入一些 js 的 polyfill 脚本,这些 js 在服务器端就只是字符串,没有任何特殊意义。只有当服务器把这个 js 发送到客户端的浏览器上的,这些代码才会生效。当你有越来越多的需求,你就需要更多的 java 程序,来帮助你自动处理这些 js 文件,让很多编写过程直接省略变成一次自动处理过程(后来越来越复杂,现在基本也叫做编译了)。所以这个问题总结就是,你的 java 可以用来做 js 代码的编译器,帮助你自动解决一些 js 代码的问题,例如压缩。

    假如这样的项目开发完了,java 作为后台肯定需要(jre 还有 Tomcat),html 还有 css 文件放到 Nginx 上,那其他的呢,尤其是用 node.js 写的 js 放到什么地方?

    java 代码本身不是计算机可识别的机器码,所以不能直接运行,需要虚拟机(这里强调一下,nodejs 需要 nodejs 环境,类似虚拟机,直接叫运行环境吧,我也不太具体的知道这里的虚拟机和运行环境有啥区别。php 语言需要 php 的运行环境一样)。java 需要 tomcat 是因为缺乏内置的 http 服务实现,现在也已经有了,tomcat/undertow/jetty 之类的都能内嵌。有了内嵌就能直接运行,不需要使用外部的 http 服务。对于 js,不需要有任何的特殊对待,直接放在能被客户端访问到的地方就行了。

    总结

    把上面的 java 替换成 nodejs,也没啥问题。只是需要提一下,nodejs 和 js 互通的问题,对于这个问题,你需要辩证的看待。毫无疑问,nodejs 和前端的 js 是同一种编程语言,但是你更应该了解,js 是脚本语言,只是字符串,真正的解释执行是由运行环境来的,比如 nodejs,比如 chrome 浏览器。但是不同点是 nodejs 是后端语言,它的全局挂载点 global 和浏览器里的 window 不是同一个东西,nodejs 提供额外的很多 api,浏览器环境并不支持,对于这些 api,你想要互通是不可能的。更别提前端不支持(最新的 chrome 支持)模块化。也就是说如果你在 js 文件里面使用类似'module.exports', export , import 之类的更是不可能在前端使用。但是编程语言是灵活的,我前面也提到了,只是文本处理而已,那么就可以使用一个编译程序来让它支持,把 module.export 之类的api替换掉,换成 window.xxx=这样,就可以在前端使用 window.xxx` 来访问了。这也就引出来了现代化的编译工具 babel,它就可以完成这项工作,webpack4.x(还是 3.x 来着),也内置了相似的实现。

    以上

  • EvilCodes
    作者

    D 哥现在有一种叫做中途岛模式 java 做后台,然后 node 作为中间层这种方式可以解决 seo 问题吗?

    1 回复
  • EvilCodes
    作者

    这个和 html 文件中的 js 是不一样的是吧

  • 查看全部回帖
EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 535 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 2 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 499 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 315 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 9 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 341 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    540 引用 • 672 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 31 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 531 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 15 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 622 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 465 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 65 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 469 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 49 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    490 引用 • 914 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7551 引用 • 34367 回帖 • 198 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 721 关注
  • 安全

    安全永远都不是一个小问题。

    200 引用 • 816 回帖