构建配置
- 代码压缩与合并:
- 在所有环境中,使用UglifyJS等工具对JavaScript代码进行压缩,去除不必要的空格、注释等,减小文件体积。例如在Angular项目中,可以通过
angular.json
文件配置architect.optimization
为true
,启用默认的优化,包括代码压缩。
- 合并CSS和JavaScript文件,减少浏览器请求次数。在
angular.json
的architect.build
部分,设置styles
和scripts
数组,将相关文件合并。
- Tree - shaking:
- 利用ES6模块的静态结构特性,在构建过程中进行Tree - shaking,只打包应用实际使用的代码。Angular CLI默认支持Tree - shaking,确保项目中的模块使用ES6模块化方式导入和导出,避免动态导入(如
import()
形式在某些情况下可能影响Tree - shaking)。
- 环境特定配置:
- 使用Angular的环境配置文件(
environment.ts
和environment.prod.ts
等)。根据不同环境(公有云、私有云、本地服务器)配置API地址、日志级别等。例如,在公有云环境可能需要配置不同的CDN地址用于加载资源。
缓存策略
- 浏览器缓存:
- 静态资源:
- 对于不经常变动的静态资源(如样式表、脚本、图片),设置较长的缓存时间。可以在服务器端配置HTTP头信息,例如在Nginx服务器中,通过如下配置为CSS和JavaScript文件设置长时间缓存:
location ~* \.(css|js)$ {
expires 365d;
access_log off;
}
- 动态资源:
- 对于动态资源(如API响应),根据业务需求设置合理的缓存策略。如果数据变化不频繁,可以在客户端使用
HttpClient
的cache
机制进行缓存。例如:
import { HttpClient, HttpParams, HttpHeaders, HttpCacheOptions } from '@angular/common/http';
const cacheOptions: HttpCacheOptions = {
cache: true
};
this.http.get('/api/data', cacheOptions).subscribe(response => {
// 处理响应
});
- CDN缓存:
- 在公有云环境中,充分利用CDN(内容分发网络)。将静态资源上传到CDN,CDN会根据用户的地理位置缓存和分发资源,加快访问速度。例如使用阿里云CDN、腾讯云CDN等,将Angular应用的静态资源(如
dist
目录下的文件)同步到CDN,并更新应用中的资源引用路径。
资源加载优先级
- 关键CSS:
- 将关键的CSS(如首屏显示所需的样式)通过
<style>
标签内联到HTML文件的<head>
部分,确保在页面渲染前这些样式就可用。可以通过工具提取关键CSS,例如使用critical - css
工具,在构建过程中生成首屏关键CSS。
- JavaScript加载顺序:
- 将与页面初始化和交互紧密相关的JavaScript文件优先加载。在
angular.json
中,可以调整scripts
数组的顺序,确保重要的脚本先加载。例如,如果有一个用于初始化页面交互的自定义脚本,将其放在数组靠前的位置。
- 使用
async
和defer
属性来控制脚本加载方式。对于非阻塞渲染的脚本,可以添加async
属性,使其异步加载,不影响页面渲染;对于需要按顺序执行且不阻塞渲染的脚本,可以添加defer
属性。例如:
<script src="script1.js" defer></script>
<script src="script2.js" async></script>
- 图片加载:
- 对于首屏图片,设置较高的加载优先级。可以使用
loading="priority"
属性(在支持的浏览器中),例如:
<img src="hero - image.jpg" alt="Hero Image" loading="priority">
- 对于非首屏图片,采用懒加载策略。在Angular中,可以使用
ng - lazyload - image
等库实现图片的懒加载,提高页面初始加载性能。
针对不同环境的特殊策略
- 公有云环境:
- 除了上述通用策略外,利用云提供商提供的性能优化服务,如AWS的Elastic Load Balancing(ELB)可以均衡流量,提高应用的可用性和性能。
- 根据云环境的资源限制和成本,合理调整资源配置。例如,如果公有云按资源使用量计费,可以根据监控数据在业务低峰期适当降低资源配置。
- 私有云环境:
- 由于私有云环境可能对安全要求更高,在性能调优时要确保安全策略不被削弱。例如,在缓存策略中要考虑数据的安全性和合规性。
- 针对私有云的网络拓扑进行优化。如果私有云内部网络存在特定的延迟或带宽限制,调整资源加载方式,如采用内部CDN或优化跨子网的资源请求。
- 本地服务器环境:
- 对于本地服务器,要根据服务器的硬件资源(CPU、内存、磁盘I/O等)进行调整。如果服务器内存有限,避免加载过多的缓存数据。
- 优化本地网络访问,例如通过调整服务器的网络配置参数(如TCP窗口大小等)来提高本地网络性能。同时,对于本地开发和测试环境,可以使用工具模拟不同的网络状况和硬件资源,提前发现性能问题。