爱大客 - 2017年3月
type: channel
link: https://www.idarc.cn/index.php/2017/03/
description: Every piece of all creatures in this freezing world, are racing for freedom.
items: 关于跨域问题的理解
items: tortoiseSVN commit的时候忽然不能显示新的文件了
items: Node.js与C/C++的速度? javascript能否用于嵌入式开发?
items: Node.js比Java EE和PHP更快??
items: JS可以使用Object作为函数名?
items: js可以使用字符串名调用函数?
items: cocos creator 触摸事件的两种冒泡过程
items: 对于2.4GHz波段, 什么材料吸收好, 什么材料反射好?
items: href和onclick的javascript
items: js中如何不换行输出?

关于跨域问题的理解
type: item
date: 2017-03-31T09:07:00+08:00
description: 跨域是JS的xhr跨域请求。静态资源无跨域限制。 不同端口/二级域名/一级域名都存在跨域问题。 一个经典跨域问题是页面通过iframe内嵌其他域的页面。 最古老解决跨域的方法是iframe代理页面。受限最多。 次古老解决跨域问题是jsonp。据说请求限于get/head/post。 最新解决跨域问题是cors。适用于restful。

tortoiseSVN commit的时候忽然不能显示新的文件了
type: item
date: 2017-03-28T10:01:11+08:00
description: tortoiseSVN commit的时候忽然不能显示新的文件了, 只好用命令行.svn add * --force 可是这个命令行居然也不起作用了. 难道是有忽略文件?svn add * --force --no-ignore 这次可以了, 可是是在哪儿忽略的呢?似乎是忽略了所有任意的文件啊

Node.js与C/C++的速度? javascript能否用于嵌入式开发?
type: item
date: 2017-03-24T10:52:43+08:00
description: 似乎很难搜索到Node.js与C++对比的资料. 当然不对比也知道C/C++一定更快, 但究竟快多少? 这儿有一篇解决最长共有子串问题的对比, 但看起来更像是CUDA的软文... (CUDA vs. C++ vs. Node.js: Genomic Algorithm Performance)[http://www.glassenberg.com/blog/3d-graphics/cuda-vs-c-vs-node-js-genomic-algorithm-performance/] 从文中来看, 这种算法下C++是Node.js的10倍. 当然CUDA更快. 从Java和C++的对比来曲线比较Node.js呢? 这篇2010年文章(C++ vs Java performance; It’s a tie!)[http://blog.cfelde.com/2010/06/c-vs-java-performance/]. 从文中的12项测试来说, Java与C++各有胜负打了个平手. 然而作者在2003年做的比较中, java居然获胜了... 我猜测这是否由于测试中任务太高级的原因? 在google的一篇对比论文中(Google pits C++ against Java, Scala, and Go)[http://www.theregister.co.uk/2011/06/03/google_paper_on_cplusplus_java_scala_go/],google对比了C++, java, scala,go, 当然C++获胜, 可有个前提: 除非你是个天才. Google在论文中提到, 让C++获胜需要很多深度的优化调整, 而这种程度的调整对于平均水平的程序猿来说是不可能的. 因此, 如果C++没有赢,那是因为你的程序写的不够好(逃..),当然了, C/C++是距离汇编最近的语言了, 这个层次上没人赢得了.话说回来, 既然C/C++这么难搞, JavaScript能不能用于嵌入式? 已经有这样的项目了, 国内有(ruff)[https://www.ruff.io/], 国外有(Espruino)[http://www.espruino.com/], 以及Espruino衍生的(Puck.js)[https://www.puck-js.com/]项目, 但这些项目粗看起来都是要你买他们的板子...似乎还不存在一个较为通用的编译器可以编译为51, AVR或者STM32的.不过这已经不错了是不, 特别看到Espruino Pico这么小巧还有一个STM32!也许正如ruff的CEO所言, JavaScript可以让前端工程师开发硬件, 可能会带来硬件创业爆发式的春天.

Node.js比Java EE和PHP更快??
type: item
date: 2017-03-24T09:44:05+08:00
description: Node.js比Python更快, 我在之前已经试验过了, 甚至比Python的性能优化项目pypy更快. 快得不是一个数量级. Node.js甚至也比PHP更快, 以至于快过了Facebook对PHP的优化项目HHVMComparing Node.js vs PHP Performance, 但是比不过go语言. Node.js比Java更快, 在这篇文章里快20% (Performance Comparison Between Node.js and Java EE)[https://dzone.com/articles/performance-comparison-between] 那下一步令人好奇的是, Node.js和C/C++谁更快? 已经有一个项目将C/C++编译为JavaScript的子集(asm.js)[https://github.com/dherman/asm.js/], 为的是让C/C++项目可以在浏览器环境运行(更多是游戏运行于webGL), 还有一个LLJS项目,LowLevelJavaScript,似乎与之有关, LLJS不提供动态GC(垃圾收集), 而是交给程序猿手动收集(LLJS on GitHub)[https://github.com/mbebenita/LLJS] Node.js能不能用于嵌入式开发? 与C/C++相比, 性能如何?

JS可以使用Object作为函数名?
type: item
date: 2017-03-20T11:55:24+08:00
description: 是的, 继前一篇JS可以使用字符串做函数名之后, 又可以使用object做函数名了. 事实上, 它还能使用Number, Boolean, Symbol(ES6)做函数名.秘诀其实是对象的key可以这么做. 你可以使用字符串, number,boolean, symbol, object做key.而你又知道所有的全局变量其实都是window(node下是global)的子元素, 所以你可以这么定义:obj = {x:1} window[obj] = function(){console.log('obj')} window[obj]() // 输出 'obj' window[true] = function(){console.log('true')} window[1] = function(){console.log('1')} s = Symbol() window[s] = function(){console.log('s')} window[true]() // 输出true window[1]() //输出 1 window[s]() //输出 s 但这又有什么用? 不知道...谁能告诉我?

js可以使用字符串名调用函数?
type: item
date: 2017-03-17T10:54:30+08:00
description: 是的, 并且是es5就已经只支持的. 因为函数和变量一样, 默认是全局变量的子元素, 并且子元素除了用点'.'调用外,还可以用数组方括号[]调用. 区别是方括号内是写字符串的. 如p = console.log //省字数 function x(){p('x')} function y(){p('y')} f = 'x' 这时候, window.x === window['x'] 都是x函数.(在node中window甩global替换) 于是可以这样调用window[f]() // 输出x f = 'y' window[f]() // 输出y 这样执行相同的指令window[f]可以实际执行不同的函数x,y 参考how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string 后面有一个回答很有价值的, 就是将函数的点链式调用写在字符串里面,复制过来,感觉如果和科里化/pointfree结合会很有用, 似乎能创造一种自然语言一般的编程方式.来自Jason Bunting的回答:Don't use eval unless you absolutely, positively have no other choice.As has been mentioned, using something like this would be the best way to do it:window["functionName"](arguments); That, however, will not work with a namespace'd function:window["My.Namespace.functionName"](arguments); // fail This is how you would do that:window["My"]["Namespace"]["functionName"](arguments); // succeeds In order to make that easier and provide some flexibility, here is a convenience function:function executeFunctionByName(functionName, context /*, args */) { var args = [].slice.call(arguments).splice(2); var namespaces = functionName.split("."); var func = namespaces.pop(); for(var i = 0; i < namespaces.length; i++) { context = context[namespaces[i]]; } return context[func].apply(context, args); } You would call it like so:executeFunctionByName("My.Namespace.functionName", window, arguments); Note, you can pass in whatever context you want, so this would do the same as above:executeFunctionByName("Namespace.functionName", My, arguments);如果把上面的My.Namespace.functionName改成My Namespace FunctionName是不是就像是自然语言了?

cocos creator 触摸事件的两种冒泡过程
type: item
date: 2017-03-16T16:22:36+08:00
description: 官方原文为系统内置事件之触摸事件冒泡 感觉原文讲得并不清晰, 并且似乎和实际有出入. 原文中讲到两种冒泡: * 一种是沿着节点树, 也就是层级管理器中的节点关系, 从子节点向父节点冒泡; * 另一种是沿着视图中的上下层覆盖关系, 从上层往下层冒泡. 经过测试发现, 沿着节点树冒泡, 每一层节点都可以捕获到事件, 除非在某一层上明确使用e.stopPropagation() 而沿着视图冒泡, 有两点不同: 1. 事件会在最先捕获touch事件的节点上终止,不继续向下层冒泡; 2. 捕获任一touch事件(如touchend), 其他touch事件(touchstart, touchmove, touchcancel)都在此节点上终止, 下层视图都不能收到事件;

对于2.4GHz波段, 什么材料吸收好, 什么材料反射好?
type: item
date: 2017-03-14T12:41:13+08:00
description: 似乎一般来说, 金属材质对2.4GHz有很好的反射性, 而水和含水多的材质对2.4GHz有很好的吸收性.就吸收来说, 2.4GHz与微波炉一个频段, 所以看看微波炉的设计就对了参考一 参考二

href和onclick的javascript
type: item
date: 2017-03-11T12:34:18+08:00
description: href里面也可以运行javascript! 那么, onclick和href哪个先运行? 答案是onclick 并且onclick返回false会阻止href的运行.

js中如何不换行输出?
type: item
date: 2017-03-01T16:37:00+08:00
description: 额, 当然是替代console.log了. 在node.js中用process.stdout.write(). 浏览器环境? 如果你是为了不换行输出数组值, 可以先把数组连接了再输出: console.log(somearray.join())