前端面试-性能优化篇
1. 怎么实现大文件的上传?
- 分片上传(Chunked Upload):将大文件拆分成小的文件块(chunk),然后通过多个并行的请求依次上传这些文件块。服务器接收到每个文件块后进行存储,最后合并所有文件块以还原原始文件。这种方法可以降低单个请求的负载,并允许在网络中断或上传失败时可以从断点续传。
- 流式上传(Streaming Upload):客户端使用流方式逐步读取文件的内容,并将数据流通过 POST 请求发送给服务器。服务器端能够逐步接收并处理这些数据流,而无需等待完整的文件上传完成。这种方法适用于较大的文件,减少了内存占用和传输延迟。
- 使用专门的文件上传服务:有一些第三方服务可供使用,例如云存储服务(如 Amazon S3、Google cloud3.Storage)、文件传输协议(如 FTP、SFTP)等。这些服务通常提供了高可靠性、可扩展性和安全性,并且针对大文件上传进行了优化。
- 压缩文件上传:如果可能,可以在客户端先对文件进行压缩,然后再进行上传。压缩后的文件大小更小,可以减少上传时间和网络带宽消耗。
- 并发上传:通过多个并行的请求同时上传文件的不同部分,以加快整个上传过程。这需要服务器端支持并发上传并正确处理分片或部分文件的合并。
- 断点续传:记录上传进度和状态,以便在网络中断或上传失败后能够从上次中断的位置继续上传。可以使用客户端或服务器端的断点续传机制来实现。
2. 说说常规的前端性能优化手段?
- content 方面
- 减少HTTP请求:合并文件、CSS精灵、inline Image
- 减少DNS查询: DNS查询完成之前浏览器不能从这个主机下载任何文件。方法:DNS缓存、将资源分布到恰当数量的主机名,平衡并行下载和DNS拆线呢
- 避免重定向:多余的中间件访问
- 使用Ajax可缓存
- 非必须组件延迟加载
- 未来所需组件预先加载
- 减少DOM元素数量
- 将资源放到不同域下:浏览器同时从一个域下载资源的数目有限,增加域可以提高并行下载量
- 减少iframe数量
- Server 方面
- 使用CDN
- 添加Expires或者Cache-Conntrol响应头
- 对组件使用Gzip压缩
- 配置ETag
- Flush Buffer Early
- Ajax使用GET进行请求
- 避免空链接
- Cookie方面
- 减少cookie大小
- 引入资源的域名不要包含cookie
- CSS 方面
- 将样式表放到页面顶部
- 不适用CSS表达式
- 不使用IE的Filter
- JS 方面
- 将脚本放到页面底部
- 将JS和CSS外部引入
- 压缩JS CSS
- 删除不需要的脚本
- 减少对DOM的访问
- 合理设计事件监听器
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!