好像在我们团队建立的初期,那还是两年多前,就有了打枪的传统。噢,这里要解释一下,这个打枪是指在手机上的FPS(第一人称射击)游戏,不是那个意思啦。那时还是玩BIA2(兄弟连),这个游戏太老了,以至于后面IOS升级后没法玩,官方也出了BIA3,但是联机不是这个游戏的特长,所以有很长的一段时间,打枪文化逐渐消退了。直到最近两个月,发现CFM(穿越火线手游版)可以联机实时PK,我们的这个文化又浮出了水面。每天中午吃完饭休息的时候都要来个三局两胜。你以为这篇是要介绍CFM,那就真的错了,下面我要给大家介绍一下我们打枪背后的那些事,其实就是我们的打枪计分系统。 计分系统1.0 这个计分系统的发起人是Johnny,Johnny喜欢数据,什么都喜欢搞个报表,他一开始的想法是搞个Excel,把我们每局的比分记下来,然后可以看到每个人的发挥趋势和排名;…

当Web请求发起时,会先查看本地是否有该资源已缓存的副本,如果有,就直接从本地读取,而不需要从原始服务器中获取该资源。这样一来可以非常有效地减少冗余的数据传输,也可以减轻原始服务器的请求压力。下图就是一个请求的神奇之旅: 左边虚线框都是在缓存层完成,大部分情况下是指浏览器内部的缓存机制,也可以指一些缓存代理服务,如CDN等(本文不讨论);右边虚线框都是在服务器端完成的。 下面就按照这个流程图,客户端使用Chrome浏览器打开Google(但愿你看到的不是404 not found)来演示不同场景下的请求。 缓存未命中 这是最简单的场景,所有资源都是从服务器返回,就好像没有缓存这一层一样。通常是资源从来没有请求过,或者在请求头部指明不使用缓存。Chrome开发者工具有个很方便的功能,就是可以设置当打开开发者工具时禁用缓存: 它的原理很简单,就是在每个请求前加上不使用缓存的头部cache-control: no-cache和pragma: no-cache: 在给静态文件打版本号还没流行的时候,这个办法也常用来更新静态文件的缓存,即用Ajax设置cache-control:…

原文:How to get a performance boost using Node.js native addons 也许你已经听说过上千次,但我今天要向你展示什么是Node.js的原生模块,以及你为什么应该关注它们。 Node.js addons是使用C或C++编写的动态链接共享对象,可以使用require()方法加载,并且像其他普通的Node.js模块一样使用。 (译注:addons: 扩展,为保持统一叫法,不予翻译) 说得这么好听,但是,为什么要我写C++代码,JavaScript已经让我很爽了,并且上一次看到C+…

Rock with async/await 本篇文章是作为上一篇的续集,考虑到第一篇的篇幅,还有更重要的一点就是上一篇讲的内容已经可以直接应用在最新版本的Node.js和一些高级浏览器(Chrome,FF)中,具体兼容性可参考:https://kangax.github.io/compat-table/es6/。 而这一篇讲的内容,是ECMAScript 2016(ES7)的async/await特性,目前的兼容性可参考:http://kangax.github.io/compat-table/esnext/#test-async_functions,虽然现在来看还不是非常乐观,但是我们可以通过第三方的代码转换工具(…

关于我 Hi, I am Mapping. 一名还在技术道路上不断修炼的无名小卒(亦或大卒,还不至于老卒)。技术方向由最初的微软系转向Web前端,现在给自己的定位,或者说是工作所迫,成为多面手的全栈工程师。 目前大致的技术栈如下: 以前就知识是应该学得更广,还是学得更精困扰过。那时更偏向于后者,因为梦想是成为某个领域的专家;但是工作后逐渐磨去了锋芒,各种需求劈头盖脸砸来,很难再独善其身,于是就委曲求全选择了前者,成不了专家那就成为多面手吧。 现在目标是让上面的雷达图网铺得更密,各个坐标点无限接近对应的顶点(当然这是不可能的,术业有专攻,有那么4-5个就好了)。 关于本站 本站使用Ghost搭建,主题修改自Ghostium(改为本土化的多说等),托管在DigitalOcean的旧金山机房。新加坡机房就是个坑,新加坡机房就是个坑,新加坡机房就是个坑,…