当前位置: 首页 > article >正文

徒手撸极简前后端分离Demo!吃透原生JS动态渲染底层

之前一直觉得前后端分离是个特别高大上的工程化概念总以为得学一堆框架、接口规范、部署流程才能上手。直到昨天我没用Vue、没用React纯靠原生JSHTMLCSSjson-server手写了一套最朴素的前后端分离小案例瞬间把底层逻辑彻底打通了。完整文章地址https://juejin.cn/post/7642981046925918208没有花里胡哨的封装所有流程都是最原始的写法反而让我搞懂了框架背后到底在帮我们做什么。今天把我踩坑、试错、顿悟的全过程分享出来。先说说我想解决的问题以前写前端页面所有数据都是写死在HTML里的。展示一个用户表格就得手动写一堆tr新增、修改、删除数据都要改页面代码特别笨拙完全不符合实际开发逻辑。我就想实现一个最基础的效果数据单独存、前端动态拉取、自动渲染页面真正做到数据和页面结构分离。不想搭复杂的 Java、Python 后端偶然发现json-server这个神器零代码就能搭本地API接口新手练手前后端分离再合适不过。5分钟搭建极简模拟后端说实话以前总觉得后端搭建很麻烦这次实操完才知道本地练手的后端居然这么简单。全程就三个文件分工超级清晰这也是我第一次真切体会到模块化拆分的意义。1. 初始化项目配置新建一个 backend 文件夹执行npm init -y初始化项目生成package.json。这个文件就是项目的“身份证”记录所有依赖和启动脚本。然后安装核心依赖npm i json-server最后配置启动命令完整配置如下{ name: backend, version: 1.0.0, description: , main: index.js, scripts: { dev:json-server --watch db.json // 启动本地模拟接口服务 }, keywords: [], author: , license: ISC, type: commonjs, dependencies: { json-server: ^1.0.0-beta.15 } }2. 搭建模拟数据库新建db.json直接写入模拟用户数据json-server 会自动把这个文件当成数据库对外提供接口。{ users:[ { id: 1, name: 张三, hometown: 杭州, nikename: 小三 }, { id: 2, name: 李四, hometown: 南昌, nikename: 小四 }, { id: 3, name: 王五, hometown: 上海, nikename: 小五 } ] }终端执行npm run dev直接启动服务访问http://localhost:3000/users就能拿到所有用户数据。一行后端代码没写接口直接可用太适合新手练手了。用Bootstrap重构页面改掉Div满天飞的坏习惯之前写页面我清一色全用 div堆得乱七八糟自己回头看都看不懂结构。这次刻意用了 HTML5 语义化标签 Bootstrap 栅格布局彻底改掉了烂习惯。语义化标签的真香之处这次页面我用了header、main、aside、footer表格也严格区分thead和tbody。以前觉得这些标签没用和 div 没区别后来才懂大厂为啥特别看重语义化结构一目了然哪个是头部、主体、侧边栏清晰分明搜索引擎抓取页面更友好利于SEO表格拆分表头和表体是规范开发的基础后续DOM操作更精准Bootstrap栅格布局快速适配页面手动写CSS居中、自适应布局太麻烦Bootstrap的栅格系统直接开箱即用。我用了container做页面居中留白row定义行col-md-6 col-md-offset-3实现表格居中展示几行类名搞定布局不用写一行自定义CSS。完整HTML页面代码!DOCTYPE html html langen head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title动态数据表格/title !-- 引入Bootstrap样式快速实现页面布局 -- link hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css relstylesheet /head body header111/header !-- 核心主体区域 -- main classcontainer aside333/aside !-- 栅格布局居中6列表格 -- div classrow col-md-6 col-md-offset-3 table classtable table-striped iduser-table thead classcontainer tr tdID/td td姓名/td td家乡/td td昵称/td /tr /thead tbody !-- JS动态渲染数据这里留白 -- /tbody /table /div aside444/aside /main footer222/footer !-- 引入自定义JS逻辑 -- script src./common.js/script /body /html踩坑半小时终于弄懂JS异步执行逻辑这是本次学习最大的卡点也是新手最容易犯的错我第一版代码写完控制台能打印出接口数据但页面空白、无任何渲染内容当时直接懵了。错误写法千万别这么写我当时把数据遍历渲染的代码写在了 fetch 请求的外面let users[]; // 异步请求数据 fetch(http://localhost:3000/users) .then(data data.json()) .then(data { console.log(data); // 控制台能正常打印数据 usersdata; }) // 同步遍历渲染坑死我了 const oBody document.querySelector(.table tbody); for(let user of users){ oBody.innerHTML tr td${user.id}/td td${user.name}/td td${user.nikename}/td td${user.hometown}/td /tr }我百思不得其解数据明明拿到了为啥渲染不出来后来翻了执行逻辑才恍然大悟JS是单线程同步代码优先执行异步代码后置执行。页面加载后会先执行外面的 for 循环这时候 fetch 接口还在请求中users还是空数组。等接口请求成功、赋值完数据页面早就渲染结束了。执行步骤按时间顺序定义空数组users []发起fetch请求 →丢到异步队列不等待继续走后面代码立刻执行同步的 for 循环→users是空的页面啥也不渲染过了一会儿网络请求成功 → 执行.then→ 给users赋值但渲染代码早就跑完了页面永远不会更新结果控制台能打印数据赋值成功了页面无任何数据渲染时数据还没回来正确写法所有依赖接口数据的操作放进回调let users[]; const oBody document.querySelector(.table tbody); // 异步获取数据 动态渲染全部放在回调内部 fetch(http://localhost:3000/users) .then(data data.json()) .then(data { console.log(data); usersdata; // 数据回来后再执行DOM渲染 for(let user of users){ oBody.innerHTML tr td${user.id}/td td${user.name}/td td${user.nikename}/td td${user.hometown}/td /tr } })执行步骤定义变量、获取 DOM发起fetch请求 → 丢到异步队列等待网络请求……期间不执行任何代码数据成功返回→ 执行.then给users赋值 →再执行 for 循环渲染页面正常显示数据结果控制台打印数据页面正常渲染所有用户信息一句话总结第一段不等数据回来直接渲染→ 白跑一趟没数据第二段等数据回来再渲染→ 逻辑正确页面生效这就是 JavaScript 异步编程最基础、最容易踩的坑所有依赖异步数据的操作渲染 DOM、计算、判断等必须写在异步回调then/async-await里面。新手核心避坑点只要是接口请求、定时器这类异步操作后续所有依赖返回结果的逻辑必须写在异步回调里面原生DOM编程吃透框架底层原理现在的框架都帮我们封装好了DOM渲染很多人只会用框架根本不懂底层怎么实现的。这次纯原生手写我彻底搞懂了动态渲染的本质。简单说下我的通俗理解DOM 就是浏览器把所有HTML标签转换成JS内存里的一棵树状对象。我们通过querySelector精准选中页面节点再用innerHTML动态拼接HTML结构把接口数据批量插入页面。对比老式的索引for循环ES6的for...of真的太香了不用管下标、不用赋值直接遍历数组元素代码简洁可读性拉满这也是现在主流的遍历写法。最后聊聊模块化开发的感悟以前写代码所有结构、样式、逻辑全堆在一个文件里看着简洁实则一坨乱麻后续根本没法维护扩展。这次我严格做了拆分HTML只负责页面结构只管长什么样CSS/外部Bootstrap只负责页面样式只管好不好看独立JS文件只负责逻辑、数据请求、DOM渲染json文件只负责存储数据这就是最基础的模块化思想每个文件只做一件事各司其职解耦分离。所有大厂的工程化项目底层都是这个逻辑。收尾本次学习3个核心收获折腾完这个小demo比我看十篇理论文章收获都大总结三个最实用的知识点1.前后端分离的本质超简单前端专注视图渲染后端专注提供数据接口数据和页面彻底解耦这就是所有前后端项目的核心逻辑。JS异步执行是重中之重同步先行、异步后置所有依赖接口返回值的逻辑绝对不能写在异步代码外部。基础远比框架重要Vue/React只是封装了DOM操作和异步逻辑吃透原生DOM、异步机制、语义化开发才算真正懂前端。最后提一句json-server 只适合新手练手、本地调试没有权限校验、数据持久化简陋千万别用到线上正式项目。其实前端很多看似难懂的概念亲手撸一遍demo就彻底通透了。你们初学前端的时候有没有踩过JS异步、DOM渲染的坑评论区聊聊

相关文章:

徒手撸极简前后端分离Demo!吃透原生JS动态渲染底层

之前一直觉得前后端分离是个特别高大上的工程化概念,总以为得学一堆框架、接口规范、部署流程才能上手。 直到昨天我没用Vue、没用React,纯靠原生JSHTMLCSSjson-server,手写了一套最朴素的前后端分离小案例,瞬间把底层逻辑彻底打通…...

化学教学平台——数据可视化与电化学AI动画推演

化学教学平台——数据可视化与电化学AI动画推演 1 项目概述 本化学教学平台是一套完整的前端Web应用,旨在为化学教育工作者和学生提供两个核心功能模块:数据智能查询与化学性质可视化(基于ECharts和D3.js),以及反应模拟预判——基于电化学原理的AI动画推演(基于Three.j…...

终极AMD Ryzen调试工具:免费开源的硬件掌控神器

终极AMD Ryzen调试工具:免费开源的硬件掌控神器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...

利用 Taotoken 为不同业务场景动态选择最合适的大模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 为不同业务场景动态选择最合适的大模型 在构建一个集成了大模型能力的应用时,一个常见的挑战是如何为不…...

企业级多模型聚合平台选型,如何通过用量看板实现成本精细化管理

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级多模型聚合平台选型,如何通过用量看板实现成本精细化管理 当企业技术团队决定将大模型能力深度融入业务流程时&a…...

告别账单惊吓,Taotoken Token Plan 如何让成本更可控

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 告别账单惊吓,Taotoken Token Plan 如何让成本更可控 对于依赖大模型 API 进行开发的团队和个人而言,项目成…...

终极指南:如何5步免费使用Cursor Pro破解工具实现永久免费AI编程

终极指南:如何5步免费使用Cursor Pro破解工具实现永久免费AI编程 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reache…...

m4s-converter技术解析:跨平台B站缓存视频无损转换方案

m4s-converter技术解析:跨平台B站缓存视频无损转换方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个专业的开…...

使用Taotoken后API调用延迟与账单透明度的实际体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后API调用延迟与账单透明度的实际体验 1. 引言 对于需要调用多种大模型API的开发者而言,统一接入和成本管…...

免费在线去水印软件推荐(2026保姆级教程):别让水印毁了你的好素材

你是不是也遇到过这种抓狂瞬间?刷到一段绝美空镜,想存下来做壁纸却挂着硕大的水印;朋友发来一张搞笑表情包,转发前发现左下角Logo碍眼得要命;好不容易找到一张配图素材,精心裁了半天还是绕不开那行半透明的…...

本地大语言模型推理新选择:为什么llama-cpp-python成为开发者首选?

本地大语言模型推理新选择:为什么llama-cpp-python成为开发者首选? 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 在人工智能快速发展的今天,能够…...

明日方舟桌宠Ark-Pets显卡优化配置指南:3步实现流畅桌面动画

明日方舟桌宠Ark-Pets显卡优化配置指南:3步实现流畅桌面动画 【免费下载链接】Ark-Pets Arknights Desktop Pets | 明日方舟桌宠 (ArkPets) 项目地址: https://gitcode.com/gh_mirrors/ar/Ark-Pets Ark-Pets是一款基于《明日方舟》角色模型的桌面宠物软件&am…...

文档自动化下载革命:30+平台一键下载解决方案

文档自动化下载革命:30平台一键下载解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的烦…...

为什么你的ChatGPT故事没人看?揭秘3个被99%人忽略的叙事熵值指标及实时优化方案

更多请点击: https://codechina.net 第一章:为什么你的ChatGPT故事没人看?揭秘3个被99%人忽略的叙事熵值指标及实时优化方案 当一篇关于ChatGPT的实操笔记获得不到50次阅读,问题往往不在模型能力,而在人类注意力的底层…...

【限时公开】ChatGPT演讲稿写作的“三秒钩子公式”:前3秒抓住注意力,已助867位技术管理者拿下关键汇报

更多请点击: https://intelliparadigm.com 第一章:【限时公开】ChatGPT演讲稿写作的“三秒钩子公式”:前3秒抓住注意力,已助867位技术管理者拿下关键汇报 在技术汇报场景中,听众平均注意力窗口仅剩2.8秒——这是微软研…...

CSS Transforms与Filters详解:创建视觉效果的利器

CSS Transforms与Filters详解:创建视觉效果的利器 一、CSS Transforms基础 CSS Transforms允许你对元素进行旋转、缩放、倾斜和平移等变换操作。这些变换不会影响文档流,只会改变元素的视觉表现。 1.1 transform属性 transform 属性接受一个或多个变换函…...

【肾结石检测】基于matlab图像处理技术检测超声图像中的肾结石【含Matlab源码 15553期】含报告

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

恒玄bes2600WM+DSP蓝牙耳机项目

bes2600WMDSP蓝牙耳机项目...

【读书笔记】《更富有、更睿智、更快乐》

《更富有、更睿智、更快乐》精读笔记作者威廉格林历时25年,贴身采访全球40余位顶级投资大师,包括芒格、巴菲特等人,总结出一套投资与人生的双赢哲学。核心命题顶级投资者本质上是一类实践哲学家——他们不谈空理论,只追求世俗智慧…...

AI视频生成工具“免费额度”背后的算法剥削:我们逆向拆解11家平台的Token计费黑箱(含实测换算表)

更多请点击: https://codechina.net 第一章:AI视频生成工具收费价格对比 当前主流AI视频生成工具在定价策略上呈现显著差异,涵盖免费试用、按分钟计费、订阅制及企业定制等多种模式。用户在选型时需综合考量生成质量、输出分辨率、商用授权范…...

ppt模板_0041_十一国庆主题3

PPT模板分享...

3分钟掌握novel-downloader:打造你的永久小说图书馆终极指南

3分钟掌握novel-downloader:打造你的永久小说图书馆终极指南 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾经因为小说网站突然关闭、章节被删除或VIP内容无法离…...

艾尔登法环存档迁移终极指南:3步安全转移你的游戏角色

艾尔登法环存档迁移终极指南:3步安全转移你的游戏角色 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier EldenRingSaveCopier 是一款专为《艾尔登法环》玩家设计的存档角色迁移工具,能够…...

深入实践LIWC文本分析:从心理语言学工具到企业级应用的全栈指南

深入实践LIWC文本分析:从心理语言学工具到企业级应用的全栈指南 【免费下载链接】liwc-python Linguistic Inquiry and Word Count (LIWC) analyzer 项目地址: https://gitcode.com/gh_mirrors/li/liwc-python 在当今数据驱动的商业环境中,文本分…...

5分钟免费上手:AI换脸终极指南,用roop-unleashed创作专业级视频

5分钟免费上手:AI换脸终极指南,用roop-unleashed创作专业级视频 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要零基础制作电影…...

基于LIME可解释性AI的宇宙学模型分类:从fσ8数据到物理洞察

1. 项目概述与核心价值在宇宙学这个探索宇宙终极奥秘的领域,我们常常面临一个核心挑战:如何从海量、复杂且充满噪声的观测数据中,提取出能够区分不同物理理论的“指纹”。大尺度结构(LSS)的观测,特别是星系…...

机器学习负结果的价值:打破发表偏见,提升研究效率与可复现性

1. 项目概述:为何要正视机器学习中的“负结果”?在机器学习圈子里混了十几年,从学生时代跑第一个MNIST分类器,到后来在工业界折腾各种落地项目,我见过太多“成功”的论文,也亲手埋葬过更多“失败”的实验。…...

高校科研项目如何借助Taotoken管理多模型API调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 高校科研项目如何借助Taotoken管理多模型API调用 在高校的实验室或科研团队中,进行人工智能相关的探索时,常…...

量子机器学习实战:性能瓶颈与安全挑战深度剖析

1. 量子机器学习实战:从理论到现实的性能与安全鸿沟最近几年,量子计算的热度居高不下,几乎每隔一阵子就能看到“量子霸权”或“量子优势”的新进展。作为一名长期关注前沿技术落地的从业者,我自然也对量子机器学习(QML…...

机器学习驱动热光伏电池设计:从材料筛选到器件优化

1. 项目概述:当机器学习遇见热光伏电池设计在能源技术领域,热光伏(TPV)技术一直是一个充满魅力但又颇具挑战的方向。简单来说,它就像一个“热能收割机”,能将高温热源(比如工业废热、聚光太阳能…...