它们不存在。但如果存在会怎样呢?
例如,关于 正在讨论 的标记
<picture alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia">
<!-- Default -->
<source src="small.jpg">
<!-- Alternative if media query matches -->
<source src="medium.jpg" media="(min-width: 400px)"> -->
<!-- Alternative if media query matches -->
<source src="large.jpg" media="(min-width: 800px)">
<!-- Fallback -->
<img src="small.jpg" alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia">
</picture>
我 100% 支持这个想法。让我们在声明的情况下提供我们想要的图像。但屏幕宽度是这里使用的正确指标吗?也许是,为什么一个 400px 宽度的屏幕需要一个大于 400px 宽度的图像?好吧,我认为某些新型设备上的视网膜显示器正在为我们解答这个问题。这些设备可能会响应某些宽度媒体查询,但实际上拥有两倍的可用像素,并且能够显示更清晰的图像。是的,我们也有 device-pixel-ratio
媒体查询,但我仍然认为我们在回避问题。
问题是:带宽。如果我在一个网速非常慢的地方/设备上,我希望能获得一个非常轻的网页,这样浏览速度仍然可以接受。如果我在一个网速非常快的地方/设备上,请务必将其提升到更高的水平,并为我提供更多内容。
例如
/* Fair warning: these aren't "real" */
@media (min-bandwidth: 25Mbps) {
/* High bandwidth, bring it on! */
}
@media (max-bandwidth: 10Mbps) {
/* This is only for the viewers with currently slow internet connection speed */
}
这并不意味着忽略屏幕大小。在布局方面,这显然是相关的。媒体查询的这种扩展将为我们提供一个更合适的工具,用于媒体在设备大小与带宽越来越无关的世界中。
所以我想知道:这可能吗?
这会很酷。真正的问题仍然是用户体验。因为我的连接速度很慢,这意味着我只能看到分辨率更低、甚至可能像素化的图像?首先为移动设备优化您的网站,这是一种安全的方法。
“慢连接” 是这里的重要部分。我可能正在从 iPad3 上观看网站,位于乞力马扎罗山顶。因此,分辨率 /ppi 会很高,带宽很低。
因此,我更希望得到类似于渐进式 jpeg 的东西,浏览器在可能的情况下请求更多细节,同时显示尽可能多的细节。
现在也可能是讨论测量尺寸的时候了,不是以px,而是以em(mm?!)
我不明白以 em 指定图像大小与我们现在能做的事情有什么不同,问题在于它们是位图——放大它们会导致质量下降,缩小它们会导致浪费带宽(因为文件大小仍然相同)。您已经可以使用 CSS 媒体查询(使用 % 和 min/max-width)以这种方式缩放图像…
1. 阅读标题
2. 反应“我的生活即将改变。”
3. 阅读第一行:http://rle.me/x/ohman-sad.gif
这是一个非常棒的想法。请让它实现。谢谢。
哈哈。我也有同样的反应……看起来 HTML5 还有一些希望。
哈哈,我也有同样的反应……有时候我认为克里斯是尤达,而 HTML5 只是我们的绝地武士技能。
有一瞬间,我非常开心,因为我并没有从第一行开始阅读文章。
然而,我确实发现他们正在将此纳入 HTML5 规范:http://dvcs.w3.org/hg/dap/raw-file/tip/network-api/index.html#introduction
哇,谢谢。我还没有看到带宽被添加到网络 API 中。
当然是一个好主意,但我们需要确保我们知道人们的实际网速。例如,今天我的网速是 26Mbps,周末是 75Mbps,而我妈妈是 0.3Mbps!
很棒的想法!\o/
我相信可以编写脚本来“测量”您的带宽。比如从后端发送一个日期戳,然后使用 JS 将其与文档及其所有资源加载时的日期进行比较。我认为这会给你一个不错的估计(由于是 JS 计算的,你可以在之后根据结果执行回调)
我同意我们需要屏幕尺寸、屏幕分辨率和带宽的组合。
但带宽——尤其是在移动条件下——实际上并不稳定,无法使用此类标准。在我的 iPhone 上一次浏览过程中,我可以从 GPRS 切换到 WiFi/ADSL,然后再切换回 GPRS,那么 OS/浏览器什么时候/如何决定我的带宽?
例如,雅虎的 Boomerang 已经进行了实验,但它实际上不够准确,无法使用。
对于移动浏览来说,延迟通常比带宽更重要。
真的不是一个简单的问题。
完全同意,尼古拉斯。
此外,最大带宽 != 可用带宽。您的手机显示 5 格 3G(或 AT&T“4G”)信号,但由于连接延迟掉线,甚至无法加载一个网页,这种情况发生过多少次?此外,如果您要大量更新应用程序,您的可用带宽会大幅下降,即使您可能仍在进行多任务处理和网页浏览。
虽然在 CSS 中创建更多响应式界面将受到欢迎,但我预计任何近期/中期解决方案都将由 JS 驱动——而不是 CSS 驱动——因为这个问题过于复杂,无法通过声明方式解决。此外,响应带宽不仅仅是一个展示问题——弄清楚要加载哪些脚本/资产应该是主要用例。
顺便说一下,正如埃里克·泰勒上面提到的,我们最接近的官方方法是网络信息 API 中的带宽属性 (http://dvcs.w3.org/hg/dap/raw-file/tip/network-api/index.html#introduction).
当(而不是如果)我们找到更强大的解决方案,让我们的界面响应带宽时,我们需要重新审视我们如何管理用户期望
– 基于带宽提供不同的媒体资源会带来什么样的最终用户体验?
– 用户是否期望更快的连接会产生更高分辨率的媒体资源,从而以牺牲页面加载时间为代价?
“10 mbps /* 仅适用于当前互联网连接速度较慢的观看者 */”
我一生中从未拥有过 10mbps,我的网速是 5mbps,我认为这已经很快了…… :(
这种评论让我害怕——随着互联网越来越全球化,我们需要记住,对于某些人来说,被认为正常的网速远远超过他们所在地区的网速。
图片标记和 -webkit-image-set 变得越来越重要,需要尽快实施——例如,如果您的网站有许多美国访问者,那么提供低分辨率/简化的内容就变得越来越重要。
我同意 MMM 的观点,我的网速是 0.6 mbps,但它从来没有真正困扰过我。
我想,如果你从未见过另一面,那里的草就不可能更绿。
我也是,我的线路最多只能达到 6mbps。10mbps 很慢的想法太疯狂了。
带宽测试充满了风险,原因很多,而且很明显。我之前写过这篇文章——“我可以愚弄连接速度测试”(http://www.welcomebrand.co.uk/thoughts/i-could-fool-connection-speed-tests/)因为我住的地方服务有限。
我希望有更多像这样的工具,但我意识到许多人最终会用它们来掩盖他们网站中更基本的问题。
J.
我想象在这个系统下,在某些情况下,我会直接省略很多图像。当我使用 iPhone,只能获得 Edge 连接时,我对看到漂亮的图像没有兴趣,不如直接获得我想要的信息。虽然我喜欢设计,但在一定程度上,我对页面实际完成加载的兴趣远远大于我对它外观的兴趣。这是可访问性优先于设计;如果有人无法看到您的网站,那么它有多漂亮对他们来说并不重要。
我想知道是否有任何由 JavaScript 驱动的解决方法。您可以使用 AJAX 调用来测量用户端的页面加载速度,然后用一个类标记 HTML 标签,例如:``?您可以使用这种方法来实际延迟加载图像,直到您确定连接速度,然后要么加载大图像,要么加载小图像,或者等待加载任何图像直到内容加载完成,并使用 JavaScript 在内容加载后加载图像 src?也许这可以是一个 jQuery 插件。
好主意!如何使用一个脚本,根据页面本身来测量页面加载时间?脚本在 `
` 中执行,并从执行开始到整个页面(包括图像)加载完成测量时间。然后,它会存储一个包含速度值的、持续 1 小时的 Cookie。在用户在网站上浏览的剩余时间内,这个值可以用来提供合适的图像等等。Ash,这是一个好主意!这意味着对用户来说,加载速度更快,HTTP 请求更少。我建议这个 Cookie 持续时间更短,并且对于那些正在切换不同连接区域的用户,应该经常重新检查。
我还有一个类似的想法,就是使用 JavaScript 设置一个 Cookie,用来表明用户是否启用了 JavaScript。这样,您就可以使用服务器端的 `if` 语句,只有在禁用 JavaScript 时才加载部分内容和图像,然后使用 AJAX 调用来填充未加载的内容。这个想法的一个分支是尝试让很多网站检查这个 Cookie,并在不存在时设置它,这样它就可以在用户第一次访问您的网站时加载。也许通过结合这些想法,您可以众包收集类似的信息。您可以分发一个插件来检查这个 Cookie,然后设置它,然后许多不同的网站都可以使用它。每个网站都可以帮助其他每个网站保持用户的 Cookie 最新,以提供所有当前的浏览器信息。
RetinaSwitch 正是这样工作的。每个支持它的网站,在他们的页面加载时,都会向 RetinaSwitch 发起一个隧道请求,以检查“Cookie”(实际上是一个本地存储变量),看看他们是否禁用了视网膜图像。本质上,这个变量对每个人都是全局的,并且与切换开关的设备相关联。
同样的想法可以围绕速度限制的普遍假设构建,而不仅仅是视网膜图像。
这里肯定有一些东西。问题是创建一个不需要太多 HTTP 请求,而且不会发生太多乱七八糟的事情的东西 lol。
我不同意你的观点。我在德国和柏林经常使用移动互联网上网,我的连接速度很快(在德国移动互联网中,快意味着 1 Mbps :D),但 ping 值非常高。如果我的浏览器请求一个图像,它需要很长时间来解析服务器 IP 并进行 HTTP 请求,但在这之后,图像加载速度很快。如果我按照你建议的方式使用 AJAX 来测量连接速度,结果会受到 ping 时间的影响。我认为,JavaScript 无法精确地测量连接速度。
我认为,浏览器/操作系统应该测量速度,这是唯一能够进行精确速度测量的机会。在页面加载期间,浏览器会计算每个域名/IP 的平均加载时间(注意缓慢的服务器),然后将其保存到某个地方。如果页面可以使用一个小的 JavaScript API 来访问这些信息,那就太好了。
一个完全不同的解决方案是使用 HTML 属性的技术。也许在即将发布的 HTML 版本中,或者通过 W3C 的新规范,可以实现这一点。我认为,这比 JavaScript 解决方案更好,因为浏览器/客户端可以决定是否加载大图像或小图像。我建议引入一个新的 HTML `img` 标签属性,称为“smallres”(带有第二个图像源),将其集成到 HTML 页面中。在浏览器解析 HTML 时,它会识别出存在一个小版本,并且可以根据连接情况加载它。浏览器甚至可以向用户询问是否要加载小版本。
您对我的想法有什么看法?
Jannis R,
我认为您所有的建议以及您提出的理由都很好。我的建议更像是:“从实验的角度看,我们现在如何才能做到这一点?”。显然,这篇文章的前提是,如果浏览器能够以一种非常可靠的方式向我们公开这些信息,那将是件好事。
在您的建议中,我更喜欢属性的想法,而不是 JavaScript API 的想法。我仍然对任何使用 JavaScript 的地方都持谨慎态度,除非它绝对必要。不过,我更希望有一种方法不需要像属性想法那样多的标记。无论哪种方式,浏览器能够将这些信息简单地公开给我们,无疑是一件好事。我只是想知道,对于不支持它的浏览器,最终的回退方案是什么?我们是否会简单地回退到假设最慢的连接?对于最快的连接,又如何呢?是否存在一个我们可以假设的默认值,就像我们现在一样,不做任何处理?
我建议回退到询问用户是否要使用全部带宽。
这已经在 JS 中了,据说是要放到 MQ 中。
我们以前几乎完全做过这件事。在过去,可以为图像添加一个 `lowsrc` 属性——将其与用户偏好(“仅在可用时下载低质量版本”)或自动启发式算法(“我的连接很糟糕,所以我要跳过大型 JPG”)结合起来,您就几乎获得了带宽敏感的图像。
出于某种原因,它从 HTML 中消失了。
`lowsrc` 不是你想象的那样。 http://vimeo.com/38947881 4 分 55 秒,谈到了它。
PS:我几周前向响应式图像工作组提到了这一点,但没有得到回应。
http://www.w3.org/community/respimg/2012/03/07/14/#comment-115
这个 脚本 检查设备是否具有高分辨率屏幕,然后检查连接速度。我不确定现在的情况,但这可能值得一看。
连接速度是一个很好的衡量指标,但数据的成本如何?在可预见的未来,用户可能会从蜂窝网络获得高速连接,但数据上限很低!我不想让网站因为我使用的设备很快而向我发送更大的文件——尤其是当我需要支付双倍的费用时。
问题是,这需要自动化。我们不能给用户提供大量选项,例如“超低流量上限”、“资源占用大”、“闪电般快速”。
我们需要能够为他们提供普遍最好的服务。不一定非要完全最好。如果我们随意地给用户提供太多选项,那么我们就不像 iOS 那样,而是像 Android 那样 lol。
我喜欢您提到的这一点,因为大多数“经济实惠”的移动数据套餐允许您使用 3G 在德国下载 200-300 MB,然后您的连接速度会降低到 GPRS。
以下观点可能有点牵强,但移动网络容量如何?是否应该让人们因为负担得起而倾向于产生高流量?我想你很难禁止别人在移动设备上观看高清电影,但也许可以优化网站,无论可用连接速度如何,都能够快速加载。
@media (min-monthly-data-limit: 2000Mb) {
/* 中等内容,放马过来吧! */
}
阿门!
我也希望看到这种情况发生。
与此同时,
您还可以使用地理位置 IP 查询服务来发现与 IP 地址关联的连接速度。它们当然不能 100% 准确,但总比没有好……
我们有一个“免费”API 调用,可以为您提供请求它的 IP 地址的速度。
您可以在此处进行测试
http://geo.opentracker.net/GeoIpEngine/?connection
返回结果需要几毫秒,这足够快,可以用来根据结果提供图像。
您可以自由地在您的(较小的)网站上使用它,对于较大的网站,请联系我们。
无关紧要,但这也很不错。
:D
那真是太好了。或者类似于:
那将是相当不错的。
这是我关于它的想法,它并不十分完美,因为它需要每个浏览器供应商都参与进来。
每当您积极浏览网页时,设备会测量某些请求的下载速度与大小的对比。一个全局的“常量”会不断更新,可以在 JS 中使用(platform.currentBandwidth)。
JS 可以绑定 CSS 类(.mediumBandwidth/.highBandwidth)。
为了向后兼容,当然,编码人员需要首先检查 platform.currentBandwidth 是否存在。
不过,此解决方案对普通的 img 元素不起作用。
我敢肯定,您需要在服务器端执行此操作,并且需要对网络设施进行低级访问。如果计算会话的平均下载速度,Web 应用程序可以响应并提供更高/更低分辨率的内容。Node.js 可能是一个很好的解决方案!
我同意 Chris 的观点。使用媒体查询来提供不同的图像会很有用,但通过某种方式在服务器端执行会更适合。
我的想法是,它会发出 ping 并确定要提供哪个图像(无论是分辨率方面还是 jpg 质量),或者它会尽可能多地逐步加载图像,并在经过一定时间后停止。
我认为,我们正在逐渐意识到更多前端开发人员正在考虑性能。我们还需要确定用 html+css+js 做什么,以及用服务器脚本做什么。
还记得以前我们使用带链接的不同版本的网站的启动页来适应不同的带宽吗?也许我们需要重新开始这样做。
大多数网站已经这样做,但没有启动页。大多数网站都有一个移动版本,通常更轻量级。
这可能会让我很烦恼——比如,如果一个网站在工作中慢速机器上的外观与在我家中的 Mac 上不同。它必须谨慎使用,例如,当带宽较低时提供较低质量的 GIF 图像,但不可避免地,人们会用它来改变内容的数量或外观,这样就不公平了。
Chris,这是一个绝妙的想法。正如上面一些人所说,这比“最大”(甚至“当前”,无论“当前”是什么)传输速度更复杂,它与延迟、连接断开等有关,因此还需要做更多工作。但是,您关于屏幕尺寸是连接速度相当不准确的预测的观点绝对正确。
我认为,数据上限和成本比速度检查更有用。我认为有些上限也会让您感到惊讶。例如,在加拿大,我上次寻找手机套餐时,平均数据选项是 500 兆数据,作为 25 美元的附加费。
如果有一个媒体查询可以检查浏览器中的首选项怎么办?
我知道,即使我有像 Martijn 示例中那样 2 千兆的套餐,我仍然不想在高分辨率图像上“浪费”数据。
也许应该有相同图片的低、正常和高重量版本。如前所述,连接速度并不决定用户体验。网站速度取决于带宽、延迟、要加载的资源数量、下载线程数量等。此外,您可以同时浏览多个标签。
这就是我认为用描述提供备用源的原因:低/正常/高重量。因此,浏览器可以使用最佳策略选择它想要的权重
* 网络是免费的,并且能够正常响应
* 网络还可以,但有许多标签要加载
* 下载低分辨率,然后当用户滚动到图像附近时下载高分辨率图像。
* 用户定义策略,不要浪费太多数据配额。
最后,此描述将始终是正确的,而不是带宽度量。您今天无法知道将来可用的带宽。您今天无法定义什么将始终决定连接速度的真正度量。也许明天会出现下一代代理,即使带宽很低也能免费下载高分辨率(听起来有点奇怪,但为什么不呢?)
我同意 Mike 的观点。此外,我想补充一点,带宽将是一个难以衡量的指标;除了硬件之外,还会出现瓶颈,这可能会导致对带宽的错误评估。我的意思是,想象一下,一个人在信号不好的区域使用 4G 设备,一个过载的路由器,正在执行多个下载……等等。可以想象,可以定期执行吞吐量测试……但这似乎有点强求。
如果用户仍然想查看最高分辨率怎么办?
此外,另一个尚未探索的领域是,如何重新使用我们已经使用很长时间的东西:渐进加载。如果您可以以低分辨率加载图像,并在加载到完整分辨率之前继续加载呢?我们是否可以重新思考渐进加载的某些方面,使其更实用?
Chris,是否可以使用 JavaScript 进行速度测试?我以前读过关于托管一个简单的图像,然后通过 JS 计时下载或其他操作的内容。
如果是这样,是否可以为某人构建一个工具,以执行此简单检查,然后以这种方式加载内容?
问题是,为了足够准确,下载需要达到至少 400 千字节。您可以做一些类似于 http://www.retinaswitch.com 的东西,但适用于带宽。但问题是在移动设备上,用户可能会被测试为高速,然后在信号不好的区域仍然会被提供高速网站。
有时候我访问这个网站时,感觉就像是在读我的想法。
几周前,我一直在脑海中思考这个问题,并认为“如果……生活会变得多么简单”。
带宽是值得查询的东西之一。问题是如何在不首先使用大量带宽或使用可能测量相当数量的千字节(并且依赖于 JS 启用)的某些 JavaScript/库的情况下确定带宽。
它的准确度如何?我们知道“屏幕”就是屏幕。宽度/高度往往是固定大小,但在改变为另一组大小后很容易检测到。带宽不断波动,我认为无法像我们希望的那样快速地“实时”确定。
这场争论的发生原因以及潜在的用途也很有趣。我能看到对真正的图像(它们是有用的内容)的用例。或者为提供 HD 视频而不是 SD 视频。如果将其用作借口来提供或不提供更多臃肿的设计(包含大量图像和背景),那么这将毫无吸引力。
我希望看到您的想法在现实生活中实现。没有理由它不能成为一个完全可行的选择。我尝试使用 http://www.RetinaSwitch.com 来解决这个问题,但它受到在网站上使用 API 的用户的限制。如果它被采用,它将有效,但应该有更优雅的解决方案供我们使用。
哇,那会很酷很有用!
检查可用带宽是可以的,但它不应该决定用户体验。我认为目前的运行方式还可以,即检测设备的屏幕尺寸,然后相应地提供相应大小的图像。您可以进一步优化这些图像,以确保在提供 320 像素图像与 1000 像素图像时,不会使用过多的数据。
如何进行一个综合的网络性能评分(有点类似于 Windows 体验指数):将延迟、声明的上限、设备网络能力、当前连接带宽(滚动平均值)结合起来?
说真的,您可以将其扩展到包括设备 CPU 和内存指标,并使其成为一个全面的设备性能评分。
我认为,更重要的是创造一种新的图像格式,png、jpeg、gif 都太老了……
就像视频标签为较旧的浏览器提供一个回退。当然,让用户配置他们的首选项。
接受挑战!
:)
也许最好让浏览器选择最合适的图片,并提供一些提示供图片选择。
我认为这比为屏幕尺寸、像素密度和带宽定义复杂的媒体查询更好 :)
哇,对此有很多积极的回应。就我个人而言,我对这个并不兴奋。也许我考虑得太多了!
我可不想为了更快速度而切换连接,结果却发现网站反而消耗了更多流量,最终得不偿失。似乎技术越先进,就越容易受到臃肿/滥用问题的困扰。我能想象很多网站检测到我使用的是中等带宽,于是决定用它们毫无趣味或不必要的营销视频内容来轰炸我。我的意思是,“高质量”是一个主观的词。
当然,网络带宽只是最大潜力的指标。用户的设备可能无法处理额外的数据(内存可能不足,处理器可能速度慢等),或者网络带宽可能被许多设备共享(在我的家庭中通常是这种情况)。
我不明白浏览器如何决定最佳速度,因为这在不同的网站之间差异很大,因此需要不断测量。
提供一个针对超低带宽的网站“精简版”会很棒,但为什么要用媒体查询来实现呢?直接用 lite.css-tricks.com 作为示例,这样即使是使用高速连接的人也可以选择使用它。自动为用户选择的问题在于,这种选择并非用户的偏好。低带宽用户可能不会受到访问为高带宽设计的网站的影响,尤其是在客户端缓存有效的情况下。
另一篇带有演示的帖子
http://themousepotatowebsite.co.za/the-responsive-image-problem/
这是一个非常好的主意,我支持它!
(即使最终处理所有交织在一起的媒体查询参数将是一场噩梦)
那它将如何工作呢?使用 JavaScript 测试带宽,然后提供相应的资源吗?
我不喜欢语法,但喜欢总体思路(为什么是 picture 而不是 image)。我认为许多类似嵌套媒体查询、浏览器版本媒体查询和条件标签的东西应该优先考虑。
我不明白带宽标签有什么用——在移动设备上,带宽一直在波动。所以您是否需要在每次页面加载时测量带宽?此外,使用额外的脚本计算带宽是否会违背媒体查询的初衷?
是否真的应该由网页开发者来决定哪种图像大小合适。为图像提供多种版本格式(例如 .ico 所做的那样),然后只让浏览器加载它认为最佳的版本,这是否是一个好主意?我只是随口说说。
你可以使用一些带有
navigator
对象的 JavaScript 代码来实现这一点。这里有一个小片段现在你可以在 CSS 中执行以下操作
问题是只有 Android(从 2.2 版本开始)支持它(好吧,MDN 和 caniuse 上没有文档,所以我不能确定 Firefox Mobile 和 Opera Mini/Mobile 是否支持,但 iOS 不支持)。
我认为这将有助于 Web 变得更加全球化。许多来自发达国家的第一世界开发者正在编写在第一世界宽带网络上运行的页面,通过响应低速连接,我们可以让更多人访问页面。
我不仅仅是在考虑提供更低分辨率的图像——而是如果检测到“拨号上网”或缺少大型 JavaScript 库,如何将那个巨大的背景图像替换为简单的背景颜色。它可以应用于比你最初想象的更多地方。
Chris 的想法不错。
但我对它有一些意见。
#1
要从浏览器中识别带宽,最好下载大型或实际图像。带宽并非每次都与系统相同,这需要在每次发出 HTTP 请求时进行检查(否则可能不准确)。识别带宽所需的时间小于 HTTP 请求所需的时间。
#2
在 @media 中提供 min-bandwidth 功能是不够的。这里 CSS 应该也支持嵌套样式,而我们现在还没有。
例如
@media(min-bandwidth:10kbps) {
.small-img img {
background : url(small-img);
}
}
无论如何,我非常喜欢你的想法。请继续发布。谢谢。
探索这个主题以及人们对它的想法非常有趣。
我发现自己一直在徘徊于想要根据带宽设置用户体验,以及最终认为这必须是用户决定的想法之间。
我同意 Lee Kowalkowski 的观点,在一定程度上,如果我们开放这项技术,虽然大多数开发者可能会明智地使用它,但它也为那些不那么道德的人打开了一扇潘多拉魔盒,让他们用大量不必要的內容(例如广告)来阻塞你的观看体验。
我认为我们需要一个折衷方案。
能够为那些没有足够经验为自己做出选择的用户做出选择会很好,但能够在浏览器中设置一些内容来说明这一点也很不错,例如广播我的速度为...或者我更喜欢轻量级网站。
最终,对于那些想要选择的人,他们需要有选择的能力。但是,我认为这不应该阻碍开发一个允许开发者轻松可靠地获取此信息的标准。
你似乎已经部分解决了问题?
有什么理由不根据渲染情况提供图像呢?
他们会让我们如此轻松吗…?
很简单。从低带宽样式表开始。在 body 中启动一个 js 定时器,然后计时到页面加载事件触发需要多长时间。时间将告诉你加载这些内容需要多长时间(并且你知道大小),因此你就知道了带宽。然后切换到相应的中等或高带宽样式表,或者在某些东西上添加“高分辨率”类。
趁着这个机会,一个媒体查询类或 id 会很好。谁想为每个 img 标签编写
media="(min-width: 400px)"
呢?它应该mediaclass="landscape-phone"
@media.landscape-phone (min-width: 400px)) {...}
或类似的东西。然后我们可以将图像源变成一个级联,它会自动向上移动,即使在调整大小时也是如此。我认为你不希望在已经加载了大型版本后,再加载小型版本。
一个在页面加载时检查的浏览器 API 会很棒。如果用户可以默认使用低质量,然后进入设置并提高质量,那会很好。我不想强迫每个网页都进行数据测试加载,以在移动连接上测试连接。
也许我们可以制作一个 PHP 脚本,让我们可以做到这一点?
我喜欢这个概念,因为我们越来越需要了解用户的环境(在旅途中还是在沙发上)来创建响应式网站。带宽可能不稳定,但拥有一个针对网络类型的查询会很好。
例如。
一些视频播放器是否会根据用户的带宽调整视频质量?
我无法通过快速搜索找到一个好的示例,但我确信我记得在上一届世界杯期间,视频质量会根据播放器底部的一个“带宽”条进行调整。
当然,但我只为特定的视频选择它。如果要为整个页面(不仅仅是一个视频,我们讨论所有图像)这样做,那么我们将回到之前的“选择你正在使用的浏览器”或“选择你的分辨率”的页面链接…
我认为最好的方法是为所有浏览器提供一个用户可以修改的设置,或者浏览器可以某种程度地感知它,如果最终使用一个固定的名称,它将是可变的。
将其设置为 100% 或最大将意味着使用大量数据,1% 或最小将意味着“抱歉,我使用的是拨号上网”,而 50% 或一半将意味着“发达国家的平均数据速度”。
它将随着设备在网络之间移动而按百分比进行扩展。
它将成为类似 font-size:12px; 的用户默认设置,我们将像编辑字体大小一样编辑内容带宽权重。
我在这里看到的唯一问题是,带宽是客户端测试时的计时测量。因此,你需要考虑到测试连接以找到带宽所需的时间,以及实际加载页面所需的时间。这些信息可以存储在 HTML5 存储中或服务器上,以便将来访问,但这会违背初衷,因为它需要在你的连接速度波动时重新测量。我可能夸大了这一点,因为这可能只是一点点时间,但这只是一个想法。
另一个很棒的媒体查询
如果…
a) 我们提供一个低保真版本,用户使用开关(图标、链接、按钮、标志)设置选项,我们设置一个 cookie,
b) 我们检测带宽,设置一个 cookie 并提供一个选项
… 然后…
a) 我们有一个服务器端脚本,它可以使用 GD 或 ImageMagick 根据设置的 cookie 创建更小(大小/权重)的图像,
b) 我们使用 data 属性设置选项(移动优先?)。一个 JavaScript 根据 cookie 决定在屏幕上显示什么。
我们可以动态地在服务器端生成 CSS,也可以使用 AJAX 更改正在使用的 CSS 文件。
另一方面,我们可以在同一个 CSS 文件中设置低保真内容的规则,然后将它们附加到一个 body ID 上,这样你就可以简单地更改这些规则,并且只需根据带宽检测或用户选择添加(或更改)body ID 即可处理所有问题……这可以在同一个页面检测到“哎哟,这个页面加载时间有点长”时(就像 Gmail 在加载时间过长时提供更简单的 HTML 版本一样)宣布。
我不认为你需要检测/测量带宽,只需要让页面加载 x 秒。如果还没有加载,就提供精简版。
我不确定 CSS 是否需要动态/响应式生成,使用 AJAX 也可能适得其反。我认为直接设置 cookie 或提供一个备用 URI(例如,lite.website.com),并使用 URL 重写(例如 Apache mod_rewrite)来选择轻量级资源会更干净。
如果你真的想模拟一种带宽媒体查询,我想你可以默认提供低文件大小的图片,然后执行几个不同的 AJAX 调用来请求更高质量的图片。为 AJAX 调用设置一个较低的超时值,如果调用超时,那么我认为可以安全地假设它们具有低带宽。这会导致一个奇怪的效果,即网站上布满了低质量图片,然后这些图片就像“魔术般”变得更好……而且一些前端开发人员无法处理涉及的 JavaScript 数量。这对于图片丰富的网站来说也会很麻烦,除非 img/div 标签有一些命名约定,而这些约定存在于 .gif/.png/.jpg 文件本身中……可能有很多方法可以改进这个过程……但这仍然是一个负担。
也许你还可以提供选项/设置,让用户可以默认请求更高质量的图片,并在 cookie 中存储他们的偏好,以便在以后访问时使用。
太棒了!这个提议有没有被提交给 CSS3 工作组?
我会默认提供一个压缩程度很高的图片,然后在页面完全加载后使用 JavaScript 加载更高质量的图片。
你让我燃起了希望,我以为是天堂降临了
这将非常棒,而且对我来说很合理。能够根据带宽提供页面将是那些仍然无法访问欧洲和美国普遍使用的超高速连接的许多用户的福音。
也就是说,我不确定我们是否会在短期内看到它发布……这让我很伤心。W3C 有没有人我们可以塞 5 美元,让他们快速处理一下?;)
这将是相当棒的。我表示支持。
以下是 WHATWG 邮件列表中关于带宽媒体查询的一些讨论。虽然理论上是个好主意,但我认为这些不会在本地实现。
http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-May/035964.html
我相信它比 CSS 可以处理的更多。我的网站上的内容来自互联网上的许多不同的服务器。一些内容来自我 100Mbps 的连接,一些来自 YouTube、Vimeo、Facebook、Rackspace、Akamia、Amazon S3 等等。
如果用户的连接速度很快,但其中一个服务器的速度很慢,CSS 该怎么办?例如,如果 Amazon 或 Vimeo 再次出现问题,即使其他内容可能以 100Mbps 以上的速度传输,页面平均加载速度也可能很慢。当一些内容通过透明代理以远远超过可用互联网带宽的速度传输时,会发生什么?
我认为最好在服务器端优化内容。让 Apache 和 IIS 动态重新格式化图片和内容。让我们在服务器上有一个选项,当 HTML、CSS 和 JS 语法正确时,我们可以动态最小化它们。当然,Web 服务器应该缓存这些最小化。让我们让 Apache 和 IIS 动态将图片转换为渐进式下载。让我在我的 Web 服务器上存储一个未压缩的图片,并依靠 Web 服务器根据服务器认为合适的方式动态调整大小并使其成为渐进式下载。
CloudFlare、Metacdn.com、Amazon 和 Rackspace 负载均衡器、Citrix Netscaler ADC 等等,在不同程度上都存在这种情况。AOL 的拨号上网有服务器端图片重新压缩。
这是一个好主意,即使它只是判断连接是 WiFi 还是其他。我一直想到那些从纵向旋转到横向导致一组新的“更宽”图片下载的情况。