注* PhantomJS 和 node-webkit 是基于Webkit实现的一套跨平台桌面程序应用的解决方案,PhantomJS此前多用于自动化测试方面。Node-Webkit是由Intel公司开源技术中心的王文睿(Rogerwang)发起的一个开源项目,此项目将node与webkit进行了融合。
我的网站有一些兼容性测试组件;从不同的网页截图然后同期望的图片进行对比。
好的方面
- node_modules/ 下的模块仍然可以使用 (比如没有 process 是 undefined 的问题)
- node_modules/ 可以自动通过require获取
不好的方面
- node-webkit 的启动时间较长
- 需要定义index.html和package.json去加载node友好的上下文。
一些坑
- 这里有一些并发的问题,如果同一时间截两张图就需要手动kill掉这个进程。
否则你偶尔会看到一些白色的截图
- node-webkit@0.10.5会偶尔在链接下面出现下划现。实际上不应该出现的。
升级到node-webkit@0.11.1就可以了
- 需要使用Xvfb去扩大桌面载图的尺寸(比如2000的高在1080的分辨率下)
- 需要使用 Vagrant 去匹配 Travis CI 渲染
为什么不用atom-shell?
我刚开始用的是atom-shell。但是最近的版本在截图上有BUG(0.19.3)
最新可以捕捉屏幕截图的版本(0.17.2)缺少一个机制,从网站读取数据时node-integration被禁用。这将无法保证该网站是否尽可能准确。
为什么不用Selenium?
Selenium也许是目前截图最精确的。然而它的配置,安装和维护都没有node-webkit容易。
更外,我希望尽早验证node-webkit是不是PhantomJS脚本的一个很好的替代者。
注* node-webkit 与 atom-shell 都是基于 node.js 和 Chromium 实现的一种使用Web技术实现桌面程序的解决方案,他们有哪些不同呢?以下译自: Technical differences to Node-Webkit
1. 应用入口
node-webkit的入口是一个网页,而atom-shell的入口是一个JS脚本,这一点跟phantomjs比较像。
2. 编绎流程
Atom-shell使用 libchromiumcontent 访问Chromium的上下文API,而无需编绎整个Chromium项目,较低配置的机器就可以完成编绎。
3. Node集成
在Node-Webkit中需要修改Chromium的源代码完成集成(注* 比如在一次访谈中Rogerwang曾经提到,node-webkit将node和Chromium的EventLoop进行了合并),而atom-shell将使用了不同的集成方式(参见第四条),从而避免对chromium的源代码进行修改。
4. 多个上下文
如果你是Node-Webkit用户,你可能知道Node Context(上下文)和Web Context,
1. 应用入口
node-webkit的入口是一个网页,而atom-shell的入口是一个JS脚本,这一点跟phantomjs比较像。
2. 编绎流程
Atom-shell使用 libchromiumcontent 访问Chromium的上下文API,而无需编绎整个Chromium项目,较低配置的机器就可以完成编绎。
3. Node集成
在Node-Webkit中需要修改Chromium的源代码完成集成(注* 比如在一次访谈中Rogerwang曾经提到,node-webkit将node和Chromium的EventLoop进行了合并),而atom-shell将使用了不同的集成方式(参见第四条),从而避免对chromium的源代码进行修改。
4. 多个上下文
如果你是Node-Webkit用户,你可能知道Node Context(上下文)和Web Context,
通过 multi-context, atom-shell没有在网页中引入新的JavaScript 上下文。
注* atom-shell 是由github开发的,在github是一家比较有影响力的开源公司,node社区应github的要求在v0.12版本中加入了这个特性(尚未发布,参见: multi-context)。类似在一个事件循环中实现多个线程? 但这也不可避免地将node.js变得复杂了一些。
注* atom-shell 是由github开发的,在github是一家比较有影响力的开源公司,node社区应github的要求在v0.12版本中加入了这个特性(尚未发布,参见: multi-context)。类似在一个事件循环中实现多个线程? 但这也不可避免地将node.js变得复杂了一些。
加粗文本
![强调文本][1]
。。。。。。。。。。。。。。。。。。。
强调文本
在这里输入代码
加粗文本强调文本*强调文本*
Gf