edyang

我干了什么 究竟拿了时间换了什么
技术分享时间线软件开发、设备接入、视觉与运维实践

前端性能研究:读写布局交错为什么会变慢

循环里每改一次样式就读取尺寸,可能迫使浏览器反复计算布局。

循环里每改一次样式就读取尺寸,可能迫使浏览器反复计算布局。问题在操作顺序而不只是循环次数。 本文使用HTML5、CSS 与当时浏览器可支持的布局能力,示例为局部页面。页面表现由文档结构、布局规则和浏览器环境共同决定。本文以可核对的 DOM(文档对象模型)和样式计算为起点,不使用后续才普及的布局属性。 1. 从现象推到机制 样式变化会使布局状态失效,随后的几何读取可能要求浏览器先得到最新...

前端安全研究:innerHTML 与纯文本输出

把评论字符串交给 innerHTML,浏览器会按 HTML 解析,而不只是显示文字。

把评论字符串交给 innerHTML,浏览器会按 HTML 解析,而不只是显示文字。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 不可信输入一旦进入代码或标记上下文,就可能改变...

浏览器跨域:预检请求与业务请求分开看

接口在命令行能调用,浏览器却拒绝读取结果,可能是跨域访问规则而不是服务器没启动。

接口在命令行能调用,浏览器却拒绝读取结果,可能是跨域访问规则而不是服务器没启动。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 同源由协议、主机和端口共同决定。某些跨域请求先发 ...

深入 JavaScript:搜索请求返回乱序怎样处理

用户先搜甲再搜乙,乙先返回、甲后返回时,旧结果可能覆盖当前输入。

用户先搜甲再搜乙,乙先返回、甲后返回时,旧结果可能覆盖当前输入。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 异步请求完成顺序不受发出顺序保证。取消旧请求可以减少浪费,但不能单...

深入 JavaScript:setTimeout 的零毫秒不是立即执行

计时器延迟写成零,回调仍会等待当前任务结束。

计时器延迟写成零,回调仍会等待当前任务结束。延迟参数不是精确执行时刻。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 浏览器执行当前脚本时,不会因为计时器到期就插入普通回调。回调...

深入 JavaScript:事件委托为何适合动态列表

列表不断添加新行,为每行单独绑定处理器会增加管理成本。

列表不断添加新行,为每行单独绑定处理器会增加管理成本。事件委托利用传播关系统一处理。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 事件目标是最初触发的元素,当前处理元素则是绑定...

深入 JavaScript:this 由调用方式决定什么

把对象方法赋给另一个变量后再调用,this 可能不再指向原来的对象。

把对象方法赋给另一个变量后再调用,this 可能不再指向原来的对象。方法位置和调用方式并不相同。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 普通函数的 this 与调用形式有...

深入 JavaScript:循环回调为什么都读到最后一个值

循环中创建多个回调,最后触发时却都看到同一个编号,原因在于共享了同一变量绑定。

循环中创建多个回调,最后触发时却都看到同一个编号,原因在于共享了同一变量绑定。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 闭包保留对词法环境的访问,不是创建时给所有变量拍一张...

深入 JavaScript:变量提升不会替你完成赋值

在声明前读取变量得到 undefined,不代表那行赋值已经被执行。

在声明前读取变量得到 undefined,不代表那行赋值已经被执行。声明处理与执行顺序要分开。 本文使用ECMAScript 5.1 与浏览器 DOM,代码可放入独立演示页。JavaScript(脚本语言)的作用域、函数调用与事件调度,需要与浏览器提供的接口区分。本文主体使用当时已经可用的语法,不把语言版本和宿主环境混为一谈。 1. 从现象推到机制 函数作用域内的 var 声明在进入执...

深入 CSS Flexbox:为什么子项有时不肯缩小

设置 flex 后,长文件名仍把卡片撑破,问题可能来自子项默认的最小尺寸约束。

设置 flex 后,长文件名仍把卡片撑破,问题可能来自子项默认的最小尺寸约束。 本文使用HTML5、CSS 与当时浏览器可支持的布局能力,示例为局部页面。页面表现由文档结构、布局规则和浏览器环境共同决定。本文以可核对的 DOM(文档对象模型)和样式计算为起点,不使用后续才普及的布局属性。 1. 从现象推到机制 Flexbox(弹性盒布局)沿主轴分配空间,但收缩还受最小尺寸和内容影响。长...