某些桌面操作系统市场份额的统计数据我看了是存疑的。现在的电脑设备都是预装 Win11,不可能过气的 Win7 市场份额会多于 Win11。
所以我根据我写的一些软件检测更新的 UA 统计了一下桌面操作系统占比,结果如下( 仅统计中文系统 ):
桌面系统占比最大的是 Win10 ( 60%),其次是 Win11 占比 34%。
Win10 用户中 Win10 21H2 占比最高(35%),其次是 Win10 21H1 占比 9%,Win10 1809 占比 5%,而其他 Win10 用户的系统版本基本都高于 Win10 1809 ,低于 Win10 1809 的系统只有 1% 左右。
Win7 的占比很小只有 5%,WinXP 的占比太小可以忽略。
从一些第三方统计数据来看,macOS 与 Linux 加起来的桌面操作系统市场份额小于过气的 Win8,而且这里讨论与统计的都是 Windows 软件,所以我们仅讨论 Windows 系统占比。
下面我再分析一下桌面系统占比对桌面软件开发的一些影响:
1、我们知道在 aardio 中可以非常方便地调用系统自带的 .NET (C#) ,有利于生成体积极小的 EXE,也有大量 .Net 开源组件可以使用。下面先看一下各操作系统自带的 .NET 版本:
Win7 自带 .Net 3.5.1,支持 lambda
Win8 自带 .Net 3.5.1 .Net 4.5
Win10 自带 .Net 4.6
Win10 1709 自带 .Net 4.7.1 ,支持 ValueTuple
Win11 自带 .NET 4.8
看到这个,你可能会想用个 ValueTuple 还这么麻烦,还要 Win10 1709 ,不然还要自带一个 System.ValueTuple.dll …… 其实这样说的都是很久以前的文章了。从前面的统计占比可以看出 Win10 1809 以下的系统占比都小到可以忽略,不要说 Win10 1709 了。所以这个 ValueTuple 其实可以放心地使用,不用带什么 System.ValueTuple.dll。
一个例子看一下 aardio 现在调用 .NET 有多方便:
import win.ui;
var winform = win.form(text="DataGridView")
import System.Data;
var tab = System.Data.DataTable("DT");
tab.Columns.Add("名称");
tab.Rows.Add({"WangWu"});
import System.Windows.Forms;
var grid = System.Windows.Forms.CreateEmbed("DataGridView",winform);
grid.ColumnHeadersHeightSizeMode = 2;
grid.DataSource = System.Data.DataView(tab);
winform.show();
win.loopMessage();
2、Win11 自带一个极重要的浏览器组件 WebVIEw2 ( aardio 标准库中的 web.view 就是基于 WebView2 ),实际上 Win10 上 WebView2 的普及率也在快速增长。要注意 WebView2 是共享组件,有利于生成体积很小的 EXE 文件。WebView2 拥有最新的现代浏览器内核、强悍的性能,并且接口简洁,使用很方便。
WebView2 到底有多好用,直接上 aardio 代码演示一下:
import win.ui;
var winform = win.form(text="Ping");
import web.view;
var wb = web.view(winform);
import process.popen;
wb.external = {
ping = function(domain){
var prcs = process.popen("ping " domain);
for( all,out,err in prcs.each() ){
wb.invoke("document.body.insertAdjacentText",'beforeend',all);
}
return "恭喜,事做好了!"
}
}
wb.html = /**
<body style="white-space: pre;"><script>
doSomething = async() => {
var result = await aardio.ping('www.example.com');
document.body.insertAdjacentText('beforeend',result);
};
</script>
<button onclick="doSomething()">开始干活了</ping>
**/
winform.show();
win.loopMessage();
3、Win10 1803 开始就自带了 WebView1 控件,虽然比不上 WebView2,但仍然是很强大的。从前面的桌面系统占比数据可以看出,Win10 1809 以下的系统占比其实很小,所以 WebView1 也就可以放心使用了。
aardio 中的 web.sysView 扩展库就是基于 WebView1。这个 web.sysView 的接口与用法与 web.view 很像( 参考 aardio 自带范例 )。这是使用 aardio 的一个好处,很多库的用法与接口都相近,上手成本低。
4、HTMLayout 是一个著名的类浏览器组件,但是更适合桌面软件界面开发,体积也非常小,且兼容 WinXP 系统。HTMLayout 的下一代产品是 Sciter,Sciter 有更好的性能,支持现代 JavaScript ,但不支持 WinXP 系统。从前面的桌面系统占比数据可以看出,现在可以放心地使用 Sciter 替代 HTMLayout 了。
aardio 中的库 web.layout 基于 HTMLayout,而 aardio 扩展库 web.sciter 基于 Sciter。web.layout 与 web.sciter 的接口用法基本一样,很多东西都可以通用。
5、还有一个常常被我们低估的 IE 控件,在新版操作系统 IE 浏览器虽然被移除了,但 IE 控件却被作为系统组件保留了。从前面的桌面操作系统占比我们可以看出,IE 控件核心基本都在 IE11 以上,并且不会再发生大的变更,可以生成体积极小的 EXE,比 WebView2 更轻量。
也许有人会问既然有强大的 WebView2 ,为什么还要使用 IE 控件呢?这你就错了,如果你拿 IE 控件跟我们常用的 static 控件比一下,哪个更强大呢?!难道我们因为 static 控件功能更弱就不再使用 static 控件吗?!
所以物尽其用,IE 控件仍然是好东西。aardio 标准库中的 web.form 基于 IE 控件,用法非常简单,可参考范例:
6、在前面的文章中我介绍过利用 Win10 / Win11 系统自带的 Chakra.dll 执行 JavaScript ,兼容 ES6 。从上面的桌面系统占比可以看出,这个组件也可以放心地使用了。
下面看范例体验一下 Chakra 的强悍性能,舒服的 ES6、箭头函数、let、const 、类 …… JavaScript 直接调用 aardio ,aardio 直接调用 JavaScript,简单粗暴不麻烦。最重要的是调用系统组件,不增加软件体积:
import web.script;
var chakra = web.script("ES6");
//导出 aardio 函数到 JavaScript
chakra.external = {
log = function(...){ }
}
chakra.script = /**
external.log("JavaScript 调用 aardio 函数");
var test = function(arg){
let result = 0;
let numbers = [1,2,3];
if(Array.isArray(numbers)){
numbers.forEach( (value) =>{
result = result value;
});
}
return arg result;
}
**/
//调用 JavaScript 函数
var ret = chakra.script.test(1000) ;
新的系统环境带来的好处不止上面这些,这里只是捡几个典型的讲一下。如果你刚开始学习 aardio ,刚开始学习桌面软件开发,说不一定等你学好了、软件也开发完成了, Win7 的那 5% 的占比也快丢光了。
,