关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » JavaScript »7 个 jQuery 最佳实践

    7 个 jQuery 最佳实践

    2016-01-10 00:00:00 出处:狼狼的蓝胖子
    分享

    前言

    随着富网络应用(rich web applications)数量的增长,以及用户对快速交互响应的高期望,开发者开始使用JavaScript库来快速高效的完成一些重复性的工作。这其中最流行的JavaScript库就是jQuery。但是jQuery的大量应用却带来了另外一个问题:在使用JavaScript库的时候,有哪些最佳实践,又有哪些不好的实践呢?

    背景

    在该文中,我会给大家介绍在编写、调试和审查JavaScript代码的时候一些好的实践(至少我是这么认为的)。事实上,我选择了其中7个最常见的场景。

    1、使用CDN及其回退地址(fallback)

    CDN代表内容传递网络(Content Delivery Network),是一个缓存了JavaScript文件的服务器。使用CDN之后,每当一个新用户发起请求的时候,你的应用程序可以使用CDN缓存,而不用从你的服务器上重新加载库文件。Google、Microsoft和JQuery都提供CDN服务。

    鉴于网络并不总是100%可靠,服务器也可能因为一些原因宕机,你必须要确保即使这些事情发生,你的应用程序依然能正常运行。这时候我们就要用到回退地址:当应用程序无法找到缓存库的时候,它就会回退回来,使用服务器文件。

    Google CDN 是这样的:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </script>

    Microsoft CDN是这样的:

    <script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"> </script>

    需要注意的是,我们没有指定URL协议为http而是使用的//。这是因为CDN服务器支持http和https,假如你的网站拥有SSL认证,你无须修改就可以正常加载文件。

    另外,就像我之前提到的那样,我们还需要一个回退地址,以防CDN服务器出现问题。

    <script>Window.JQuery || document.write(&lsquo;<script src=&rdquo;script/localsourceforjquery&rdquo;></script>&rsquo;)

    当然,你也可以用Require来配置需要的jQuery,不过我觉得就这样也不错。

    2、限制DOM交互

    用JavaScript操作DOM树是存在性能消耗的。jQuery也一样。所以,尽量减少与DOM的交互吧。当我帮助我一个同事提高数据显示速度的时候,我看见他在一个循环里面使用了选择器。这简直是性能杀手!他是这样写的:

    containerDiv = $("#contentDiv");
    for(var d =0; d < TotalActions; d++)
    {
      containerDiv.append("<div><span class='brilliantRunner'>" +   d + "</span></div>");
    }

    有什么问题呢?咋一看没啥问题。而且我的同事也说这段代码跑得很欢乐呢!我真是哔了狗了!当TotalActions小于50时,察觉不到任何问题;但是其达到25000的时候,速度便降低了很多,原因(我也是google到的)就是DOM交互放到了循环当中。

    对于这个功能,(多次尝试失败之后)我将循环中的直接DOM交互替换成了一个数组的push操作,然后用一个空字符串作为分隔符将数组连接(join)起来。最后,程序当然变得更加流畅和高效了。

    var myContent=[];
    for(var d = 0; d < TotalActions; d++)
    {
      myContent.push("<div><span class='brilliantRunner'>" + d + "</span></div>");
    }
    containerDiv.html(myContent.join(""));

    3、缓存

    jQuery最重要也是最有特色的地方,就是它的选择器以及在DOM树中查找HTML元素的方式。但是,我多次看到,一些开发者在同一个函数中,多次调用相同的选择器,比如 $(“#divid”)。尽管jQuery选择元素非常快,但也不要每次都去查找相同的元素吧。所以,你可以像这样缓存的你元素:

    var $divId = $("#divId")

    然后在接下来的代码中,就可以用$divId了。

    对于下面的代码:

    var thefunction = function()
    {
        $("#mydiv").ToggleClass("zclass");
        $("#mydiv").fadeOut(800);
    }
    
    var thefunction2 = function()
    {
        $("#mydiv").addAttr("name");
        $("#mydiv").fadeIn(400);
    }

    我们可以对它做这样的修改,并且使用链式语法,使其看起来更加漂亮:

    var mydiv =$("#mydiv");
    var thefunction = function()
    {
      mydiv.ToggleClass("zclass").fadeOut(800);
    }
    
    var thefunction2 = function()
    {
      mydiv.addAttr("name").fadeIn(400);
    }

    但是话又说回来,你也不用每次把所有东西都缓存起来。看下面的例子:

    $("#link").click(function()
    {
         $(this).addClass("gored");
    }

    在这里,我既没有用 $(“#link”),或者将其缓存起来,而是使用的$(this)。因为在这个例子中,我操作的对象就是这个链接本身。

    4、find 和 filter

    最近,在使用find()来获取jQuery对象结合的时候,我产生了一些困惑。然后我发现,这个操作可以替换为用filter()方法来实现。理解这两者的区别非常重要:

    find: 将会从选定的元素开始,一直向下查找DOM树
    
    filter: 是在jQuery集合当中查找

    5、end()

    当在jQuery集合中进行链式操作的时候,我有时候需要回到父对象去进行一些操作。比如你正在一个表格的第二行应用CSS,然后希望回到表格对象,对其添加一些样式。在你对行应用完样式之后,只要使用end()方法,你就会自动回到表格对象,然后随意的对其添加样式吧!

    (译者注:find()、filter()和end()原文是大写,其实应该是小写)

    6、对象字面量

    当你通过链式语法来操作元素的CSS属性的时候,你可以使用对象字面量方式来提升性能。比如这段代码:

    $("#myimg").attr("src", "thepath").attr("alt", "the alt text");

    变成下面这样之后,不仅避免了操作DOM元素,而且还不用多次调用相关的设置方法:

    $("#myimg").attr({"src": "thepath", "alt": "the alt text"});

    7、善用CSS类

    尽可能使用CSS类而不要写内联CSS代码。我想这一点就不需要举例说明了吧。

    最后

    我希望该文能够帮助你编写更好的jQuery应用程序。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。