7 个版本
使用旧的 Rust 2015
0.0.6 | 2017年11月13日 |
---|---|
0.0.5 | 2017年11月7日 |
0.0.3 | 2017年10月31日 |
#45 in #detail
在 css-autoprefix 中使用
410KB
3.5K SLoC
caniuse-serde
caniuse-serde 是一个 rust crate,用于访问 caniuse 数据库。它使用 Serde 1.0 解析 JSON。它不会创建一个编译时完美的哈希表,因此允许支持 caniuse 数据库 的不同版本。
它附带了一个最新的 caniuse 数据库,默认情况下嵌入式;目前版本为 1.0.30000746
。
许可证
本项目的许可证为 MIT。 caniuse 数据库 可在 CC BY 4.0 许可证 下使用。对 caniuse 数据库的归属权为 "caniuse.com"。有关 caniuse 数据库 的问题,可在 http://a.deveria.com/contact 进行咨询。
lib.rs
:
caniuse-serde
一个用于与浏览器(代理)功能和区域使用数据数据库 https://caniuse.cn 交互的 Rust 库 crate。附带嵌入式数据库版本,也可以与外部副本(JSON 文件)一起使用。
入门
要开始
extern crate caniuse_serde;
use ::caniuse_serde::{EmbeddedCanIUseDatabase, AgentName, FeatureName};
查找代理详情
let agent = AgentName::MozillaFirefox.agent(EmbeddedCanIUseDatabase).unwrap();
查找功能详情
let feature = "transform3d".into().feature(EmbeddedCanIUseDatabase).unwrap();
区域使用
- 使用
regional_usage
模块中的常量来获取区域、大陆和全球使用数据。 - 要复制 'browserlist' 的功能,请使用 RegionalUsage 上的
query()
方法。 - 或者阅读下面的更有用的方法。
- 使用枚举
RegionalUsages
和方法regional_usage()
获取对嵌入式 RegionalUsage 数据库的引用。
使用caniuse数据库配合browserlist行为策略
浏览器厂商(例如IE与Chrome)对版本的概念理解不同,因此仅仅说“最新两个版本”并不特别有用。在实践中,需要使用数据库中的数据,结合选择规则来识别一组需要支持的浏览器和浏览器版本。这些选择规则可能会在几个月或几年内保持稳定,但长期来看不一定。
我为一个用英语编写并翻译成西班牙语、法语和意大利语的专业国际顾问网站确定了自己的选择规则。我将这些规则作为代码添加到这个包中,以确保我围绕caniuse.com数据库编写的API实际上是可以使用的。
要使用我的选择
最快的方式是使用sensible_choices()
或sensible_choices_default()
:-
extern crate caniuse_serde;
use ::caniuse_serde::*;
use ::caniuse_serde::regional_usage::*;
let (can_i_use, choices) = sensible_choices_default();
let feature_name = FeatureName("css-focus-ring".to_owned());
let mut unique_prefixes = HashSet::new();
choices.support_for_a_feature(&can_i_use, &feature_name, |agent, version, support| {
if support.requires_prefix() {
unique_prefixes.insert(agent.prefix(version).clone());
}
});
assert!(unique_prefixes.contains(&Prefix::moz));
assert_eq!(unique_prefixes.len(), 1);
我的选择规则
- 仍在使用的过时浏览器
- 我们需要支持这些浏览器的最新版本,直到其使用率低于X%
- 使用率应针对世界的一个子集(即目标受众的洲或国家)
- 这些浏览器包括:- - IE(版本11)
- Blackberry浏览器(版本10)
- IE手机(微软已放弃Windows Phone)
- 渲染引擎发生重大变化的浏览器
- 这实际上使旧渲染引擎的最后一个版本过时了
- 规则与过时浏览器相同,但选择需要意识到存在“较新”的版本
- 这些浏览器包括:
- Android浏览器(版本4.4.4)
- 带有Presto的Opera
- Android浏览器(版本4.4.4)
- 自动更新的浏览器
- 这些浏览器的版本寿命较短,通常不到一年
- 最好通过匹配特定发布日期(例如2年前)之后发布的所有版本来发现它们
- 使用百分比并不明智,因为每个版本的使用率都会迅速变化(从几乎为零到几个百分点,然后再次接近零),而且肯定比静态网站重建变化得更快
- 这些浏览器包括:
- Firefox
- Safari
- Microsoft Edge
- Chrome
- 使用WebKit渲染引擎的Opera
- 自动更新浏览器的长期版本
- 这些浏览器偶尔会发布长期版本,这些版本旨在支持一年或更长时间
- 这些浏览器的使用率可能在全球范围内非常低,它们可能比9个或更多的发布版本“过时”,但它们代表了一个重要的受众
- 实际上,每个长期版本支持的时长会随着每个发布版本的变化而变化,尽管厂商有“长期发布政策”
- 这是因为政策在长期版本之间的长期间隔中发生变化
- 这些浏览器很难识别,因为caniuse.com数据库没有包含它们
- 一些长期发布版本在支持的功能上略有不同,特别是那些更具实验性质的功能,与它们的短期发布版本略有不同(即使它们可能具有相同的重大版本号)
- 对于Firefox,ESR发布版本据说是一年(实际上,54周,“9周期”,发布之间的重叠为12周(“2周期”),周期是Firefox发布周期,通常是6周),但,正如这些类型的发布总是会发生的那样,政策已经改变了好几次。
- 这些浏览器包括:
- Firefox
- 对区域有重要意义的偶尔自动更新的浏览器
- 对印度的亚洲市场来说,支持这些浏览器尤为重要
- 许多较便宜的智能手机都配备了它们(我也使用过它们)
- 厂商通常不会升级已安装的旧固件版本,一些较旧的版本可能比较新的版本使用率更高一段时间
- 它们目前都只是比Chrome更早的WebKit渲染引擎版本
- 这些浏览器可能最适合使用“超过X%规则”,其中X代表任何版本
- 这些浏览器包括:
- UC浏览器
- 三星浏览器
- QQ浏览器
- 百度浏览器
- 与主流浏览器非常不同,不支持
- Opera Mini是一款优秀的产品,但除非明确针对其用户群体,否则不支持它没有太大意义
- 如果目标是针对其用户群体,其缺乏现代功能(使其成为最低公共分母)意味着网站开发不会利用caniuse.com数据;差异太大。
依赖项
~2.7–4MB
~99K SLoC