摘要: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element/https://developer.mozilla.org/en-US/docs/HTML/Canvas/Tutorial?redirectlocale=en-US&redirectslug=Canvas_tutorialhttp://simon.html5.org/dump/html5-canvas-cheat-sheet.html 阅读全文
posted @ 2013-05-01 15:27 zhepama 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 在大多数软件开发语言中,应用程序往往由数十、数百乃至数千个文件构建而成。 但是,在 JavaScript 中,在少量文件(每个文件都包含数百或数千行代码)内开发通常是司空见惯的事情。 无论是业界专家还是初学者,掌握这些文件的范围和错综复杂性都是一项艰巨的任务。 确保代码保持干净和模块化甚至成为一个难以完成的任务。 那么,为什么这种大型、复杂的 JavaScript 文件应用如此广泛? 最普遍提及的原因是:JavaScript 开发一直以来都遵循这种方式发展。加载多份 JavaScript 文件需要多次 HTTP 请求,从而导致加载时间延长。JavaScript 依赖项管理难以实施。虽然第一个理 阅读全文
posted @ 2013-05-01 15:17 zhepama 阅读(451) 评论(0) 推荐(0) 编辑
摘要: http://www.w3school.com.cn/html5/html5_ref_globalattributes.asphttp://www.w3school.com.cn/html5/html5_ref_standardattributes.asp 阅读全文
posted @ 2013-05-01 15:00 zhepama 阅读(117) 评论(0) 推荐(0) 编辑
摘要: LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然。模块加载器一般可降级为文件加载器用,因此使用 RequireJS 和 SeaJS,也可以达成 LABjs 的性能优化目的。RequireJS 和 SeaJS 都是很不错的模块加载器,两者区别 阅读全文
posted @ 2013-05-01 14:46 zhepama 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 一、关于类型什么叫做类型?简单地说,类型就是把内存中的一个二进制序列赋予某种意义。比如,二进制序列0100 0000 0111 0000 0001 0101 0100 1011 1100 0110 1010 0111 1110 1111 1001 1110如果看作是64位无符号整数类型就是4643234631018606494 而按照IEEE 754规定的浮点数二进制表示规则(见附1)双精度浮点类型则是257.331。变量类型大部分计算机语言使用变量来存储和表示数据,一些语言会给变量规定一个类型,在整个程序中(不论是编译时还是运行时),这个类型都不能被改变。与此相对,JavaScript和一些 阅读全文
posted @ 2013-04-20 00:53 zhepama 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是JavaScript解析引擎?简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。比方说,当你写了var a = 1 + 1;这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。学过编译原理的人都知道,对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)。这两者的区别用一句话来概括就是:编译器是将源代码编译为另外一种代码(比如机器码,或者字节码),而解释器是直 阅读全文
posted @ 2013-04-20 00:39 zhepama 阅读(460) 评论(0) 推荐(0) 编辑
摘要: Lookup所有相关的函数全在net包下的doc.go中LookupHost(host string) (addrs []string, err error)对某个主机名执行DNS查询,返回主机名,注意返回的是字符窜slice.可能有多个IP地址 addr, _ := net.LookupHost("www.baidu.com") fmt.Println(addr) // [220.181.112.143 220.181.111.148] LookupIP(host string) (addrs []IP, err error)同上,不过返回的是IP类型的sliceLook 阅读全文
posted @ 2013-04-18 15:03 zhepama 阅读(1073) 评论(0) 推荐(0) 编辑
摘要: 今为止我们已经区分TCP和UDP API的不同,使用例子DialTCP和DialUDP分别返回一个TCPConn和 UDPConn。Conn类型是一个接口,TCPConn和UDPConn实现了该接口。在很大程度上,你可以通过该接口处理而不是用这两种类型。Dial(network, address string) (Conn, error)net可以是"tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), "udp", "udp4" (IPv4-only), 阅读全文
posted @ 2013-04-18 15:02 zhepama 阅读(6980) 评论(0) 推荐(0) 编辑
摘要: TCP和UDP并不是建立在IP层之上唯一的协议。该网站:http://www.iana.org/assignments/protocol-numbers 列表上大约有140关于它们(该列表往往在Unix系统的/etc/protocols文件上。)。TCP和UDP在这个名单上分别为6和17。Go允许你建立所谓的原始套接字,使您可以使用这些其它协议通信,或甚至建立你自己的。但它提供了最低限度的支持: 它会连接主机, 写入和读取和主机之间的数据包。在接下来的章节中,我们将着眼于设计和实现自己的基于TCP之上的协议; 这部分认为同样的问题存在于IP层。为了简单起见,我们将使用几乎最简单的例子: 如何发 阅读全文
posted @ 2013-04-18 15:01 zhepama 阅读(927) 评论(1) 推荐(0) 编辑
摘要: 处理TCP和UDP之间的主要区别是如何处理多个客户端可能同时有数据包到达,没有一个管理TCP会话的缓冲。主要需要调用的是func ResolveUDPAddr(net, addr string) (*UDPAddr, os.Error)func DialUDP(net string, laddr, raddr *UDPAddr) (c *UDPConn, err os.Error)func ListenUDP(net string, laddr *UDPAddr) (c *UDPConn, err os.Error)func (c *UDPConn) ReadFromUDP(b []byte) 阅读全文
posted @ 2013-04-18 15:00 zhepama 阅读(1627) 评论(0) 推荐(0) 编辑