evaluateJS
简介
延缓执行 JavaScript 是一个能有效提高网页加载速度以及提升用户阅读体验质量的途径。从实际经验来看,将我们的网站从经济实惠的 VPS 迁移到 Softlayer(美国著名的一个数据中心)独立服务器平台上只能给网站加载速度带来20%的提升,但是通过延缓执行 JavaScript 却能帮助提速 50% ,不妨看看 Google Webmaster 工具 > Site Performance(网站性能)的统计结果:
实战
网页开发遵循一个假设,就算有 JS 文件突然被中断了,只要没有 JS 执行错误,那网页就一定会被正确渲染。简单的说,延缓执行 JS 可以采取下面两种规则:
下面这个主页面的代码片段指出了我们如何在开发中延缓 JavaScript 的执行。
view source
print ? 1 <script type="text/javascript">// <![CDATA[ 2 _lazyLoadScripts = new Array(); 3 _lazyExecutedCallbacks = new Array(); 4 // ]]></script> 5 <script type="text/javascript" src="/scripts/jquery-1.4.4.min.js"></script> 6 <script type="text/javascript" src="/scripts/website-lazy-load.js"></script>
在开发中经常会有些嵌套网页或者构件需要依赖一些外部 JS 文件或 JS 代码的执行。在这种情况下,可以像上面例子那样在主页面顶部定义两个变量 “_lazyLoadScripts” 和 “_lazyExecutedCallbacks” 。
在下面代码片段中,你可以看到这两个变量是如何被使用在嵌套网页或构件上的。
01 <script type="text/javascript">// <![CDATA[ 02 _lazyExecutedCallbacks.push(function () 03 { 04 // in the case you need to execute some scripts in a nested page or module. 05 // don't execute them explicitly, but push them into the callback list. 06 }); 07 // ]]></script> 08 <script type="text/javascript">// <![CDATA[ 09 // push the external JS files into the list for deferring loading. 10 _lazyLoadScripts.push("/scripts/your-script.js"); 11 // ]]></script>
这些被压入(push)到 “_lazyExecutedCallbacks” 里的 JS 代码和被插入到 “_lazyLoadScripts” 里的外部 JS 文件全部都会在 “website-lazy-load.js” 里被执行,执行的代码片段如下:
01 // dynamically load external JS files when document ready 02 // dynamically load external JS files when document ready 03 function loadScriptsAfterDocumentReady() 04 { 05 if (_lazyLoadScripts && _lazyLoadScripts != null) 06 { 07 for (var i = 0; i < _lazyLoadScripts.length; i++) 08 { 09 var scriptTag = document.createElement('script'); 10 scriptTag.type = 'text/javascript'; 11 scriptTag.src = _lazyLoadScripts[i]; 12 var firstScriptTag = document.getElementsByTagName('script')[0]; 13 firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag); 14 } 15 } 16 } 17 18 // Execute the callback when document ready. 19 function invokeLazyExecutedCallbacks() 20 { 21 if (_lazyExecutedCallbacks && _lazyExecutedCallbacks.length > 0) 22 for(var i=0; i<_lazyExecutedCallbacks.length; i++) 23 _lazyExecutedCallbacks[i](); 24 } 25 26 // execute all deferring JS when document is ready by using jQuery. 27 jQuery(document).ready(function () 28 { 29 loadScriptsAfterDocumentReady(); 30 invokeLazyExecutedCallbacks(); 31 });
小贴士
【nodejs代理服务器三】nodejs注册windows服务nodejs 代理服务器
Windows下快速搭建NodeJS本地服务器nodejs启动本地服务器
Windows环境下轻松搭建NodeJs服务器nodejs搭建web服务器
nodejs 之mac | linux |windows 服务器安装mac 安装nodejs环境
如何解决 Node.js 下载时的 could not retrieve https //nodejs.org/dist/latest/shasums256.txt 错误
解决 could not retrieve https://nodejs.org/dist/latest/shasums256.txt 错误的实用指南
windows server 详解Nodejs 部署到云服务器 node.js做服务器
Windows Server 2012 standard Evaluation 激活windows server 2016 standard evaluation