Latest Publications
如何减少浏览器的repaint和reflow?
文本内容主要包括以下几点:
- 什么是repaint/reflow?
- 什么情况下会触发浏览器的repaint/reflow?
- 浏览器自身所作的优化
- 如何优化你的脚本来减少repaint/reflow?
Javascript预解析相关一则
先来看一段代码:
alert("a" in window); /*true - 1*/
if( false ){
var a = 1;
}
alert("b" in window); /*false - 2*/
if( false ){
b = 1;
}
alert("b" in window); /*false - 3*/
alert("c" in window); /*false - 4*/
if( true ){
c = 1;
}
alert("c" in window); /*true - 5*/
以上代码片段是在全局作用域下定义的,对于第一个例子,Javascript在预解析的时候已经将变量a的声明添加到了活动对象中(具体可参考Javascript的“预解析),于是在运行时 “a” in window 为true。
DOM操作琐碎知识点
1. parentWindow 与 defaultView
parentWinow是IE下document的特有属性,表示的是document所在的window对象
defaultView DOM Level2中引入的属性,document.defaultView指向默认的AbstractView。
2. 各种坐标以及维度属性
浏览器环境相关检测技术介绍
本文主要介绍以下几项的检测方法:
1. Javascript版本信息
2. Cookie是否开启
3. 用户的屏幕分辨率
4. Flash版本号以及浏览器是否开启了Flash拦截功能
5. 浏览器字体大小是否正常(某些浏览器缩放后会导致页面布局混乱)
6. 浏览器的Ajax功能是否正常,包括Get方式和Post方式
7. 浏览器的图片浏览功能是否正常
8. 用户的网络速度
通过对以上几个问题的检测,开发人员能够比较全面的了解目标浏览器的整体环境。
(更多…)
Google Closure Compiler压缩优化规则初探
前不久,Google发布了一系列与WEB开发相关的工具,包括Closure Compiler、Closure Library与Closure Templates,其中Closure Compiler被Google称之为Javascript 优化器(Javascript Optimizer)。通过编译,Compiler可以使代码获得更佳的紧凑性和更高的性能。它不仅能删除无用的代码,同时还会重写和压缩代码以获得更好的下载和运行速度。此外,它还能检查代码中的语法、变量引用以及变量类型,并在发现问题后给出警告。
(更多…)
Javascript的“预解析”
1. Javascript在执行前会进行类似“预解析”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。
(更多…)
客户端实现准确的服务器时间同步
一、问题描述
需要解决的问题很简单,就是如何在页面上比较准确的显示服务器时间。目前比较常用的方法就是根据基准时间使用setTimeout或setInterval来计算最新的时间,这样的问题在于setTimeout与setInterval的时间精度比较低,经测试一分钟大概能相差几秒(与电脑性能以及运行的任务也相关),这样的精度在某些需求下是无法满足的。除此之外,如果要获得比较准确的时间可以定期与服务器进行校准,只是这样实现的成本大一些。
Javascript Callback的两种实现方案
下文主要比较两种现有的Javascript callback实现机制,暂且定为简单版和完整版,简单版的实现只有几行代码,但是无法捕获错误响应,完整版的代码多一些确可以实现错误捕获,而且可以使用的更方便。
简单版
简单版的实现大致如下:
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
/*onreadystatechange在IE下使用,onload在其他浏览器下使用*/
script.onload = script.onreadystatechange = function(){
if( !script.readyState || (script.readyState && script.readyState == 'loaded'){
//TODO
}
}
head.appendChild(script);
短短几行代码已经能满足基本的需求了,而且兼容性还很不错。不过无法提供出错处理,而且使用起来不方便。