使用进程池提高Node.js并行计算能力背景Node是单线程模型,当需要执行多个独立且耗时任务的时候,只能通过child_process来分发任务,提高处理速度;不像Java这种多线程语言,可以通过线程来解决并行问题,Node只能创建进程来进行处理;但是进程相对于线程来说,开销太大。一旦进程数较多时,CPU和内存消耗严重(影响我干其他的事情),所以做了一个简易版的进程池,用来解决并行任务的处理。
适用场景:相同且独立且耗时的任务,例如,拿到某网站1000个用户的账号密码,我现在想要他们的信息,爬他,node-process-pool非常适合。
阅读全文
前端路由的实现前端路由分为两种实现方式:
HashHistory,通过修改location.hash,然后监听hashchange事件来进行对应操作。
BroswerHistory,通过HTML5提供的History对象的pushState、replaceStateAPI,然后监听popstate事件来进行对应操作。
二者的优劣:
第一种方法兼容性更好,但是实现比较复杂,并且url比较丑陋(例如:http://www.test.com/#/xxx)。
第二种方法是浏览器提供的能力,所以实现比较简单,url与正常相同(例如:http://www.test.com/xxx),但是可能存在兼容性问题。
其实还有第三种,MemoryHistory,用于non-DOM环境下,例如React Native。
阅读全文
Process and Thread are most important concepts in Operating System.
阅读全文
如果可以,为什么我们不自己打造一款没人用的前端框架呢?
首先介绍如何创建虚拟DOM节点以及将虚拟DOM节点转化为真实DOM节点,参照React/Preact
阅读全文
Redis Cluster是Redis的分布式解决方案,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster的架构来达到负载均衡的目的。
阅读全文
Redis Sentinel 是一个分布式架构(Sentinel节点、Redis数据节点、Redis客户端分布在不同的物理节点上),其中包括了若干个Sentinel节点和Redis数据节点,每个Sentinel节点对数据节点和其他Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。若该节点为主节点,它会和其他Sentinel节点共同协商,若大部分节点皆表示该主节点不可达,那么就会从Sentinel中选举出一个Sentinel节点来完成自动故障转移的工作,同时将这个变化实时通知给Redis应用方。
阅读全文
在分布式系统中为了解决单点问题,通常会把数据复制成多个副本部署到不同的机器上,以满足负载均衡和故障恢复等需求,Redis也是如此,Redis支持简单且易用的主从复制(master-slave replication)功能。
阅读全文