热门推荐:jQuery相关七大最佳实践
时间:2023-03-18 02:56:02
科技观察
前言随着富网页应用(richwebapplications)的增多,以及用户对快速交互响应的期望越来越高,开发者开始使用JavaScript库来快速高效地完成一些重复性的工作。其中最好的JavaScript库是jQuery。但是jQuery的大量应用带来了另一个问题:使用JavaScript库时的最佳做法和不良做法是什么?背景在本文中,我将介绍一些在编写、调试和审查JavaScript代码时的良好做法(至少我是这么认为的)。事实上,我选择了7个最常见的场景。1、使用CDN及其回退地址(fallback)CDN全称ContentDeliveryNetwork,是一种缓存JavaScript文件的服务器。使用CDN后,每次新用户发起请求时,您的应用程序都可以使用CDN缓存,而不是从您的服务器重新加载库文件。Google、Microsoft和JQuery都提供CDN服务。考虑到网络并不总是100%可靠,并且服务器可能因各种原因而宕机,您必须确保即使发生这些情况,您的应用程序仍能正常运行。这时候我们就会用到回退地址:当应用找不到缓存库时,会回退,使用服务器文件。GoogleCDN是这样的:MicrosoftCDN是这样的:需要注意的是我们没有指定url协议为http而是使用了//。这是因为CDN服务器支持http和https。如果您的网站有SSL认证,则无需修改即可正常加载文件。另外,就像我之前提到的,我们还需要一个回退地址,以防CDN服务器出现问题。’)当然你也可以使用Require来配置需要的jQuery,不过我觉得这样就好了。2.限制DOM交互使用JavaScript操作DOM树会消耗性能。jQuery也是如此。所以,尽量减少与DOM的交互。当我帮助我的一个同事更快地显示数据时,我看到他在循环中使用了一个选择器。这简直就是性能杀手!他是这样写的:containerDiv=$("#contentDiv");for(vard=0;d"+d+"
");}有什么问题吗?乍一看,没有问题。而且同事也说这段代码运行的很开心!我真的哔了狗!当TotalActions小于50时,没有发现问题;但是当达到25000时,速度就下降了很多。原因(我在谷歌上也找到了)是DOM交互被放入循环中。对于这个特性,(在多次尝试失败后)我将循环中的直接DOM交互替换为数组推送操作,然后以空字符串作为分隔符加入数组。***,程序当然变得更加流畅和高效。varmyContent=[];for(vard=0;d
"+d+" ");}containerDiv.html(myContent.join(""));3.缓存jQuery最重要和最显着的特点是它的选择器和在DOM树中查找HTML元素的方式。但是,我多次看到一些开发人员在同一个函数中多次调用同一个选择器,比如$("#divid")。尽管jQuery选择元素的速度非常快,但不要试图每次都找到相同的元素。因此,您可以像这样缓存您的元素:var$divId=$("#divId")然后在下面的代码中,您可以使用$divId。对于以下代码:varthefunction=function(){$("#mydiv").ToggleClass("zclass");$("#mydiv").fadeOut(800);}varthefunction2=function(){$("#mydiv").addAttr("name");$("#mydiv").fadeIn(400);}我们可以这样修改,使用链式语法让它看起来更漂亮:varmydiv=$("#mydiv");varthefunction=function(){mydiv.ToggleClass("zclass").fadeOut(800);}varthefunction2=function(){mydiv.addAttr("name").fadeIn(400);}但话又说回来,您不必每次都缓存所有内容。看下面的例子:$("#link").click(function(){$(this).addClass("gored");}这里,我既没有使用$("#link"),也没有把它缓存起来,而是使用$(this)。因为在这个例子中,我操作的对象是链接本身。4.查找和过滤最近,在使用find()获取jQuery对象的组合时,我产生了一些困惑。然后我发现这个操作可以用filter()方法代替,理解两者的区别很重要:find:会从选中的元素开始,向下搜索DOM树filter:在jQuery集合5中搜索,end()在jQuery集合中进行链式操作时,有时需要返回父对象进行一些操作,比如你正在对表格的第二行应用CSS,然后又想返回到Table对象,给它添加一些样式,给行应用样式后,只要使用end()方法,就会自动返回到table对象,然后添加风格随意!(译者注:find(),filter()和end()在原文中是大写的,但应该是小写的)6.对象字面量当你使用链式语法来操作元素的CSS属性时,你可以使用对象字面量来提高性能。例如这段代码:$("#myimg").attr("src","thepath").attr("alt","alttext");变成如下,既避免了对DOM元素的操作,也无需多次调用相关设置方法:$("#myimg").attr({"src":"thepath","alt":“替代文本”});7、尽可能利用好CSS类CSS类,而不是编写内联CSS代码。我想这一点不需要例子。***我希望本文能帮助您编写更好的jQuery应用程序。翻译链接:http://www.codeceo.com/article/7-jquery-best-practices.html英文原文:7JQueryBestPractices