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

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

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

恶意PNG:隐藏在图片中的“恶魔”

&lt;img src=&quot;https://i-blog.csdnimg.cn/blog_migrate/bffb187dc3546c6c5c6b8aa18b34b962.jpeg&quot; title=&quot;214201hhuuhubsuyuukbfy_meitu_1_meitu_2.jpg&quot;/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

防止缓存击穿、缓存穿透和缓存雪崩

使用Redis缓存防止缓存击穿、缓存穿透和缓存雪崩 在高并发系统中,缓存击穿、缓存穿透和缓存雪崩是三种常见的缓存问题。本文将介绍如何使用Redis、分布式锁和布隆过滤器有效解决这些问题,并且会通过Java代码详细说明实现的思路和原因。 1. 背景 缓存穿透:指的是大量请求缓存中不存在且数据库中也不存在的数据,导致大量请求直接打到数据库上,形成数据库压力。 缓存击穿:指的是某个热点数据在