(加载时间指感知的时间或者实际加载时间)
· 1.优化图片
· 2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)
· 3.优化CSS(压缩合并css,如margin-top,margin-left…)
· 4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)
· 5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)
· 6.减少http请求(合并文件,合并图片)。
4.浮动外部元素
此三种方法各有利弊,使用时应择优选择,比较之下第二种方法更为可取。
<link rel = "stylesheet" type = "text/css" media = "screen" href = "xxx.css"/>
其中media指定的属性就是设备,显示器上就是screen,打印机则是print,电视是tv,投影仪是projection。打印样式示例如下:
<link rel = "stylesheet" type = "text/css" media = "print" href = "yyy.css"/>
但打印样式表也应注意以下事项:
关于盒模型请看文章CSS之布局与定位。
说到IE的bug,在IE6以前的版本中,IE对盒模型的解析出现一些问题,跟其它浏览器不同,将border与padding都包含在width之内。而另外一些浏览器则与它相反,是不包括border和padding的。
在我们开发的过程中会发现,有时候,如果对页面中的大区域进行设置时,将border、padding计算到width和height之内,反而更灵活。但W3C的CSS2.1规范却规定了他们并不能被包含其中。考虑到这个问题,css3中引入了一个新的属性:box-sizing,它具有“content-box”和”border-box“两个值。
当我们设置box-sizing:content-box;时,浏览器对盒模型的解释遵从我们之前认识到的W3C标准,当它定义width和height时,它的宽度不包括border和padding。
当我们设置box-sizing:border-box;时,浏览器对盒模型的解释与IE6之前的版本相同,当它定义width和height时,border和padding则是被包含在宽高之内的。内容的宽和高可以通过定义的“width”和“height”减去相应方向的“padding”和“border”的宽度得到。内容的宽和高必须保证不能为负,必要时将自动增大该元素border box的尺寸以使其内容的宽或高最小为0
this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向window 。
1.如果是call,apply,with,指定的this是谁,就是谁。
2.普通的函数调用,函数被谁调用,this就是谁。
结合自己的项目经验进行讲述。(chrome使用技巧)
请看文章JavaScript之模块化编程
JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。
null表示”没有对象”,即该处不应该有值。典型用法是:
undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
该如何检测它们?
null:表示无值;undefined:表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
==运算符将两者看作相等。如果要区分两者,要使用===或typeof运算符。
以下是不正确的用法:
var exp = undefined;
if (exp == undefined) {
alert("undefined");
}
exp为null时,也会得到与undefined相同的结果,虽然null和undefined不一样。注意:要同时判断undefined和null时可使用本法。
typeof返回的是字符串,有六种可能:”number”、”string”、”boolean”、”object”、”function”、”undefined”。
以下是正确的用法:
var exp = undefined;
if(typeof(exp) == undefined) {
alert("undefined");
}
JS中如何判断null?
以下是不正确的用法:
var exp = null;
if(exp == null) {
alert("is null");
}
exp为undefined时,也会得到与null相同的结果,虽然null和undefined不一样。注意:要同时判断null和undefined时可使用本法。
var exp=null;
if(!exp) {
alert("is null");
}
如果exp为undefined或者数字零,也会得到与null相同的结果,虽然null和二者不一样。注意:要同时判断null、undefined和数字零时可使用本法。
var exp = null;
if(typeof(exp) == "null") {
alert("is null");
}
为了向下兼容,exp为null时,typeof总返回object。这种方式也不太好。
以下是正确的用法:
var exp = null;
if(!exp&&typeof(exp) != "undefined" && exp != 0) {
alert("is null");
}
包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
使用闭包的注意点:
(关于闭包,详细了解请看JavaScript之作用域与闭包详解)
如有使用过,请谈谈你都使用过哪些库,比如laytpl,Mustache.js,Handlebars等等。
.bind()
方法非常浪费性能因为它把同一个事件处理函数附加到了每一个匹配的元素上.live()
方法因为它被弃用了同时也会带来很多问题 事件注册到document上.delegate()
方法会给你带来很多好处当你需要解决一些性能上的问题和对动态添加的元素作出处理.on()
方法其实就是模拟.bind()
, .live()
和.delegate()
实现的语法糖,具体取决于你如何调用它.on()
方法。先熟悉语法,并开始在你的所有的Jquery 1.7版本以上的项目使用它吧!在Jquery 1.7版本中.bind()
, .live()
和.delegate()
方法只需要使用.on()
方法一种方式来调用它们。
/* Jquery的 .bind() , .live() 和 .delegate() 方法只需要使用`.on()`方法一种方式来调用它们 */
// Bind
$( "#members li a" ).on( "click", function( e ) {} );
$( "#members li a" ).bind( "click", function( e ) {} );
// Live
$( document ).on("click", "#members li a", function( e ) {} );
$( "#members li a" ).live( "click", function( e ) {} );
// Delegate
$( "#members" ).on("click", "li a", function( e ) {} );
$( "#members" ).delegate( "li a", "click", function( e ) {} );
$
和$.fn
的区别。Jquery为开发插件提供了两个方法,分别是:
$.extend(obj);
$.fn.extend(obj);
$.extend(obj);
是为了扩展jquery本身,为类添加新的方法。
$.fn.extend(obj);
给JQUERY对象添加方法。
$.fn
中的fn是什么意思,其实是prototype,即$.fn=$.prototype;
具体用法请看下面的例子:
$.extend({
add:function(a, b) {
return a+b;
}
})
$.add(5,8); // return 13
注意没有,这边的调用直接调用,前面不用任何对象。直接$.
+方法名
$.fn.extend(obj);
对prototype进行扩展,为jquery类添加成员函数,jquery类的实例可以使用这个成员函数。
$.fn.extend({
clickwhile:function(){
$(this).click(function(){
alert($(this).val())
})
}
})
$('input').clickwhile(); // 当点击输入框会弹出该对象的Value值
注意调用时候前面是有对象的。即$('input')
这么个东西。
$el
属性还没有显示出来vm.$el
替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。$emit
方法传递参数
只用来读取的状态集中放在store中; 改变状态的方式是提交mutations,这是个同步的事物; 异步逻辑应该封装在action中。
场景有:单页应用中,组件之间的状态、音乐播放、登录状态、加入购物车.
state Vuex 使用单一状态树,即每个应用将仅仅包含一个store 实例,但单一状态树和模块化并不冲突。存放的数据状态,不可以直接修改里面的数据。
mutations mutations定义的方法动态修改Vuex 的 store 中的状态或数据。
getters 类似vue的计算属性,主要用来过滤一些数据。
action actions可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。view 层通过 store.dispath 来分发 action。
<style scoped></style>
$route
和$router
的区别
答:$route
是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。而$router
是“路由实例”对象包括了路由的跳转方法,钩子函数等。