前端开发模式的迭代

2023-11-13

前端开发模式的迭代
前端开发给人的印象一直是变化太快,不断出现新的框架、库、开发模式,这些开发模式有什么不同,为什么要不断迭代,本文将分享几种常见的前端开发模式,讲解前端开发模式的演变过程。

传统开发模式
前端是 Web 应用的组成部分,前端开发模式的设计与 Web 应用的系统架构紧密相关,一个典型的 Web 应用系统包括下面几个部分:
Application Server 负责提供动态内容,浏览器发起请求后,由 Application Server 返回 HTML 文档或 JSON 数据,浏览器解析到 HTML 内的 script、link、img 等资源标签时,会发起资源文件的请求,静态资源 URL 通常会加上专门的域名解析到静态资源 Server,对于小型 Web 系统,Application Server 和静态资源 Server 会由同一个 Web Server 来承载。

动态 HTML 衍生出了两种传统的前端开发模式:
• HTML 混合在 Server 端程序代码中
• 通过 Server 端模板引擎生成 HTML

HTML 混合在 Server 端程序代码中
这种模式下的协作方式通常是由前端工程师开发好静态页面,再交给后端工程师『套页面』,最后产出一个包含 Server 端程序代码和 HTML 的代码文件,浏览器请求时由 Server 端程序执行代码文件,获取数据、拼接 HTML 片段生成完整的 HTML 文档。

这种协作方式弊端是:
• 效率低,前后端代码混合在一块,UI 上的改动经常需要前后端工程师共同完成。
• 容易出错,后端工程师不写 HTML,却需要把完整的 HTML 折成很多 HTML 片段,再插入到程序逻辑中,拼完后执行出来经常发现与静态页面不一样,然后找前端工程师定位问题,看看哪里拼错了。

通过 Server 端模板引擎生成 HTML
模板引擎的出现为前后端提供了更好的协作方式,它是一个运行在 Server 端应用程序中的组件,能清晰的将前端代码与 Server 端程序代码分离。

模板引擎的使用方式
以基于 PHP 的 Smarty 模板引擎为例,安装 Smarty 后,编辑 PHP 文件:
创建模板:
调用 assign 方法向模板中传递变量/对象,调用 display 方法来显示模板,生成 HTML。assign 和 display 确定了前后端的衔接方式:约定一份模板变量、一个模板文件路径。
基于 Server 端模板引擎的组件化方案
模板引擎在 Web 应用架构里分离了 UI 界面和业务逻辑,接下来需要考虑的就是前端开发内的分治手段,怎么把一个系统拆分成更小的单元,便于开发和维护。

前端开发最为有效的分治手段就是组件化开发,把一个大的系统自顶向下拆分下若干组件,最后按某种方式组装起来,成为一个整体,完成系统所要求的功能。

这里就涉及两个东西:拆分和组装,拆分衍变为开发阶段的组件化规范,组装衍变为运行阶段的组件化框架。

前端程序包含三种语言:HTML、CSS、JavaScript,前端组件可以由这三种开发资源组成,但前端语言和浏览器并未提供一个组合三种开发资源的组件化方案,所以前端领域内的组件化方案层出不穷,基于 Server 端模板引擎的组件化方案,比较有代表性的就属百度的 FIS-PLUS。

FIS-PLUS 提供给开发者的内容包括三部分:
• 目录规范:开发阶段怎么拆分组件。
• 前后端框架:运行阶段怎么组装组件。
• 构建工具:连接开发规范与部署规范。

目录规范
FIS-PLUS 推荐的目录结构如下:
目录规范实则是对资源的分类概念,上面的目录规范将整个站点的资源划分为:模块(module)、页面&

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端开发模式的迭代 的相关文章

  • 谷歌图片搜索API

    我有一个网站 用户可以在其中提交图片 我想用这些图片自动在 Google 上进行搜索 以尽量减少图片被从其他网站盗用的可能性 我知道 Firefox 扩展 但这需要我右键单击每张图片并等待结果出现 我想自动化这个 我一直在寻找 API 但
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • Drupal:需要上传文件吗?

    由于某种原因 当我尝试要求上传文件时 我的表单中断了 这是它的代码 form id upload form form form id array type gt fieldset description gt t This is a uti
  • 将 UTC 日期转换为 PHP 本地时间

    我使用以下方法将 UTC 日期存储到数据库中 utc gmdate M d Y h i s A 然后我想将保存的 UTC 日期转换为客户端的本地时间 我怎样才能做到这一点 Thanks 如果客户端指的是浏览器 那么您首先需要从浏览器将时区名
  • PHP:调用另一个类的方法

    我仍在学习 OOP 所以这甚至可能是不可能的 尽管如果是这样我会感到惊讶 我需要一些帮助来调用另一个类方法 例如在ClassA I有这个方法 function getName return this gt name 现在从ClassB 不同
  • 更改数组键而不更改顺序

    You can 更改 数组元素的键 https stackoverflow com questions 240660 in php how do you change the key of an array element只需设置新密钥并删
  • 无法发送任何电子邮件

    我不断收到错误消息 warning mail a href function mail function mail a Failed to connect to mailserver at quot localhost quot port
  • WooCommerce 中的分页

    我使用这个短代码在页面上显示产品的类别 但是当我们使用它时 它不会显示分页 因为我们的类别中有很多产品 我们使用以下代码 product category category snowpeak per page 12 columns 4 or
  • HTML 实体到 PHP 中的普通字符串

    我有一个 PHP 中包含 HTML 实体的字符串 在 html 源中我可以看到 html 实体 但在输出中我的字符串没有 html 实体 like HTML 源代码 a href google com Me nbsp You a 我该如何更
  • 如何知道 PHP require_once() 语句中使用的正确路径

    正如许多人一样 我在 Web 应用程序的根目录中有一个 config php 文件 我想将其包含在几乎所有其他 php 文件中 所以他们中的大多数都有这样的一行 require once config php 或有时 require onc
  • 通过 HTML 将复杂变量传递给 javascript 的正确方法

    我试图摆脱使用 PHP 的 htmlentities 但我在这里停止了 但后来我想 我不做替换和检查特殊字符 而是只 JSON 整个对象 这提供了一个非常不受欢迎的结果 其中包含大量双引号 那么我应该怎么做呢 我应该为每个图像分配一个数字唯
  • PHP:从字符串中修剪子字符串的最佳方法

    想要处理一组字符串 并修剪一些结尾 myEnding 从最后每个字符串的如果存在的话 最简单的方法是什么 我知道使用正则表达式一切皆有可能 但这似乎是一项简单的任务 我想知道是否存在一个简单的工具来实现这一点 Thanks Gidi 我选择
  • 当我刷新页面时,错误显示:“无法对表达式的结果使用 isset()(您可以使用“null!==表达式”代替)”

    有人可以帮助我解决这个问题 该问题指出 Fatal error Cannot use isset on the result of an expression you can not use isset on the result of a
  • 无需源代码即可部署网站

    我用php开发了网站 我想在没有源代码的情况下部署它 用php可以吗 我可以将网站代码转换为某种中间形式然后进行部署吗 您可以使用 Zend Guard 来编码您的代码 这样它就无法被逆向工程 http www zend com en pr
  • 在 PHP 中设置 X-Frame-Options

    如何在我的 PHP 代码中设置 X Frame Options 以便它出现在我的服务器的所有网页中 基本上 我试图避免 iframe 加载我的网络应用程序 在您的 php 文件中使用以下内容 该文件将响应输出到客户端 header X Fr
  • 通过 PHP 脚本重新启动 Nginx

    我目前正在努力使我的 WordPress 插件与 nginx 兼容 该插件需要访问 conf文件在wp content uploads目录 以便它可以添加所需的规则 目前 它更新了 htaccess文件位于同一目录中 更改立即生效 无需干预
  • 两边带有感叹号的正则表达式 ('!\d!')

    我见过正则表达式 d PHP 内部preg match功能 这到底是什么 来自PHP PCRE 文档 http php net manual en regexp reference delimiters php 使用 PCRE 函数时 要求
  • 如何使用 PHP 解释 HTML5 输入日期值

    我需要让用户选择一个日期 最好采用 dd mm yy 格式 我决定尝试新的 HTML5 输入日期类型 但是我不知道如何解释它在服务器端给出的值 我得到的值是 yyyy mm dd 我怎样才能做到这一点 如果用户使用不支持它的旧版浏览器怎么办
  • 我如何加入 Eloquent:关系?

    我的查询是这样的
  • 从路径中删除不必要的斜杠

    path home to my site 我正在尝试删除不必要的正斜杠 从上面的路径 我正在努力得到这个结果 home to my site 我失败了str replace 因为我不知道斜线的数量 优雅的解决方案 With preg rep

随机推荐

  • 动态规划经典例题-最长公共子序列-python

    最长公共子序列 问题描述 题解 以问题中为例 A helloworld B loop res i j 表示 截止到B的第i个字符和截止到A的第j个字符的最长公共子序列 例如 res 2 5 2表示第2行第5列 也就是lo和hello的最长公
  • centos7 安装 bugfree3

    1 安装apache yum install httpd 2 安装mysql wget i c http dev mysql com get mysql57 community release el7 10 noarch rpm yum y
  • set的特点

    set不允许元素重复且无序 常用实现有HashSet LinkedHashSet和TreeSet HashSet通过HashMap实现 HashMap的key即HashSet存储的元素 所有key都使用相同的Value 一个名为PRESNT
  • 6. Modules

    6 Modules 如果你退出 Python 解释器并重新进入 你做的任何定义 变量和方法 都会丢失 因此 如果你想要编写一些更大的程序 最好使用文本编辑器先编写好 然后运行这个文件 这就是所谓的创建 脚本 随着你的程序变得越来越长 你可能
  • C语言--学生管理系统--(完整代码)

    本系统分成了三个文件 main c student c student h 功能 实现对班级成员的增加 删除 修改 遍历 根据成绩排序 增加 会检查 现在班级已有的人数 班级是否已满 没有学号重复检测 删除 根据学号查询 gt 删除 会判断
  • 【Java开发环境配置】1-JDK安装教程&环境变量配置(21)

    一 JDK概念 JDK 是Java开发工具包 Java Development Kit 的缩写 它是一种用于构建在 Java 平台上发布的应用程序 applet 和组件的开发环境 其中包括了Java编译器 JVM 大量的Java工具以及Ja
  • stata豪斯曼检验报错

    xsmle gdp gt cz gdzc ersan ur model sdm wmat Wzhusj hausman nolog Warning All regressors will be spatially lagged 在使用xsm
  • 转载:switch/case语句中,每个case都要加花括号

    前言 多写代码 才能发现问题 即使现成的代码 手打一遍也有收获 这不遇到一个很无语的问题 问题及原因 解决方法见以下转载内容 原创者 ChirlChen 博客地址 https blog csdn net qqmindyourwill art
  • 网络编程之网络丢包故障如何定位?如何解决?

    引言 本期分享一个比较常见的网络问题 丢包 例如我们去ping一个网站 如果能ping通 且网站返回信息全面 则说明与网站服务器的通信是畅通的 如果ping不通 或者网站返回的信息不全等 则很可能是数据被丢包了 类似情况想必大家都不陌生 针
  • 3分钟搞懂:JavaScript 和 ECMAScript

    JavaScript 和 ECMAScript ECMAScript 是 JavaScript 语言的国际标准 JavaScript 是 ECMAScript 的一种实现 Adobe ActionScript 和 JScript 同样实现了
  • 基于Bochs安装GeekOs

    开发环境介绍 1 Ubuntu 16 04 2 boch2 6 11 下载地址 http sourceforge net projects bochs files bochs 2 6 11 3 nasm 2 08 01 下载地址 http
  • CommonJS,ES6 Module以及webpack模块打包原理

    CommonJS ES6 Module以及webpack模块打包原理 模块化历程 CommonJS 模块 导出 导入 ES6 Module 模块 导出 命名导出 默认导出 导入 导入命名导出的模块 导入默认导出的模块 CommonJS 与
  • 夯实C++基础:1.C++生命周期和编程范式、预处理、编译相关

    一直告诉自己要保持学习 但真的工作之后 反而不知道从哪里开始学起 就这么拖着光有想法没有行动 除了加班没有那么晚刷刷题之外 就从看课有人带着学开始夯实基础吧 反正学啥都比不学好 之后可以看设计模式 网络编程 STL深入学一学 也可以看书ef
  • MySQL的安装教程

    MySQL的安装教程 今天来唠一唠MySQL的事 首先是mysql的一些知识点 接下来我们先说MySQL的安装教程 1 安装程序安装 首先 去数据库的官网http www mysql com下载MySQL 一般为 msi文件 下载好之后双击
  • Matlab:从csv文件中读取某一列的数据

    第一种 M CSVREAD FILENAME 直接读取csv文件的数据 并返回给M 第二种 M CSVREAD FILENAME R C 读取csv文件中从第R 1行 第C 1列的数据开始的数据 这对带有头文件说明的csv文件 如示波器等采
  • 华为OD面经(给了口头offer祈祷流程审批能过ε=(´ο`*)))唉)

    1 上来一到算法题相对简单 2 介绍一下自己的项目 问了java的jvm相关如jvm在遇到线程挂掉时的日志操作啥的有做过吗 spring的好处原理 springboot的好处原理 微服务的锁 日志相关 垃圾回收算法 redis的原理 has
  • c#+npgsql采坑记录

    c npgsql 数据库作业采坑记录 做数据库作业时踩了些坑 做个记录 1 pgsql的主键int的模糊查询 pgsql中以int作为主键 比如student以sid作为主键 当sid为int时 模糊查询会使索引失效 而mysql没有这个问
  • Vue的大坑 input手动赋值后无法修改问题

    当获取数据之后 手动赋值给input 会出现渲染成功 能读取数据 但是无法修改情况 代码如下 根据ID查询返回订单信息 async editOrdersAddress orderId const data res await this ht
  • 力学应用计算机实例,PART 5 相图计算机计算 相图计算与 及扩散动力学模拟及其应用实例.ppt...

    PART 5 相图计算机计算 相图计算与 及扩散动力学模拟及其应用实例 ppt 亚点阵模型假设 每一亚点阵内的原子只与其他亚点阵内的原子相邻 这一点可以通过亚点阵的选取来保证 最近邻相互作用是常数 各亚点阵之间的相互作用忽略不计 过剩自由能
  • 前端开发模式的迭代

    前端开发模式的迭代 前端开发给人的印象一直是变化太快 不断出现新的框架 库 开发模式 这些开发模式有什么不同 为什么要不断迭代 本文将分享几种常见的前端开发模式 讲解前端开发模式的演变过程 传统开发模式 前端是 Web 应用的组成部分 前端