category : JavaScript|NodeJs

js模拟红白机jsnes

研究了一下网页运行红白机,其实这个很早就有老外写了这个模拟器,用js代码写的模拟红白机的硬件,然后加载nes格式的游戏,但是支持的知识较早的nes游戏rom,貌似后来开发的都不支持。奉上我做的网页版:FC游戏机:http://game.haomou.net/,也可以关注我的微信公众号,见左边。可以直接在手机上玩。

自动化打点方案

数据同事要做数据可视化分析,需要升级打点数据,添加了许多字段,但是并没有给出自动化打点方案,让前端自己搞。之前我们产品打点数据比较少,基本都是前端自己做打点方案,现在需要几十个字段就要考虑如何做自动化打点方案了。

http请求代理插件

今天把项目中的反向代理脚本程序抽成了一个插件,通过配置文件配置代理的http请求,这样使用起来比较方便,每位开发成员都可以用自己配置的代理调试代码。

前端打包技术行情

最近忙了不少,顺便研究了一下打包的一些技术行情。话说前端代码为什么要打包?我最早写前端的时候,那是不打包的。当然技术只是用了简单的jQuery和backbone。后来做angular,有前端模块化开发的思想的时候,前端就需要考虑打包了。为什么,因为单个js文件引入到页面是跑不起来的,不像之间简单页面,一个js文件就搞定了。对于现在大型的工程化应用,前端一般都是有组件化、模块化的开发思路,这样可以实现组件或者模块或者通用逻辑的复用。所以在代码部署的时候需要打包工具来找到当前页面需要哪些js代码组合起来才能正常运行。

前端构建C语言解释执行环境调研

关于编译器有没想过在浏览器中直接运行其他语言?有没有想过写完c语言,能够立即在浏览器上编译运行。其实也没什么卵用了。只不过是的确可以基于js语言来构造其他语言的解析器。 编译执行与解释执行一种高级编程语言,从源代码开始,一直到被执行生成相应的动作,大约经历了这几个步骤:12 编译 执行 执行源代码====>(中间表示形式====>)基本操作序列====>生成最终动作 编译型和解释型语言的不同指出只是在于,这些过程发生的时机不一样。 编译型语言的代表是C,源代码被编译之后生成中间文件(.o和.obj),然后用连接器和汇编器生成机器码,也就是一系列基本操作的序列,机器码最后被执行生成最终动作。 解释型的语言以Ruby为例,也经历了这些步骤,不同的是,C语言会把那些从源代码“变”来的基本操作序列(保存)起来,而Ruby直接将这些生成的基本操作序列(Ruby虚拟机)指令丢给Ruby虚拟机执行然后产生动作了。 所以我们看到的现象是,编译型语言要先编译再运行,而解释性语言直接“运行”源代码。除了BASIC这样特别早期的解释型语言,是直接解释执行,现在的解释型语言都采取将代码编译为某种特定的虚拟机代码或者机器码的形式,然后再执行那些编译好的代码。BASIC这种直接解释的,我们可以将他的基本操作序列理解为直接执行基本操作的那些函数。 现在关于解释和编译的界限也不是特别清晰了。Java需要预先把代码编译成虚拟机指令的,然后在运行这些虚拟机指令,有的教科书上会成为混合型或者半编译型。像Python和lua这样就更不好分了,可以直接解释源代码运行,也可以编译为虚拟机指令然后再运行。php编译之后的结果可以被Web Server缓存起来,甚至还可以先被翻译为C++,然后再编译。.NET 的CLR运行时是Windows的组成部分,编译好的.NET 系列语言的代码直接生成可执行文件,然后被“直接”执行,看起来跟C没有什么太大的差别。JavaScript可以被V8引擎编译为机器码然后执行,如果在node.js下,这个编译结果被缓存起来了,你说这跟编译好再执行的C有什么区别。 基于JavaScript构造c语言运行环境目前有三种基本的方案:1)基于JS构建c语言解析执行环境(论文中方案,前端解析执行)论文中采用PEG( parsing expression grammar)解析表达式语法编写c语言解析器,在调研中发现还有类似的解决方案chevrotain,主要基于LL(K)词法分析。参考:peg方案 - https://pegjs.org/ , LL(K)方案 - https://github.com/SAP/chevrotain

nodejs子进程之child_process

模块概览在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。熟悉shell脚本的同学,可以用它来完成很多有意思的事情,比如文件压缩、增量部署等,感兴趣的同学,看文本文后可以尝试下。

前端测试方法+工具

天气小雨,不宜出门。只好在家好好修炼,正好准备总结一下测试相关的知识。主要总结以下项目中用到的前端测试工具: mocha-phantomjs+chai来实现自动化单元测试 nightWatch 实现端到端的集成测试