Quantcast
Channel: 少数派
Viewing all articles
Browse latest Browse all 13768

[送码] 让你在浏览网页时也能获得 App 般的流畅体验:无相浏览器

$
0
0

当我们在使用手机浏览器时,总会被各种各样的因素所干扰。比如辣眼睛的广告,混乱的布局,以及糟糕的设计等。但是 iOS 上又一直缺少一种改造网页的能力。

作为一个全干程序员,我曾做过各种各样的网站和 App,这两者其实具有很大的结构相似性。而 App 带来的体验往往要优于网站。那么我就想为什么不做个可以把网站转换成 App 的 App 呢?经过多次快速的脑洞碰撞后,我带来了「无相」浏览器,它可以将网页「原生化」让你可以专注于浏览和阅读,并且拥有原生 App 的体验。

「无相」可以做什么

当我们打开一个网页的时候,我们更倾向于把目光集中在最重要的信息上,甚至只想看见他们,不需要多余的修饰。「无相」就能够帮你做好这件事,首先它会通过「相」识别网页里最重要的信息。

无相可以识别网页中有意义的信息
无相可以识别网页中有意义的信息

这时网页里最重要的信息已经解析了出来,就可以像 AdBlock 那样把其它所有元素都删了,网页会变得干净清爽很多。但我们其实可以做一个更酷的事:扔掉浏览器内核,自己做一个渲染引擎,将数据直接转换成原生 UI。

将数据直接渲染为原生界面
将数据直接渲染为原生界面

这样不仅可以节省系统运行内存(浏览器内核的渲染树、JS解析引擎通常会大量占用内存),还可以极大增强网页的交互体验。

剔除「噪音」后的阅读模式也可以让您更加专注于阅读。

阅读模式让您更加专注于阅读
阅读模式让您更加专注于阅读

而对于一些没有针对移动设备进行优化的网站,无相的表现尤为出色。

小说阅读模式
小说阅读模式

无相还有很多的其它的可定制的控件,比如 Drawer菜单,让您在阅读书籍或者浏览某些网站时可以快速导航。

Drawer 可以提取目录或者显示菜单
Drawer 可以提取目录或者显示菜单

另外测试版本已经支持 Audio,Image,Button等基础控件,可以让您更加灵活的定制网站的样式。

总而言之,无相是一款将网页原生化的浏览器,它可以删繁就简,去冗存真。而这一效果,通过「相」直观地展现了出来。

相是什么?在哪儿?怎么用?

无相本质是一个解析及渲染引擎,而相就是使用这个引擎的钥匙。

相是一个只有 1k 左右的文本文件,里面存储了目标网站的结构信息。它的作用是告诉「无相」如何识别网站的内容以及怎样重新渲染。「无相」有一个内置的「相空间」,这里展示了由用户社区贡献的相,你只需要点下 下载按钮,它就会出现在你的 App 首页上,轻点就可以使用该相浏览网站。

null

无相的其它优势

传统浏览器需要花费更多的时间去下载 CSS 样式表和JS文件,有了这些样式表浏览器才知道该如何显示(颜色、字体大小、布局等)网页。而无相是不用加载网站的 CSS/JS 文件就可以直接渲染的,这就让「无相」快器一步。

说到这里你应该已经想到了另一个好处:节省流量。CSS/JS 文件一般是 HTML 的几倍甚至十几倍大小,日积月累下来流量消耗也十分可观了。

去广告的「副作用」

由于「无相」是奔着有效信息去的,这其中往往不包括广告,所以很遗憾,我没针对广告,广告却因此而死。

不被跟踪

网站中的 JS 文件除了支撑网站本身的内容外,它还有另外的功能:对你的搜索、浏览行为进行跟踪,并通过一个识别符建立你的信息库。因此经常会出现搜索了一个词后,其他网站的相关广告接踵而至的现象。

而无相因为不加载 JS,所以你在「相」中进行浏览、搜索时,这些信息是不会被跟踪的,你不必担心用「相」搜索了一个词后,在别的网站遇到意外的惊吓。

兼容模式

当没有「相」可以匹配要访问的网站时,无相将回退到传统的浏览器模式进行访问。你也可以在「相」中随时切换到浏览器模式。

为何没有我派?

这是因为「无相」有一个限制:网站必须是静态的(服务器渲染),而少数派的页面其实 JS 动态加载数据展示的。不过,我在后续的版本中有计划加入 RSS 支持,只要有 RSS 同样可以原生化。

定制无相

如果您懂一点点的 HTML/CSS 知识,就可以使用无相的编辑器自己制作任意静态网站的像,还可以将其分享给所有用户使用。

送码

您在使用移动浏览器的过程中遇到过哪些痛点并且觉得「无相」可以帮助解决的,或者对无相有什么期待,在此评论我将根据有效建议的数量送出不少于 5 个的兑换码。


Viewing all articles
Browse latest Browse all 13768

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>