- 浏览: 241749 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
Araxis:
也遇到了楼主的问题,我用的sockjs.0.3.4,升级版本到 ...
Websocket出现的错误 -
love_jun1314:
怎么进行转换成功并没有看到a.flv文件呢? 你把commen ...
java调用ffmpeg执行视频转换 -
枫林top:
不错,挺好的
看老外程序员如何向妻子解释设计模式 -
likj_sh:
太感谢了 ,困惑了好久
Struts2 + Spring + Hibernate + DWR 项目布署笔记 -
dhl004:
...
web.xml 通过contextConfigLocation配置spring 的方式
随着现在网页设计越来越多的应用javascript技术,而且浏览器的Javascript引擎运行速度也成为各大浏览器比拼性能的重要指标,各家浏览器厂商皆宣称他们的浏览器速度更快,希望搅动现存的竞争态势。IE8浏览器的Javascript运行速度虽然相对于IE7以及IE6有着很大的提升,但相对于Webkit引擎的浏览器还是有一定的差距,在去年的ZDNET Javascript测试上Chrome浏览器表现突出,一举击败Firefox、Safari和微软的IE浏览器。不过因为IE浏览器相对庞大的使用人群,我们有必要为IE浏览器的javascript来提提速。
我们知道,浏览器在执行期时是由内到外执行脚本的,那么离我们的脚本最远的全局对象,很可能要跨越几层作用域才能访问到它。不过在IE浏览器中,从最内层到最外层要花的时间比其他多出很多。加之,javascript是一种胶水语言,它必须要调用DOM对能完成我们大多数选择。最著名的就是选择元素(document.getElementById,document.getElementsByTagName,docuemnt.evaluate,document.querySelector),创建元素(document.createElement),此外还有document.body,document.defaultView.getComputedStyle等等,频繁地调用document对象,但是document是位于window对象下,因此这路程就更远了。就了提速,我们必须把它们保存在一个本地变量,那么每次就省得它长途跋涉了。这种技术的运用明显体现在jQuery的源码中:
(function( window, undefined ) { // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); }, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // Use the correct document accordingly with window argument (sandbox) document = window.document, //====================省================= } // Expose jQuery to the global object window.jQuery = window.$ = jQuery; })(window);
把window传进闭包内,就省得它每次都往外找window了。
再看其他类库
//Raphael window.Raphael = (function () { var separator = /[, ]+/, elements = /^(circle|rect|path|ellipse|text|image)$/, doc = document, win = window, //************略**************//dojo d.global = this;//Ext DOC = document,//YUI //************略************ } else if (i == 'win') { c[i] = o[i].contentWindow || o[i]; c.doc = c[i].document; //************略************ Y.config = { win: window || {}, doc: document,
但是如果你没有引入类库,如果让IE的javascript跑得更快些呢?用一个变量把它储存起来?在一个国外的博客看到一种很厉害的劫持技术,偷龙转凤把全局变量document变成一个局部变量。
/*@cc_on _d=document;eval('var document=_d')@*/<!doctype html> <html dir=”ltr” lang=”zh-CN”> <head> <meta charset=”utf-8″/> <title>javascript提速技术 by 司徒正美</title> <script type=”text/javascript”> var date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date - date); </script> </head> <body> </body> </html>
运用提速技术后:
<!doctype html> <html dir=”ltr” lang=”zh-CN”> <head> <meta charset=”utf-8″/> <title>javascript提速技术 by 司徒正美</title> <script type=”text/javascript”> /*@cc_on _d=document;eval(’var document=_d’)@*/ var date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date - date); </script> </head> <body> !!!!!!!! </body> </html>
经测试,用了提速技术后,IE的性能比较
没有使用提速技术 | 485 | 1110 | 1219 |
使用提速技术后 | 109 | 609 | 656 |
没有使用提速技术 | 468 | 797 | 843 |
使用提速技术后 | 78 | 328 | 407 |
我们看一下实现原理: document; doc; //很明显,调用这个比直接document快,document还要钻进window内部找一番如何劫持它呢? var doc = document; var document = doc;这样明显不行因为在预编译阶段,var变量会提前,上面代码相当于 var doc var document //这里被劫持了 doc = document //注意,document已经变成undefined document = doc //相当于window.undefined = undefined没有办法,只好在执行期才定义这个document变量,javascript的动态解析技术派上用场了,eval就是其代表之一。 var doc = document; eval('var document = doc');为了让IE专用,用了IE特有的条件编译。 /*@cc_on var doc = document; eval('var document = doc'); @*/嘛,window的东西其实蛮多,我们一一把它们变成本地变量又如何? /*@cc_on eval((function(props) { var code = []; for (var i = 0 l = props.length;i<l;i++){ var prop = props[i]; window['_'+prop]=window[prop]; code.push(prop+'=_'+prop) } return 'var '+code.join(','); })('document event body location title self top parent alert setInterval clearInterval setTimeout clearTimeout'.split(' '))); @*/
我们可以再扩展一下,让其更多全局变量或全局方法局部化。不过经验测,FF使用它会报错,chrome则慢了,其他浏览器不明显。
if( !+"v1" ){ var code = [],ri = 0,prop,str = "var " for(var a in window) code[ri++] = a; for (var i = 0 ,n = code.length;i<n;i++){ var prop = code[i] window['_'+prop] = window[prop]; str += prop+'=_'+prop+"," } str = str.slice(0,-1); eval(str) }<!doctype html> <html dir=”ltr” lang=”zh-CN”> <head> <meta charset=”utf-8″/> <title>javascript提速技术 by 司徒正美</title> <script type=”text/javascript”> var __chrome = navigator.userAgent.indexOf(”Chrome”) !== -1; var __firefox = !!window.Components if( !__chrome & !__firefox ){ var code = [],ri = 0,prop,str = “var ” for(var a in window) code[ri++] = a; for (var i = 0 ,n = code.length;i<n;i++){ var prop = code[i] window['_'+prop] = window[prop]; str += prop+’=_’+prop+”,” } str = str.slice(0,-1); eval(str) } var date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date - date); </script> </head> <body> !!!!!! </body> </html>
发表评论
-
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2017-09-16 22:28 648系列简介 也许,三百 ... -
30分钟掌握ES6/ES2015核心内容
2017-01-09 11:21 402ECMAScript 6(以下简称ES6)是JavaSc ... -
requirejs、require方法冲突
2016-12-21 18:10 1537如果加载了多个requirejs脚本,每个requirejs ... -
谈谈使用 promise 时候的一些反模式
2016-11-25 15:20 397本文翻译自 We have a problem with ... -
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2016-11-23 12:11 637HTML5 Canvas中提供了 ... -
移动端H5页面高清多屏适配方案
2016-11-17 08:35 823背景 开发移动端H5页面 面对不同分辨率的 ... -
JavaScript Promises 相当酷
2016-09-02 18:53 512And when I promise some ... -
gulp使用小结
2016-05-22 19:02 644这篇文章不会介绍 gulp 的起源、发展;不会去一个个讲解 ... -
用gulp做一个略完整的前端打包工作
2016-05-22 18:59 2424我们的官网要改版,会从以前的单一产品变成 ... -
前端神器avalonJS入门
2016-05-19 19:32 588本章将介绍如何使用avalon来实现前端路由功能。 我们需 ... -
给Webstorm的HTML自动压缩插件
2016-05-07 14:20 1247前端代码的压缩 前端的js、css、html的压缩不仅会让 ... -
gulp教程之gulp中文API
2016-05-07 13:44 557http://www.ydcss.com/ ... -
gulp详细入门教程
2016-05-07 13:00 547简介: gulp是前端开发过程中对代码进行构建的工具, ... -
HTML5 Boilerplate - 让页面有个好的开始
2016-04-20 19:08 663一:HTML5 Boilerplate是什 ... -
Websocket出现的错误
2016-04-06 10:49 6988前端使用sockjs,后台使用spring的websocke ... -
移动平台的meta标签-----神奇的功效
2016-02-18 10:51 458对于桌面平台web布局中大家对meta标签再熟悉不过了,它永 ... -
GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
2015-10-26 17:34 1163WGS-84:是国际标准,GPS坐标(Google Eart ... -
Modernizr.js入门指南
2015-05-26 17:52 664Modernizr.js入门指南 ... -
智能机浏览器版本信息
2015-05-12 01:06 546/* * 智能机浏览器版 ... -
jQuery data
2015-02-10 16:35 617但这不是jQuery想要的 jQuery要解决的是对应元素 ...
相关推荐
总的来说,为IE浏览器的JavaScript提速主要涉及以下几个方面: 1. 缓存全局对象,如`window`和`document`,使用局部变量引用。 2. 减少DOM操作,尤其是在循环中避免频繁查询或修改DOM。 3. 针对IE特性进行优化,如...
5. **兼容性处理**:由于IE浏览器和现代浏览器在处理某些JavaScript特性、CSS样式以及API调用上有差异,中转站页面可能需要针对IE进行特别的兼容性优化,以确保在所有目标浏览器中都能正常工作。 6. **安全考虑**:...
"IE浏览器源码" 指的是Internet Explorer浏览器的源代码,这是一个由微软公司开发的曾经广泛使用的网页浏览软件。其源码是实现浏览器功能的底层编程语言,包括HTML解析、JavaScript执行、网络通信、渲染引擎等多个...
在“ie浏览器 js调用 ocx 异步打印pdf、图片控件”的场景中,我们将探讨如何利用JavaScript调用OCX控件来实现异步打印功能,特别是针对PDF和图片文件。 首先,我们需要在Web服务器上部署这个OCX控件。部署过程包括...
在这种情况下,运行"IE浏览器显示Json.reg"文件很可能是为了添加或修改IE浏览器的设置,使其能够支持直接解析和美化显示JSON数据。这可能涉及到注册一个JSON视图插件或者启用内置的JSON格式化功能。通过这样的设置,...
本文将深入探讨如何在IE浏览器中实现js(JavaScript)语音播报功能,结合给定的"2-1.html"文件,我们来详细解析这个例子。 首先,语音播报在网页中的实现主要依赖于Web Speech API,它包括两个关键接口:Speech...
在【压缩包子文件的文件名称列表】中,我们看到一个名为"IE浏览器源码.e"的文件,这很可能是整个项目的主要源代码文件或者是一个包含了所有源代码的入口文件。在易语言中,".e"后缀通常代表易语言的工程文件,里面...
标题中的“在线浏览PDF文件、可兼容IE浏览器”意味着我们将探讨如何在网页环境中,特别是对Internet Explorer(IE)浏览器支持的情况下,实现PDF文件的在线预览。这在现代Web开发中是一个常见需求,因为PDF文档广泛...
下面将详细介绍如何使用Java调用IE浏览器,并支持其他浏览器以及自定义打开的内容。 首先,`java.lang.Runtime`类是Java平台的标准API,它可以提供与操作系统交互的能力。调用浏览器的一个基本方法是通过`Runtime....
IE浏览器,全称为Internet Explorer,是微软公司推出的一款曾经占据主导地位的网页浏览器。它在互联网发展的初期扮演了重要角色,但由于技术更新较慢,逐渐被Chrome、Firefox等现代浏览器取代。然而,对于初学者来说...
【Ie浏览器调用】是关于在Internet Explorer(简称IE)浏览器中操作和利用插件进行功能扩展的技术主题。在互联网早期,IE是市场份额最大的浏览器,因此开发针对IE的插件成为了许多开发者的重要任务,以增强用户体验...
对于标题提到的"pdfjs预览插件,兼容IE浏览器",这意味着我们讨论的是如何在Internet Explorer(IE)这种已经较为老旧且对现代Web标准支持不足的浏览器上,利用PDF.js实现PDF文档的预览功能。 PDF.js的核心在于其跨...
ie不执行javascript修复ie不执行javascript修复ie不执行javascript修复 当IE不能正常运行时,打开该工具就可以了,自动修复
"新版IE浏览器源代码" 提供了一个深入了解浏览器内部工作原理的机会,特别是对于那些对前端开发、浏览器内核或者系统级编程感兴趣的开发者而言。这个资源可能包含了构建和修改IE浏览器功能的原始代码。 描述中提到...
总之,解决Win10下IE浏览器树形控件无法显示的问题需要综合考虑浏览器兼容性、ActiveX设置、JavaScript和CSS代码、以及可能的资源路径问题。通过逐步排查和测试,通常可以找到问题的根源并予以修复。同时,随着现代...
总的来说,ie浏览器插件(页面数据抓取)是一种强大的工具,它结合了JavaScript的灵活性和浏览器的便利性,让数据获取和处理变得简单易行。通过熟练掌握这类插件的使用,我们可以更高效地利用互联网上的海量信息。
本文将详细介绍一款专为IE浏览器设计的JS调试插件及其使用方法。 首先,我们要理解为什么IE浏览器需要特定的JS调试工具。与其他现代浏览器如Chrome、Firefox相比,IE在处理JavaScript时可能有不同的行为。例如,它...
IE浏览器样式查看工具,即IEDevToolBar,是一款专为Internet Explorer设计的强大辅助工具,它允许开发者直接在浏览器中查看和修改网页的CSS样式,从而极大地提升了前端开发和调试的效率。 **一、IEDevToolBar的功能...
openIE
标签同样为"multiple-ie-setup.rar 多IE浏览器工具",表明该文件的关键特征是它与多版本IE浏览器的安装和管理有关。在软件开发和网页设计领域,这样的工具是非常实用的,因为不同的IE版本可能存在不同的渲染引擎和...