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.

-R/S2SM

Image placeholder
biaoge
未设置
  80人点赞

没有讨论,发表一下自己的看法吧

推荐文章
Git教程_2.2 Git 基础 - 记录每次更新到仓库

记录每次更新到仓库 现在我们手上有了一个真实项目的Git仓库,并从这个仓库中取出了所有文件的工作拷贝。接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。 请记住,你工作目录下

K8s有多热?传统银行转型拥抱Kubernetes案例

Kubernetes已经成为标准的基础设施API,像RedHat、Mesosphere(现在的D2IQ)和Pivotal等供应商都无法避免。如果您希望使企业能够合理构建应用程序,那么Kubernete

17 万条人脸数据遭公开售卖;什么值得买辟谣删库跑路新闻;Oracle 修改 JDK 下载要求

苹果发布iPhone11,游戏和电视订阅服务每月4.99美元 苹果在周二的新闻发布会上发布了iPhone11、iPhone11Pro和iPhone11ProMax三款智能手机,9月13日开放预购,9月

node.js有什么用?

Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。Node是一个基于ChromeJavaScript运行时

css有不可继承属性吗?

css继承性:CSS继承可定义为特定的css属性向下传递到子孙元素,就是指被包在内部的标签将拥有外部标签的样式,即子元素可以继承父元素的属性。继承是一种规则,它允许样式不仅应用于某个特定html标签元

流畅的python学习笔记-第4章

第4章文本和字节序列[toc]编码和解码markdom可以插入emoji表情包其中作为前缀,x1f54为对应表情的unicode编码🥺emoji 把码位转换成字节序列的过程是编码;把字节序列转换成码位

流畅的python学习笔记-第5章

第5章函数[toc]函数在python中一切都可以视作为对象,包括函数deffunction_try(): '''itisfuncitontrydoc''' print('function_tryd

vue.js有哪些优势?

Vue是什么Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。简而言之:Vue.js是一个构建数据驱动的web界面的渐进式框架。Vue.js的目标是通过尽可能简单的A

流畅的Python读书笔记 --- 第一章 Python数据模型

近期开始读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网

软件架构被高估,清晰简单的设计被低估

软件架构最佳实践、企业架构模式以及系统描述的正式方法都是非常重要且实用的工具,总会有合适的场景让它们发挥作用。但在设计系统时,请从简单始、以简单终,尽可能避免一切会无谓提高复杂度的架构与正式工具。

清晰架构(Clean Architecture)的Go微服务: 日志管理

良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率。记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据。日志需求: 无需修改业务代码即可切

4.图片加载从模糊到清晰

很常见的一个效果虽然前端无法获知加载进度,但是可以通过效果来模拟通过先拉大预览的小图将图片模糊,然后再加载大图模拟效果效果预览:https://codepen.io/andy-js/pen/dyPZv

讲一讲Java的字符串常量池,看完你的思路就清晰了

课程推荐:Java开发工程师--学习猿地精品课程 前言很多朋友Java的字符串常量池的概念困扰了很长一段时间,最近研究了一下jvm指令码,终于对它有了大概的了解。在展示案例前,我们需要先搞清楚一个概念

滴滴从KV存储到NewSQL实战

桔妹导读:本文讲诉滴滴在分布式Nosql存储Fusion之上构建NewSQL的实践之路。详细描述Fusion-NewSQL的特性,应用场景,设计方案。1.背景Fusion-NewSQL是由滴滴自研的在

滴滴 NewSQL 演进之 Fusion 实践

本文根据滴滴数据库存储专家余汶龙,在DTCC中国第十届数据库大会的演讲整理而成。余汶龙滴滴出行技术专家,曾经在VMware、淘宝、阿里云从事虚拟网络及存储领域的工作。现负责滴滴自研的NoSQL存储、N

Go语言高级编程_4.2 Protobuf

4.2Protobuf Protobuf是ProtocolBuffers的简称,它是Google公司开发的一种数据描述语言,并于2008年对外开源。Protobuf刚开源时的定位类似于XML、JSON

Go语言高级编程_4.6 gRPC和Protobuf扩展

4.6gRPC和Protobuf扩展 目前开源社区已经围绕Protobuf和gRPC开发出众多扩展,形成了庞大的生态。本节我们将简单介绍验证器和REST接口扩展。 4.6.1验证器 到目前为止,我们接

Go语言高级编程_4.7 pbgo: 基于Protobuf的框架

4.7pbgo:基于Protobuf的框架 pbgo是我们专门针对本节内容设计的较为完整的迷你框架,它基于Protobuf的扩展语法,通过插件自动生成rpc和rest相关代码。在本章第二节我们已经展示

Protobuf 生成 Go 代码指南

这个教程中将会描述protocolbuffer编译器通过给定的.proto会编译生成什么Go代码。教程针对的是proto3版本的protobuf。在阅读之前确保你已经阅读过Protobuf语言指南。编

在 Golang 中使用 Protobuf

本教程使用proto3版本的protocolbuffer语言,提供了一个基本的在Go程序中使用protocolbuffer的介绍。通过创建一个简单的示例应用程序,向你展示如何在.proto文件中定义消

Protobuf 编码指南

这个文档会介绍protocolbuffer的二进制有线格式(binarywireformat)。你并不是需要理解这些后才能在应用里使用protocolbuffer,但是当你想知道不同的protocol

AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天

大数据文摘出品作者:曹培信、宁静2017年年初,BrainvsAI的德州扑克人机大战在卡耐基梅隆大学(CMU)落幕,由4名人类职业玩家组成的人类大脑不敌人工智能程序Libratus。获胜后人类还遭到了

Cache 和 Buffer 的区别在哪里?

Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很

深入了解Nodejs Buffer的使用

JavaScript起初为浏览器而设计,没有读取或操作二进制数据流的机制。Buffer类的引入,则让NodeJS拥有操作文件流或网络二进制流的能力。Buffer基本概念Buffer对象的内存分配不是在

@程序员,请万分珍重你的第一份工作

01、我的故事昨天我在群里发起了一个议题:读者朋友们,大家伙觉得第一份工作重要吗?回答不要太统一,重要个屁——不可能的。老读者都知道一些我的经历了。高考失利,因为太文弱干不了搬砖的活,就上了大专,大三