吴建金

Results 8 issues of 吴建金

# 浏览器缓存策略 ## 1. 前言 > 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。这样带来的好处有:缓解服务器端压力,提升性能(获取资源的耗时更短了)。对于网站来说,缓存是达到高性能的重要组成部分。缓存需要合理配置,因为并不是所有资源都是永久不变的:重要的是对一个资源的缓存应截止到其下一次发生改变(即不能缓存过期的资源)。 > > 缓存的种类有很多,其大致可归为两类:私有与共享缓存。共享缓存存储的响应能够被多个用户使用。私有缓存只能用于单独用户。本文将主要介绍浏览器与代理缓存,除此之外还有网关缓存、CDN、反向代理缓存和负载均衡器等部署在服务器上的缓存方式,为站点和 web 应用提供更好的稳定性、性能和扩展性。--- 摘自[《MDN - HTTP 缓存》](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ) 本文主要介绍浏览器缓存(即私有缓存)。在大多数场景下,缓存是最常见的优化手段,简单高效~ 缓存的优势特点: - Client: 重复利用资源,减少网络开销,请求更快地响应解析,更好的用户体验 - Network: 减少重复资源的网络开销,节省带宽,降低成本 - Server: 减小服务器负载,避免过载造成性能瓶颈,简单高效的性能优化手段 ##...

浏览器缓存
HTTP Cache

![image](https://user-images.githubusercontent.com/15242708/35682836-0aeded72-079d-11e8-9110-97a2a2bf4098.png) topic 的数量随着业务的增长逐渐增多,如何正确的设计 topic 成了当务之急。在这篇文章中,我们将重点介绍 MQTT 主题和最佳实践。 正如我们已经提到的,主题用于决定 MQTT 代理哪个客户端收到哪个消息。 后面我们还将讨论 SYS-topics,这是关于代理内部信息的特殊主题。那么我们开始吧。 ## 主题 (Topics) topic 是 UTF-8 字符串,代理用于过滤客户端的消息。一个主题由一个或多个主题层组成。每个主题级别由正斜杠(主题级别分隔符)分隔。 ![image](https://user-images.githubusercontent.com/15242708/35684808-f767e2ca-07a2-11e8-9260-c4c77798fbee.png) 与消息队列相比,话题非常轻便。在发布或订阅它之前,客户端不需要创建所需的主题,因为代理接受每个有效的主题,而无需事先进行初始化。 以下是一些主题示例: > myhome/groundfloor/livingroom/temperature > USA/California/San Francisco/Silicon Valley > 5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status...

MQTT

## 1. 背景介绍 - 每个人写代码的思维方式、思路、方法不同,技术水平也不同 - 谷歌发布的代码规范中指出,80% 的缺失是由 20% 的代码所引起的 ### 1.1. 程序员应该重视4点 #### 1.1.1. 正确性 - 在所有程序中使用的任何东西,都必须做你想要的,并且没有错误 - 代码风格并不会使程序更正确,但是在发布之前,检查工具可以帮你捕获一些错误 #### 1.1.2. 可读性 - 阅读和尝试理解程序比编写代码要花费更多的精力和时间,因此请为未来的自己和维护代码的其他人进行可读性优化 - 写 human-readable 的代码比风骚的走位更重要 ####...

Eslint
JavaScript

找了4个star较多的且还在维护的excel模块测试一下,导入问题不大,主要测试的是导出功能。 ## 选择 - exceljs (支持复杂导出,功能齐全;文档写的太烂,反正我是看了大半天,[github地址](https://github.com/guyonroche/exceljs)) - ejsexcel (支持复杂导出,功能齐全;国内大牛的开源项目,基于ejs模板渲染,[github地址](https://github.com/sail-sail/ejsExcel)) - node-xlsx (不支持复杂导出;基于js-xlsx,功能比较简单,[github地址](https://github.com/mgcrea/node-xlsx)) - excel-export (不支持复杂导出;需要一个xml作为导出模板,比较麻烦;且超过10个月没维护,[github地址](https://github.com/functionscope/Node-Excel-Export)) ## 工具 - node_7.0.0 - 31056条数据(一条记录,22个字段) ## 结果 简单的处理数据源并生成.xlsx文件,耗时仅为excel模块处理数据的时间 - excel-export: 4314ms - ejsexcel: 5128ms...

Nodejs
Excel

本人不才,分享一下系统架构方面的知识,个人经历单体应用架构--->分布式架构--->微服务架构 ## 基本概念 - 单体应用架构: 只有一个项目,且所有功能部署在一起 - 分布式架构: 一个应用拆分成不同的业务,部署在不同的服务器上;分散服务器压力; - 微服务架构: 分布式架构的延伸,进一步解耦复杂业务,多个微服务可以进行组合,组合后可以构成一个相对复杂的业务系统,以满足业务需求;目的是分散业务能力; ## 核心要素 《大型网站技术架构》中提到5大要素 - 性能 - 可用性 - 伸缩性 - 扩展性 - 安全性 详情可参考《大型网站技术架构》这本书以及 [这篇文章](http://www.cnblogs.com/me115/p/3662421.html) ## 理解误区 -...

架构

前端时间折腾过的蛋疼问题,好不容易解决了,现在把这个分享出去;众所周知,微信公众号分订阅号、服务号、企业号;每个号的用途不一样,接口开放程度也不一样。微信还有个扯淡的开放平台,号称统一管理众多公众号的。反正都是交钱的功能多,两个平台把我弄得傻傻分不清楚。 切入正题,上个公司有个微信订阅号,内嵌了一个微网站,并且要实现授权登录。这个授权登录的接口只有认证的服务号才能调用,订阅号要实现这个功能只能另辟蹊径; - 这个是微信公众号的api地址 ``` http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html ``` - 这个是开放平台的api地址 ``` https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN ``` 第一次尝试: ​ 我看了开放平台的api里的网页授权登录,里面有个网页授权登录。但是是扫码登录,根本不适用于移动端,折腾了半天,失败。 第二次尝试: ​ 方倍工作室有一篇文章说可以借助服务号的oauth interface,在订阅号里使用。api里也说是可以在未关注该公众号的情况下,获取用户基本信息,如下图: ![img](http://static.oschina.net/uploads/space/2015/1109/200909_zqon_2301144.png) ​ 实际上,然并卵。折腾了半天回调地址都没有code值,然后放到该服务号里或者关注该服务号就能获取到code了,这个该死的api 忽悠人。 第三次尝试: ​ 这种问题懂得人实在太少,百度又是个垃圾搜索,想找个预期的回答都很难。最后好不容易找到个跟我经历很像的哥们,成功解决该问题。 ![img](http://static.oschina.net/uploads/space/2015/1109/202002_KGVQ_2301144.png) ​ 这个逻辑就又回到第一次尝试了,然后把url的开头换成微信公众号里的开头,就能变向的实现微信订阅号里的授权登录。 前提需要在开放平台交300元认证费开通相关功能,并创建网站应用,等待通过...

Oauth
Wechat

nginx是一个高性能的HTTP和反向代理服务器;我的vps下安装的是32位的centos系统; ## 一、遇到的坑 - centos下自带的yum包管理工具是不带nginx ```bash $ yum info nginx ``` - 在yum里没有对应的nginx包 - 然后我就去找各种文章,也去过centos中文网搜相关文章,大部分都是下载二进制文件,然后编译!找了好几篇centos下安装nginx的文章,每篇内容都不太一样,一些细节处也写的不太清楚;我自己折腾了半天,怎么都编译不成功! ## 二、另辟蹊径 - centos是基于RedHat的开源项目,也可以使用rpm包管理工具;到nginx官网下载相应版本的包(i386为32位);https://nginx.org/packages/rhel/6/i386/RPMS/ - 用wget下载 ```bash $ wget https://nginx.org/packages/rhel/6/i386/RPMS/nginx-1.8.1-1.el6.ngx.i386.rpm ``` - 安装 ```bash $...

Centos
Nginx

## 一、前言   不知不觉node已经7岁了,我接触node也有1年多了(从 0.10.36 版本到现在的 6.2.0);node已经逐渐稳定并被广大开发者使用,伴随着ES2015的规范,node的发展势头被一致看好!从各个方面看,JavaScript这门开发语言已经有了成为跨平台语言的趋势: * web端开发 angular、react、vue等; * 后台开发 node; * 游戏开发 cocos2d-js; * 移动端开发 react native(性能介于webApp与native开发之间); * 桌面开发 nw.js(最近很火哦!);   之前特别火的web全栈工程师mean(mongoDB+Express+Angular+Node)就是基于JavaScript的;随着现在前端技术的快速发展、前后台的完全分离,前端的工作不仅仅是切切图写写静态页面了,现在的前端工作量还是挺大的,前端技术的发展迭代远远超过我的想象,当然最合适的才是最好的;扯远了,接下来讲讲我眼里的node ## 二、优点   在接触node之前,我写过一段时间的java,接下来我就用java这门非常广泛的后台语言与node作比较: * node写起来特别简单、容易上手,开发灵活; * 开发效率高:高到什么地步呢,几行代码就能完成一个http请求;...

Nodejs