请求、缓存、图片利用率和人力成本

2024-03-25 01:58

本文主要是介绍请求、缓存、图片利用率和人力成本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近我们在优化Qzone的静态资源架构的时候,遇到了一个问题,这个问题需要我们对请求、缓存、图片利用率、人力成本这几点来权衡。前端性能的优化就是关于权衡,很多事情都没有一个完美解决方案。要针对具体需求进行优化。

请求

请求很简单,所有了解前端性能优化的人都能脱口而出:HTTP请求越少越好。

HTTP请求少于 一定数量的时候,减少请求就没有意义了。

页面上有些不重要的模块可以用ajax来延迟加载,这时候延迟加载的html和css以及图片,就没有必要计算请求数了,这也是为了减少初次加载的时候的文件大小。

缓存

当用户第一次访问过了一个页面之后,服务器可以吐出静态资源,并且在response header中声明max-age比如一年,那么这一年之内理论上用户访问页面的时候都不会再向服务器请求这个资源,这样就节省了请求和带宽。

为什么说理论上呢,因为实际上这个静态资源保存在用户的缓存池中,这个池是有限的(据说chrome的缓存池是自动扩展的?待求证),那么后续缓存的资源会把前面载入的资源挤出去。当发生了这种情况,请求前面的资源的时候就会重新请求服务器了。

那么服务器端如果要修改这个资源呢?如何让用户的浏览器重新拉取资源?答案是url加上时间戳,比如xxx.png?d=20120523,那么浏览器会认为是另一个文件而重新请求,而服务器也会吐出xxx.png来。

请求和缓存之间的矛盾是当站点有多个页面需要有一部分内容是相同的图片的时候,如果我们专注于最小化请求,那么就会把所有能合并的图片合并起来,那么两个页面调用各自的雪碧图,这样就损失了一部分本可以在两个页面之间共用的图片。

图片利用率

图片利用率这个概念常用于复杂的社交网站,比如facebook和QZone。因为对于这类型的网站的一个重要特点是,每个人看到的页面都不一样。我可以自定义我的主页的模块,边栏显示的模块,并且我的feeds中出现的条目也跟其他人不一样。而传统网站是每个人看到的页面都一样,那么图片的利用率是100%。

现在我的主页有模块A,而张三的主页没有这个模块A,那么如果张三的雪碧图和打包CSS中也包含了A的渲染代码和图片的话,那就是流量的浪费,也是速度慢的一个原因。

Facebook有一套很好的服务器端动态打包系统,会根据用户模块来打包CSS和图片。

QZone也有一套服务器端动态打包的语法,但是还不够给力,一方面不能分析用户行为,另一方面不能合并图片。用的更多的是CSSgaga来让工程师合并CSS和图片。在请求和缓存上已经能达到业界最好的水平,但在图片利用率上还有待提高。

人力成本

人力成本是考量一个架构是否优秀的重要考评点。

人力成本包括实现一个功能需要的成本、维护成本、修改成本、删除成本、培训成本等……成本越低,架构更容易推行。成本越高,越会遇到阻力。

QZone现在已经有非常优秀的架构和工具,但是人力成本还是稍高,因为需要工程师实际确定最终突出代码的文件顺序、图片合并。这些并不是动态的,所以需要有经验的工程师来进行合并。所幸的是有CSSgaga来快速合并。

Facebook把精通性能优化的工程师专门用来实现服务器端动态打包系统,而其他的更多工程师只是实现自己的模块,并不实际关心最终模块的HTML、CSS、图片是如何吐出到服务器端(是直接吐?还是Ajax?是合并还是单独图片?),工程师只需要声明模块优先级即可。

这一点也是QZone现在需要学习的地方。

这篇关于请求、缓存、图片利用率和人力成本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843501

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超