架构

前后端分离的一点Tips

在前后端分离的架构中,前端页面主要通过 JavaScript 动态渲染。这种模式与传统的服务端渲染(如 JSP、Thymeleaf)有本质区别,核心流程是:

  1. 后端专注 API:只提供 RESTful API 接口,返回 JSON/XML 数据,不负责页面渲染。
  2. 前端独立运行:通过 AJAX、Fetch 等方式调用后端 API,获取数据后动态生成 DOM 元素,完成页面展示。

 

一、前端渲染的核心技术


1. 原生 JavaScript

通过 document.createElement()innerHTML 等原生 API 操作 DOM。
示例

<!-- 页面结构 -->
<div id="user-list"></div>

<script>
  // 获取数据
  fetch('/api/users')
    .then(res => res.json())
    .then(users => {
      // 动态渲染
      const container = document.getElementById('user-list');
      users.forEach(user => {
        const div = document.createElement('div');
        div.innerHTML = `<p>${user.name}</p>`;
        container.appendChild(div);
      });
    });
</script>

2. 前端框架(React/Vue/Angular)

框架通过虚拟 DOM 和组件化思想,简化复杂 UI 的渲染逻辑。
示例(React)

function UserList() {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetch('/api/users')
      .then(res => res.json())
      .then(setUsers);
  }, []);

  return (
    <div>
      {users.map(user => (
        <p key={user.id}>{user.name}</p>
      ))}
    </div>
  );
}

3. 模板引擎(Handlebars/Mustache)

通过预定义模板和数据,生成 HTML 字符串。
示例(Handlebars)

<script id="user-template" type="text/x-handlebars-template">
  {{#each users}}
    <p>{{name}}</p>
  {{/each}}
</script>

<script>
  const template = Handlebars.compile($('#user-template').html());
  fetch('/api/users')
    .then(res => res.json())
    .then(data => {
      $('#user-list').html(template(data));
    });
</script>

 

二、与服务端渲染的对比


特性前端渲染(JS)服务端渲染(如 Thymeleaf)
渲染时机浏览器下载 HTML + JS → 执行 JS → 生成 DOM服务器生成完整 HTML → 浏览器直接展示
首屏加载速度较慢(需等待 JS 加载和执行)较快(直接拿到完整 HTML)
SEO 友好度差(搜索引擎爬虫可能无法获取完整内容)好(服务器返回完整 HTML)
交互体验好(页面局部更新,无刷新感)一般(每次请求可能刷新整个页面)
开发模式前后端完全分离,可独立开发前后端强耦合,依赖服务端环境

 

三、前端渲染的优化方案


1. 预渲染(Prerendering)

在构建时生成静态 HTML 文件,解决首屏加载和 SEO 问题。

2. 服务端渲染(SSR)

结合前端框架和 Node.js 服务器,在服务器端执行 JS 并生成 HTML。

  • 技术:React(Next.js)、Vue(Nuxt.js)。

3. 懒加载(Lazy Loading)

将非关键资源(如组件、图片)延迟加载,提升首屏速度。

// React 懒加载示例
const UserProfile = React.lazy(() => import('./UserProfile'));

function App() {
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <UserProfile />
    </React.Suspense>
  );
}

4. CDN 加速

通过 CDN 分发静态资源(JS、CSS),减少服务器压力。

 

五、总结


前后端分离的核心是 “后端提供数据,前端负责渲染”,JavaScript 是实现这一模式的关键技术。虽然前端渲染存在首屏加载慢、SEO 不友好等问题,但通过 SSR、预渲染等方案可以有效弥补。在实际项目中,需根据业务需求(如交互复杂度、SEO 优先级)选择合适的渲染方案。