远程脚本#

XMLHttpRequest###

JSONP###

  • 和XHR不同,它不受同域的限制;
  • JSONP请求的可以是任意的文档;
  • 请求的URL通常格式为http://example.js?calback=CallFunction
   <button id="server">Server play</button>
<script>
var start = {
get: function (id) {
return document.getElementById(id);
},
setup: function () {
this.get('server').onclick = this.remoteRequest;
},
remoteRequest: function () {
var script = document.createElement("script");
script.src = "server.js?callback=passObj";
document.body.appendChild(script);
},
};
var passObj = {
serverPlay: function (data) {
console.log(data.foo);
},
num: 10
}
start.setup();
</script>
//server.js
passObj.serverPlay({"foo": 'bar'});

框架###

frame通常使用的情况

  • 沙箱隔离。
  • 引用第三方内容。
  • 独立的带有交互的内容,比如幻灯片。
  • 需要保持独立焦点和历史管理的子窗口,如复杂的Web应用。

配置js文件#

合并脚本文件###

  • 需要增加一个自动合并脚本的步骤;
  • 考虑到缓存效益,倾向于合并成两个文件,一个可能会改变,一个不会再修改;
  • 对于文件最好是使用版本号或者其他内容来命名;

精简和压缩脚本文件###

Expires报头###

  • 可以通过设置来增加重复访问时,请求文件依然再缓存的概率
  • 这样做的缺点时如果希望修改文件,就需要重命名改文件;

使用CDN###

载入策略#

HTTP块###

  • 支持所谓的块编码,该技术允许分片发送网页
  • 最简单的策略是将部分作为HTTP的第一块,而将网页中其他部分内容作为第二块

使用动态<script>元素无阻塞地下载###

  • 再main.js中插入文件
 var script = document.createElement("script");
script.src = "later.js";
document.documentElement.firstChild.appendChild(script);
  • 这里有个问题,如果其他内敛脚本依赖于插入地脚本,那么将会报错;解决方式
//mian.js
var mynamespace = {
inline_scripts: []
}
//内敛脚本
mynamespace.inline_scripts.push(function() {
console.log(a);
});
//later.js
var a = 10;
(function() {
var i, scripts = mynamespace.inline_scripts, max = scripts.length;
for(i = 0; i < max; i++) {
scripts[i]();
}
})();

延迟加载###

  • 再页面加载完之后,载入外部文件地技术称为延迟加载;
  • 通常将一大段代码分为两部分,一部分用于初始化页面时,一部分只在用户交互地时候使用;
  • 一般用动态创建载入脚本地方式加载;

按需加载###

//main.js
document.getElementById("server").onclick = function() {
require('later.js', function() {
alertFunc();
});
} function require(file, cb) {
var script = document.getElementsByTagName('script')[0];
var newjs = document.createElement('script');
//ie
newjs.onreadystatechange = function() {
if(newjs.readyState == 'loaded' || newjs.readyState === 'complete') {
newjs.onreadystatechange = null;
cb();
}
}
//other
newjs.onload = function() {
cb();
}
newjs.src = file;
script.parentNode.insertBefore(newjs, script);
}
//later.js
var alertFunc = function() {
alert(0);
}

预加载js###

//main.js
var preload;
if(/*@cc_on!@*/false) { //使用条件注释的IE嗅探
preload = function(file) {
new Image().src = file;
}
} else {
preload = function(file) {
var obj = document.createElement('object');
var body = document.body;
obj.width = 0;
obj.height = 0;
obj.data = file;
body.appendChild(obj);
}
} preload('later.html');
//later.html <script type="text/javascript">
alert(0);
</script>

javascript优化--14模式2(DOM和浏览器模式)的更多相关文章

  1. javascript优化--13模式1(DOM和浏览器模式)

    注意分离: 通过将CSS关闭来测试页面是否仍然可用,内容是否依然可读: 将JavaScript关闭来测试页面仍然可以执行正常功能:所有连接是否正常工作:所有的表单是否可以正常工作: 不使用内联处理器( ...

  2. 文档类型DTD,DOCTYPE和浏览器模式

    出处:http://blog.csdn.net/freshlover/article/details/11616563 浏览器从服务端获取网页后会根据文档的DOCTYPE定义显示网页,如果文档正确定义 ...

  3. 【IE】浏览器模式与文档模式 及其开发中处理方式

    原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...

  4. IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...

  5. DOM,浏览器,javascript,html之间的关系

    来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...

  6. javascript优化--07模式(对象)02

    沙箱模式: 解决空间命名模式的几个缺点: 命名空间模式中无法同时使用一个应用程序或库的两个版本运行在同一个页面中,因为两者需要相同的全局符号: 以点分割,需要输入更长的字符,解析时间也更长: 全局构造 ...

  7. <JavaScript>“浏览器模式”和“文档模式”之间的区别

    只有IE浏览器中才会有“浏览器模式”和“文档模式”,兼容性视图涉及两个重要的功能便是“浏览器模式[browser mode]”和“文档模式[document mode]”,在IE8/IE9中按F12键 ...

  8. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  9. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

随机推荐

  1. ajax+json+Struts2实现list传递实例讲解

    由于学习需要,需要通过ajax来获取后台的List集合里面的值.由于前面没有接触过,所以今天就来研究下了. 一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-j ...

  2. IOS - Objective-C NSArray和NSMutableArray的详解 使用

    原文地址:http://blog.csdn.net/totogo2010/article/details/7729377 Objective-C的数组比C++,Java的数组强大在于,NSArray保 ...

  3. js正则匹配以固定格式结尾的字符串并匹配是手机访问,则跳转

    <script> //var pcUrl = "http://res.meadin.com/HotelData/98986_1.shtml"; var pcUrl = ...

  4. 当对服务器端返回的极光推送数据请求时,AFN 的 GET 请求失败如何解决

    代码段 控制台   只需在 manager 那里添加一行代码即可 //传入json格式数据,不写则普通post     manager.requestSerializer = [AFJSONReque ...

  5. 细谈WEB标准

    最近有些朋友很是疑惑web标准是什么,我在这里先做一个总结,有更好的见解的可以私信给我! 首先切入正题之前先谈一下什么叫DOCTYPE,DOCTYPE是document type(文档类型)的简写,主 ...

  6. 多线程编程2 - NSOperation

    一.NSOperation 1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作. NSOperation本身是抽象基类,因此必须使用 ...

  7. 关于快捷键 Ctrl+Alt+[方向键] 的知识

    在用PS作图时使用 Ctrl+Alt+[方向键]  组合建时屏幕莫名翻转, 平时电脑懒得维护所以略卡,我不会说一般早上起床摁了开机去上完厕所回来还--咳咳 刚按下时瞬间一黑,再黑,,继续黑--真是大吃 ...

  8. 1.1-java创建包和类的方法

    1.new-package-命名方法com打头.中间名称.后台要创建的class 2.创建class-    new-class 选择一下主方法 代码示例  编译完保存一下就能输出信息,一直没有保存才 ...

  9. 二、JavaScript语言--JS实践--商城分类导航效果

    商城类导航菜单制作(以京东为例--竖向列表横向伸缩) 可以用两种方式来实现:用CSS实现和用JS实现 方法一:用CSS实现(要点:使用hover) <!DOCTYPE html PUBLIC & ...

  10. JS中级 - 01:DOM节点

    1元素属性   1.1childNodes 返回元素的一个子节点的数组 (不推荐,建议用非标准children代替) 提醒:只包含一级子节点,不包含后辈孙级别以下节点. children:返回元素的一 ...