论述
浏览器,也就是B/S架构,是软件复用的典范。
如今只需要点开一个链接就能访问到目标内容。
没有浏览器则会多出下载-安装的步骤,而如果不满意其功能,又要卸载。
在手机上还好说,在桌面端权限限制并不严格,你不知道应用程序在哪个目录下创建了你不认识的文件。(手机上有授权,但是也是不知道在哪里创建文件了)
因此长此以往,系统环境会恶劣到一定程度,而在浏览器上清一下缓存就行了。
缺陷
跨域限制
为了安全,浏览器对自身设置了跨域限制。
例如,你打开的一个恶意标签页可能读取你在另一个标签页中银行网站的登录凭证,或是以你的身份执行不当操作。
- 无法访问不同源的API(服务器端可以设置允许)
- 不同源的iframe页面之间,JavaScript无法相互访问或操作对方的DOM结构。
- 无法读取不同源网站的Cookie、LocalStorage、IndexedDB等本地存储数据。
其中比较有趣的一点就是API跨域访问限制,虽说服务器端可以设置允许跨域CORS。
但是假如服务器不受你控制呢?比如某些图床提供API访问,你写了个网页尝试去调用,发现无法跨域。
如果是写一个应用程序去调用API,那p事没有,为什么浏览器要画地为牢呢?
前面提到过安全。
浏览器默认是不信任网页的,假如允许了跨域访问,那么CSRF攻击就有可乘之机。
而应用程序,无论是PC还是移动端,都从来没有考虑过去限制跨域。
你进入一个不认识的网页,这是合理的。因此浏览器设计了诸多安全机制防止恶意网站窃取数据。
你打开一个未知APP,这是不合理的。应用程序拥有足够高的权限去窃取你的数据。假如你安装并打开了应用程序,在设计的意图上,默认你是对他知根知底的。
当然,普通用户肯定是无法避免地去使用一些不了解的应用,因此病毒查杀软件非常流行,至少在PC上(毕竟下载双击就直接运行了,少一步安装)。
文件读写
浏览器访问文件需要用户手动选择(也是出于安全考虑,不然太危险了)。
性能
浏览器占用内存量实在太大,js引擎执行效率不佳。
PWA之死
PWA曾是Web生态进入移动端的一次尝试,然而如今已经半死不活,至少在国内如此。
PWA的作用:
- 在桌面创建图标(windows上可以加入开始菜单)
- 通知
- 离线使用
- ...
PWA是一个概念,即使不创建manifest文件,不提供安装按钮,照样能够离线使用,创建通知
kungal也是一个PWA应用。

PWA为什么没发展起来?
- 移动端国产大多数浏览器不支持PWA
- PWA依旧被浏览器限制得死死的。
你打开一个PWA应用,浏览器插件依然会运行,你的快捷键依旧是浏览器的快捷键。也就是说,PWA应用依然处于浏览器框架下,被浏览器环境所污染。
这一点其实挺重要,因为你永远不知道目标浏览器被做了何种魔改,假如你的用户到时候因为这个浏览器的特性去反馈你的应用有问题,那不是白白浪费时间?
-
离线的网页没什么使用场景
对于企业来说,离线访问没有任何用处,收集不到用户访问的情况,投递不了广告。
应用商店
谷歌商店是提供PWA应用安装的,然而国内谷歌商店的使用情况可想而知。
国内的应用商店没有PWA应用。
失去了中心化的应用商店,PWA应用只能依靠自己的网站来做推广。
APP几乎一定是符合移动端操作逻辑的,而PWA则可能只是网页套壳,没有对移动端进行优化。
苹果方面,PWA应用影响到苹果赚钱了,因此他们不积极。
集成
在手机上,PWA应用只是一个图标和启动方式而已,假如使用搜索功能,是无法搜索到的。
模范PWA应用
谷歌制作的图片格式转换工具,我用它压缩图片。
小程序
国内的小程序其实还挺像PWA。
小程序的优势在于:
- 自带认证,一键登录
- 应用集成,比如微信中的支付、群聊
现在TG也有小程序了。
假如
假如浏览器能够再发展一下,考虑某种认证机制,允许通过认证的机构获取权限比如说直接访问文件之类的,再结合PWA,让用户安装后才能使用权限,然后再隔离一下插件和快捷键,直接把Electron干懵逼。
