自行托管入门
本文面向完全没有 Web 编程经验的读者,从整体上解释 Web 应用各部分如何配合,将 PlayCanvas 应用或其他网页提供给用户浏览器。
Web 技术栈
通常可将 Web 应用分为服务器端、客户端和静态内容三部分。大多数应用都包含这三部分,但某些部分可能非常简单,或交由其他服务处理。
服务器端代码
用户在浏览器打开链接时,浏览器会向互联网上的服务器请求 HTML 页面。最简单的情况是,服务器将硬盘上的文本文件通过网络返回浏览器。
对于显示文本或图像的文档型网页,这已足够。但为提供交互功能,服务器通常会在收到请求后进行处理,再将结果包含在渲染出的 HTML 页面中。
例如,可以使用 PHP 在页面中显示当前日期和时间。
<html>
<head>
<title>My Homepage</title>
</head>
<body>
<h1>The date is</h1>
<?php
echo date(DATE_RFC2822);
?>
<p>Have a nice day</p>
</body>
</html>
此 PHP 代码生成如下 HTML 页面,并发送给浏览器显示。
<html>
<head>
<title>My Homepage</title>
</head>
<body>
<h1>The date is</h1>
Mon, 11 Apr 2016 06:54:14 -0400
<p>Have a nice day</p>
</body>
</html>
服务器端可使用很多语言和框架,例如 PHP、Python、Node.js 和 Ruby。最终过程类似:接收 HTML 页面请求、进行处理、返回 HTML 数据。
在 PlayCanvas 中编写的代码不会在服务器端运行,PlayCanvas 也不会为项目提供服务器端代码。
客户端代码
服务器并非唯一能编程和响应输入的位置。客户端代码在浏览器中运行;本文讨论的是浏览器执行的 JavaScript,它可以完成很多操作,最简单的例子是修改从服务器下载的 HTML 页面。
const title = document.getElementById("title");
title.innerHTML = "This is the new title";
复杂的例子则是使用 PlayCanvas 编写完整三维 WebGL 游戏。你在 PlayCanvas 中编写的 JavaScript 都属于客户端代码。
静态内容
Web 应用中的一些内容不需要动态生成,例如图像、音频、文本,以及 PlayCanvas 的三维模型和纹理。可以将其理解为读取文件,只是文件来自网络而非本地硬盘,因此速度通常较慢。静态内容由 Web 服务器提供,有时与服务器端代码位于同一机器。服务器无需执行交互逻辑,只需返回所请求的文件。
提供静态内容时,关键是尽可能加快客户端下载速度。
托管 PlayCanvas 应用
构建 PlayCanvas 应用时,你编写的是客户端 JavaScript,创建的资源属于静态内容。PlayCanvas 项目本身不包含服务器端代码。
通过 PlayCanvas 发布时,平台会提供应用 URL,返回启动客户端应用的 HTML 页面。页面加载后运行 JavaScript,再从静态内容服务器加载全部资源。
PlayCanvas 托管经过优化,目标是尽快将应用提供给全球用户。因此,最简单的部署方式是单击发布并分享 playcanv.as URL。但有些情况下仍需要自行托管。
自行托管 PlayCanvas 应用
具体步骤详见自行托管。概括而言,你需要为前述 Web 技术栈各部分提供运行条件。
服务器
标准 PlayCanvas 应用不需要服务器端代码,但仍需 Web 服务器提供静态内容,包括下载构建中的 index.html。浏览器通过请求此文件加载应用。Linux 上常见 Web 服务器有 Apache 和 Nginx,Windows 上常见的是 IIS。
缓存与压缩
如服务器一节所述,包括 index.html 在内的全部 PlayCanvas 内容,都由 Web 服务器作为静态内容提供。
要获得良好性能,必须重视 gzip 压缩和正确的缓存响应头。配置方法请查阅 Web 服务器文档。
内容类型
并非所有服务器都已配置 PlayCanvas 常用格式的内容类型,缺失配置可能导致应用加载错误。
如果浏览器提示资源未被正确提供,可能需要添加这些类型。
PlayCanvas 应用使用的内容类型如下:
| 文件类型 | 内容类型 |
|---|---|
| AAC | audio/aac |
| BASIS | application/octet-stream |
| BIN | application/octet-stream |
| DDS | image/dds |
| GLB | model/gltf-binary |
| JPEG | image/jpeg |
| JS | application/javascript |
| JSON | application/json |
| MP3 | audio/mpeg |
| MP4 | video/mp4 |
| OGG | audio/ogg |
| PNG | image/png |
| TEXT | text/plain |
| WASM | application/wasm |
| WAV | audio/x-wav |
| XML | application/xml |
客户端
客户端代码就是你为 PlayCanvas 应用编写的代码。浏览器加载 index.html 后,会启动应用并运行这些代码。