UfqiNews有福新闻的第N+1批次更新:清晰,流畅,省电

UfqiNews有福新闻自推出以来,一直持续更新、优化升级,作为一款带来全新新闻阅读体验的资讯应用,已经日益成熟,浏览量也日渐攀升。

近日针对 UfqiNews有福新闻的升级改进包括如下方面。

1. UI调整优化,清晰易读的页面导航

改进页面导航,调整优化明晰的跳转指示:

UfqiNews利用各种方向的箭头,类似物理世界的导航一样,简单明了。
而且在不同的操作系统平台上,如 iOS, Android后者WIndows中,不同的箭头又以各自平台的UI特色显示出来,
与本地风格融合更好。
.
 

2. +分享功能,简单易用的新闻分享

为便于用户将页面分享出去,尤其是分享到各个社交网站,UfqiNews增加 ShareThis 分享按钮。

用户可以很方便地通过页面底部使用 ShareThis 将当前页面分享出去。

+  点击 AddToFav 或 Ctrl+D  52次转发  

通过 ShareThis 按钮可以直接链接到 数十种社交网站。

3. 调整缓存策略,页面加载更快,link prefetch/preload

UfqiNews在有限的计算资源和带宽资源下,尽快地加载并呈现页面,一直是我们的技术团队努力的方向。 在这方面UfqiNews近期的主要努力包括:
1) 改进资源文件:图片、样式表CSS和脚本程序Scripts的缓存机制,使得这些资源在一个会话时间段内,只需首次从服务器下载并缓存到本地后,在该时段内,后面的页面加载时,这些资源文件都将从浏览器的本地缓存中自动加载,而无需每次从服务器端下载。
这将极大地改进页面加载速度。在资源类文件的 HTTP返回中,增加如下 HTTP headers.

HTTP/1.1 200 OK
Date: Sat, 14 Sep 2019 01:36:17 GMT
Last-Modified: Mon, 30 Jul 2018 08:59:19 GMT
ETag: “e2a-57233ad3e67c0”
Cache-Control: max-age=604800
Expires: Sat, 21 Sep 2019 01:36:17 GMT

2) 使用 link preload/prefetch 指令进行预加载
在支持预加载指令的浏览器中,UfqiNews使用 link preload / prefetch 指令,对接下来即将浏览的页面或资源进行自动加载。如在 list页面,自动加载 下一个 page; 在新闻详情页面,自动加载下一个 item,如此以来,当用户进行翻阅下一页时,页面将会实现秒开。

4. 重构爬虫引擎,抓取采集更节能

UfqiNews在生产端,有一个设计复杂的新闻爬虫系统,主要负责从各大新闻站点,将当地、当天最热门的新闻条目抓取回来。抓取回来的新闻页面内容进一步地使用自然语言处理技术对这些新闻条目进行分析,然后分门别类地列如到相应的类目下,供进一步地读取调用和使用。

这一页面抓取及分析系统,是分布式的计算系统,最早的设计其内容的流转是依靠NFS系统作为页面文件的承载服务。

(UfqiNews页面抓取系统/爬虫系统)

UfqiNews的分布式系统支持将这一爬虫系统部署成为一主多从的结构,可以同时启动N多个Node,而每个Node里又可以启动M多个进程。从而形成强大的页面抓取能力,及时并行处理N*M个新闻页面。

像所有的分布式系统一样,UfqiNews需要有一种机制或者队列能保证数据的一致性,UfqiNews依赖NFS的网络文件分享机制,将内容和页面队列写入到一个NFS文件中,并且顺序读取,从而保证了页面读取的一致性。

在单个NOde上并行运行M个进程时,NFS及内容读写磁盘系统,都需要以来文件IO来实现,一个偶尔的机会,当我们观测到跑在VmWare虚拟机中的耗电量在Windows的 Task Manager 中的“Power Usage” 和 “Power usage trend” 都为“Very high”, 进一步地分析发现,导致耗电量非常高,是由于 UfqiNews的生产爬虫系统的缘故。

(UfqiNews生产系统耗电量分析)

这种耗电量的现象,我们觉得是不可接受的,既不绿色,也不环保。而且其背后更深层次的原因也好理解,频繁地文件IO读写访问,一定是要高频度地调用设备驱动,进行实际磁盘操作。

在此之前,我们在review 目前的设计时,也觉得,依赖NFS并非长久之计,也非上上之选,只是觉得应该改进优化,这次发现UfqiNews如此高耗能,成为压垮骆驼的最后一根稻草,必须对UfqiNews的文件IO及其队列做进一步的优化改进了。

最早的设计中,我们希望构建一套网络服务,用于存储在 UfqiNews运转过程中的数据,类似 AED Server这种的设计与操作。这次在对UfqiNews进行重构设计时,我们发现问题的焦点在某种服务对文件IO的接管,也即无论是页面队列,还是新闻页面内容,将写入文件的内容,存储到内存或者某个中间服务时,用完即可删除。

这种场景用 AED Server 是合适的,将页面内容或者页面队列存储到 AED Server 中去,可以满足需求,同时,也可以看到,类似的需求,与常规的”缓存“服务也很相似。

沿着这一思路,我们考虑使用 Memcached 或者 Redis 来接管真实的文件IO,或可解决目前的问题。于是我们就使用该方法对 UfqiNews的爬虫系统进行优化完善。

在凡是需要读写操作文件IO时,均改为读写 Memcached 的服务,对于页面内容,直接存取即可。 对于页面队列,则需要使用数组的形式,对其中的内容做动态更新,放入新生成的条目,同时丢弃已经处理完了的条目。

经过几周的断续修改和调整,我们逐渐将 UfqiNews 的爬虫系统中的过程内容的文件IO全部替换为读写 Memcached ,Ufqinews的运行时耗电量也从 “Very high” 逐步降低下来。

Very high — High — Moderate — Low — Very low

尽管目前没有定量的数据,但Windows系统中的这个耗电量5级划分应该是有一定的依据的,而是次优化调整,也真切地显示出来。

作为软件编程技术人员,我们一直在谈论算法改进,程序优化,但改进前后效果对比如此立竿见影天壤之别的情况,还很少见,体会也没有如此强烈。

5. +内容链接静态化,优化SEO,对搜索引擎索引更加友好

针对页面链接地址做进一步的调整,增加如下两个快捷链接到主要页面:

1)列表页面, list.123,456.html , 指向原来的 ./?pnskwordid=123,456

2) 内容详情页面, page.1234.html  , 指向原来的 ./?mod=rdr&pgid=1234

改进后,伪静态页面将根据有利于搜索引擎的抓取和页面分析。

 


ufqinews logo
有福新闻 UfqiNews

这里呈现热点全局, 尺寸间一览所有令人关注的疑点焦点;
这里表达条分缕析, 视野内一睹各个脉络清晰的故事主线.

有福新闻UfqiNews 带来全新的资讯阅览体验, 不信息过载, 亦不信息茧房.

在寻求最大社会共识和满足千人千面之间谋取平衡,
在满足广泛涉猎与追求术业专攻之间谋取平衡.

媒介插上人工智能的翅膀将如虎添翼, 与资讯比翼双飞.

新闻爱好者的良心之选, 匠心之作.

UfqiNews presents the hot spots globally, with all interesting points at a glance.
Information is organized here and there is a clear storyline within every single detail.

UfqiNews brings a brand new reading experience, no information overload and no information Cocoons,

In seeking a balance of the maximum social consensus and meeting thousands of people for each interest,
In achieving a balance between satisfying a wide range of hunting and pursuing specialization in the industry.

That media is being born with wings of the artificial intelligence will be even more powerful and the information will fly swifter than ever.

Better choices of newsreaders and the art of work from them.

 

此条目发表在UfqiNews有福新闻, 服务器运维, 社会生活, 编程技术, 计算机技术分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。

UfqiNews有福新闻的第N+1批次更新:清晰,流畅,省电》有3条回应

  1. Pingback引用通告: UfqiNews有福新闻更新:提质增效 | -wordpress-wadelau

  2. Pingback引用通告: UfqiNews有福新闻更新:提质增效 | -UFQI-Blog

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code