返回顶部
首页 > 资讯 > 前端开发 > html >原生JS如何进行前后端同构
  • 518
分享到

原生JS如何进行前后端同构

2024-04-02 19:04:59 518人浏览 泡泡鱼
摘要

小编给大家分享一下原生js如何进行前后端同构,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是前后端同构明确三个概念:「后端渲

小编给大家分享一下原生js如何进行前后端同构,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

什么是前后端同构

明确三个概念:「后端渲染」指传统的 ASP、Java 或 PHP 的渲染机制;「前端渲染」指使用 JS 来渲染页面大部分内容,代表是现在流行的 SPA 单页面应用;「同构渲染」指前后端共用 JS,首次渲染时使用 node.js 来直出 html。一般来说同构渲染是介于前后端中的共有部分。

感觉前端的确是折腾,之前还在流行前后端分离,现在怎么又要做前后端同构了?

原因是现在流行的SPA前端单页面应用比较沉重,首次访问需要加载文件较多,第一次加载过慢,用户需要等待前端进行渲染页面。而且不利于SEO及缓存,并且有一定的开发门槛。

前后端同构通过复用模板和JS文件,让一份代码可以同时跑在服务器和浏览器,首次渲染使用nodejs渲染页面,之后使用SPA路由跳转。可以有效减少用户首次访问的等待时间,并且对SEO比较友好,也便于缓存。

项目简介

本前后端同构项目主要分为两个部分,一个是基于koa2的渲染服务器,另一个是基于原生JS和zepto的前端SPA。

项目的特点是不使用VueReact框架,门槛低,开发速度快,便于上手,比较轻巧,核心的router部分只有一百行左右的代码。适用于页面交互较少,变化不频繁的场景下,可以有效的提升性能和加载速度。

前端部分

前端部分的核心是路由部分,具体实现可以基于history api或是hash,网上有很多实现,这次主要讲下架构
前端部分采用mvc分层结构。

router层做的主要是创建路由示例,调用路由的get方法,给特定页面绑定来自control层的函数。
形式如:

import control from '../control'

//路由的构造函数支持传入渲染函数,路由的全局名称,路由跳转前调用的钩子
router = new Router(render,'ROUTER',beforeFn)

router.get('/page/a', control.pageA')

control层主要做的是加载跟后端共有的渲染模板和渲染数据,渲染出页面后运行页面函数

形式如:

let control = {
 pageA(req,res) {
  //webpack的动态加载,代码分割功能
  import('script/pageA').then(module=> {
  // 检测该页面是否已有服务器渲染好,是的话直接运行module.default
  //否则加载模板和数据进行渲染,最后再调用页面函数
  if(this.needRender(module.default)) {
  //加载数据时访问的地址就是当前准备渲染的页面地址,只是加上了JSON=1的参数
   loadData('pageA').then(data => 
    res.render(xtpl,data,module.default))
  }
 }
}

// 捕捉WEBpack热更新,让他只进行相当于页面跳转的操作而不是刷新页面
if(module.hot) {
 module.hot.accept(['script/pageA'], () => {
  control[ROUTER.req.currentControl].call(ROUTER,null,ROUTER.res)
 })
}

view层即模板,这里使用的是xtpl模板,在服务器环境和前端环境下都支持渲染页面

页面函数的形式

页面函数要求使用es6的模块写法,配合webpack的按需加载功能

export default () => {
 window.addEventListener('scroll', fn)
//页面函数支持返回一个卸载函数,在页面离开的时候会被调用
//主要用于内存的释放,定时器的清除,事件监听的移除等等
 return function () {
  window.removeEventListener('scroll', fn)
 }
}

后端部分

使用koa2搭建的一个渲染服务器,在收到前端传来的页面请求时,会向API服务器请求数据,并识别页面请求是否带有json=1的参数,如果带有,则为前端路由跳转时的请求,直接返回数据即可,如果没有带json参数,加载跟前端共用的模板,配合数据进行渲染,发送到浏览器。

以上是“原生JS如何进行前后端同构”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网html频道!

--结束END--

本文标题: 原生JS如何进行前后端同构

本文链接: https://lsjlt.com/news/79966.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 原生JS如何进行前后端同构
    小编给大家分享一下原生JS如何进行前后端同构,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是前后端同构明确三个概念:「后端渲...
    99+
    2024-04-02
  • VSCode中如何进行前端重构
    这篇文章主要介绍“VSCode中如何进行前端重构”,在日常操作中,相信很多人在VSCode中如何进行前端重构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VSCode中如何进行前端重构”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • 40行原生js代码实现前端简易路由
    目录前言路由到底是一个什么东西实现一个 hashRouterhistoryRoutermemoryRouter最后做个总结前言 在使用Vue或者是React 的路由的时候,不是很清楚...
    99+
    2024-04-02
  • 如何利用原生JS实现图片预览加上传(前后端交互)
    目录前言效果大致如下前端代码后端代码总结前言 最近在写vue项目的时候发现了个Vant的一个upload的图片上传的组件,就好奇了一下下,于是萌生了一个自己手写一个图片上传的组件的想...
    99+
    2024-04-02
  • Vue前端如何实现与后端进行数据交互
    目录vue前端与后端数据交互安装在main.js文件引入使用启动vue和前后端连接直接上图vue前端与后端数据交互 安装 npm install axios --save 在main...
    99+
    2024-04-02
  • nodeJS+vue如何构建前后端分离
    这篇文章主要介绍nodeJS+vue如何构建前后端分离,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!准备工作:1.安装nodejs2.安装依赖包express4.x3.安装vue-c...
    99+
    2024-04-02
  • 前端如何调用后端接口进行数据交互(极简)
    前端调用后端接口,获得数据并渲染 一、介绍 一个完善的系统,前后端交互是必不可少的,这个过程可以分成下面几步: 前端向后端发起请求后端接口接收前端的参数后,开始层层调用方法处理数据后端将最终数据返回给...
    99+
    2023-09-07
    前端 java javascript
  • 如何进行Web中前后端模板引擎的使用
    这期内容当中小编将会给大家带来有关如何进行Web中前后端模板引擎的使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言这篇文章本来不打算写的,实话说楼主对前端模板的认识...
    99+
    2024-04-02
  • 前端JS框架CryptoJS如何与后台PHP程序代码进行AES相互加解密
    我们在开发考勤系统的时修改,碰到这样一个需求,后台返回的数据需要加密返回给前端,前端收到返回数据后进行解密再显示,为解决这个问题,需要写一个前后端都能相互加密解密的方法,首先我们就想到了CryptoJ...
    99+
    2023-10-25
    php 前端 javascript
  • 如何实现nginx前后端同域名配置
    小编给大家分享一下如何实现nginx前后端同域名配置,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!nginx前后端同域名配置的方法实现,具体如下:upstream...
    99+
    2023-06-14
  • python框架django中如何结合vue进行前后端分离
    python框架django中如何结合vue进行前后端分离,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一:创建django项目django-admin startp...
    99+
    2023-06-26
  • 一文详解如何在前端使用JS进行分类汇总
    目录前言提出问题原数据(按部门再按业务)的轻维表呈现按业务再按部门分组的轻维表呈现按业务按年统计的轻维表呈现展平多级数据晋级:如果想用递归该怎么处理?分类及分类汇总按业务再按部门分组...
    99+
    2023-05-14
    js 分类 javascript分类 js分类汇总
  • 如何进行Web前端性能优化
    这篇文章给大家介绍如何进行Web前端性能优化 ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Yahoo! 的 Exceptional Performance team 在 Web 前端方面作出了卓越的贡献。广为人知的优...
    99+
    2023-06-08
  • 如何进行H5前端性能测试
    如何进行H5前端性能测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。说到H5测试,对于做WEB测试的同学来说再熟悉不过了,它包括页H5功能测试,前端性能测试,...
    99+
    2023-06-05
  • Vue CLI项目如何使用axios模块进行前后端交互
    这篇文章将为大家详细讲解有关Vue CLI项目如何使用axios模块进行前后端交互,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Vue-CLI项目-axios前后端交互一...
    99+
    2024-04-02
  • 前端如何调用后端接口进行数据交互详解(axios和SpringBoot)
    目录一、介绍二、项目结构三、代码编写四、运用总结前端调用后端接口,获得数据并渲染 一、介绍 一个完善的系统,前后端交互是必不可少的,这个过程可以分成下面几步: 前端向后端发起请求后端...
    99+
    2023-03-19
    前端和后端怎么进行数据交互的 前端如何调用后端数据 前端与后端接口的交互案例
  • 软件架构之如何理解前后端分离与前端模块化
    这篇文章主要讲解了“软件架构之如何理解前后端分离与前端模块化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“软件架构之如何理解前后端分离与前端模块化”吧!前后...
    99+
    2024-04-02
  • 如何进行Java前后端分离的在线点餐系统实现
    这篇文章跟大家分析一下“如何进行Java前后端分离的在线点餐系统实现”。内容详细易懂,对“如何进行Java前后端分离的在线点餐系统实现”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习...
    99+
    2023-06-28
  • 干货|如何生成和展示二维码(前后端)
    前端、后端都可以生成二维码,轮子很多,今天分别来分享一下前后端如何使用轮子生成二维码的方法。 后端:选择一款合适的二维码生成库,如zxing、qrcode等,并在后端代码中引入该库。编写代码,根据业...
    99+
    2023-09-17
    前端 java
  • 如何进行Linux任务的前后台管理
    本篇文章给大家分享的是有关如何进行Linux任务的前后台管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们知道,Linux 是一个多任务的操作系统,也就是说,在同一时间,系...
    99+
    2023-06-05
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作