摘要:
背景: 最近就遇到一个同事的项目,还是像平常一样小心切图,认真对像素。 一切测试都没有问题,顺利上线。 但是,上线之后,产品经理跑过来说,有BUG。 BUG描述:(不认为是BUG) 前端页面上的图标是虚的。 环境:mackbook pro retina屏 现象: 给了一个截图 图标是虚的 BUG修复 阅读全文
摘要:
示例: BUG描述: 最近同事一项目中,产品提出在macbook air上,列表图片放大效果边缘出现抖动现象。在retina屏上没有此问题。 调试过程: 1、单独把结构分离。确定是否由其他元素引起。 2、逐步添加结构。看是否有父级结构引起。 调试结果: 1、单独分离,不出现问题。 2、添加结构的过程 阅读全文
摘要:
前言 这一章的内容学到了事件队列和异步的API。js只是运行在其他应用程序的脚本语言。js即依赖于应用程序,也独立与应用程序。可以使它可以在多平台,多种环境上运行。ECMAScript标准中没有关于并发的说明。这章讨论的是一些常用的方法,使用事件和异步API是js编程的基础部分。异步API,有set 阅读全文
摘要:
构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式。已经在本章讨论过的异步API使用回调函数作为参数。 基于promise的API不接收回调函数作为参数。相反,它返回一个promise对象,该对象通过其自身的then方法接收回调函数。 这里看不出 阅读全文
摘要:
设想有downloadAsync函数的一种变种,它持有一个缓存(实现为一个Dict)来避免多次下载同一个文件。在文件已经被缓存的情况下,立即调用回调函数是最优选择。 通常情况下,它会立即提供数据,但这种方式是违反了异步API客户端的期望。首先,它改变了操作的预期顺序。第62条显示了下面的例子,对于循 阅读全文
摘要:
第63条建议使用工具函数downloadAllAsync接收一个URL数组并下载所有文件,结果返回一个存储了文件内容的数组,每个URL对应一个字符串。downloadAllAsync并不只有清理嵌套回调函数的好处,其主要好处是并行下载文件。我们可以在同一个事件循环中一次启动所有文件的下载,而不用等待 阅读全文
摘要:
第61条解释了异步API怎样帮助我们防止一段程序阻塞应用程序的事件队列。使用下面代码,可以很容易使一个应用程序陷入泥潭。 而且它并不需要一个无限循环来写一个缓慢的程序。代码需要时间来运行,而低效的算法或数据结构可能导致运行长时间的计算。效率不是js唯一关注的。基于事件的编程的确强加了一些特殊的约束。 阅读全文
摘要:
假设需要有这样一个函数,接收一个URL的数组并尝试依次下载每个文件直到有一个文件被成功下载。如果API是同步的,使用循环很简单实现。 在异步情况下,上面的这种方式就无法正确工作。因为不能在回调函数中暂停循环并恢复。如果尝试使用循环,它将启动所有的下载,这不是等待完成一个再进行下一个。 这里我们要实现 阅读全文
摘要:
管理异步编程的一个是错误处理。同步代码中只要使用try语句块包装一段代码很容易一下子处理所有的错误。 try语句块 但对于异步的代码,多步的处理通常会被分隔到事件队列的单独轮次中,因此,不可能将它们包装在一个try语句块中。事实上异步的API甚至根本不可能抛出异常,因为,当一个异步的错误发生时,没有 阅读全文
摘要:
异步程序的操作顺序 61条讲述了异步API如何执行潜在的代价高昂的I/O操作,而不阻塞应用程序继续处理其他输入。理解异步程序的操作顺序刚开始有点混乱。例如,下面的代码会在打印"finished"之前打印“starting”,即使这两个动作的程序源文件中以相反的顺序呈现。 downloadAsync调 阅读全文