工程师,请优化你的代码

转自:http://suqing.iteye.com/blog/1751629

  1. Ajax
  2. jQuery ready事件
  3. 事件处理
  4. DOM操作

1.Ajax
大部分项目这么写:

function getName(personid) {
    var dynamicData = {};
    dynamicData["id"] = personID;
    $.ajax({
        url : "getName.php",
        type : "get",
        data : dynamicData,
        success : function (data) {
            // Updates the UI based the ajax result
            $(".person-name").text(data.name);
        }
    });
}

getName("2342342");

最佳实践:

function getName(personid) {
    var dynamicData = {};
    dynamicData["id"] = personid;
    return $.ajax({
        url : "getName.php",
        type : "get",
        data : dynamicData
    });
}

getName("2342342").done(function (data) {
    // Updates the UI based the ajax result
    $(".person-name").text(data.name);
});

非常灵活

2.jQuery ready事件

大部分项目用这段代码做闭包

$("document").ready(function () {
    // The DOM is ready!
    // The rest of the code goes here
});
或者用简写
$(function () {
    // The DOM is ready!
    // The rest of the code goes here
});

如果你清楚代码的执行环境 

如果你不关注页面加载性能
如果你不关注最佳实践
。。。这么写就没问题

更好的写法是:

// IIFE - Immediately Invoked Function Expression
(function ($, window, document) {

    // The $ is now locally scoped

    // Listen for the jQuery ready event on the document
    $(function () {
        // The DOM is ready!
    });

 // The rest of the code goes here!
}(window.jQuery, window, document));
// The global jQuery object is passed as a parameter

更进一步,最佳写法:

// IIFE - Immediately Invoked Function Expression
(function (yourcode) {

    // The global jQuery object is passed as a parameter
    yourcode(window.jQuery, window, document);

}(function ($, window, document) {

    // The $ is now locally scoped

    // Listen for the jQuery ready event on the document
    $(function () {
        // The DOM is ready!
    });
});

3.事件处理

大部分项目这么写:

$("#longlist li").on("mouseenter", function () {
    $(this).text("Click me!");
});
$("#longlist li").on("click", function () {
    $(this).text("Why did you click me?!");
});

更好的写法:

var listItems = $("#longlist li");
listItems.on({
    "mouseenter" : function () {
        $(this).text("Click me!");
    },
    "click" : function () {
        $(this).text("Why did you click me?!");
    }
});
DRY(Don ‘t repeat yourself.)

最佳实践:

var list = $("#longlist");
list.on("mouseenter", "li", function () {
    $(this).text("Click me!");
});
list.on("click", "li", function () {
    $(this).text("Why did you click me?!");
});
使用事件代理(Event Delegation)

4.DOM操作
大部分项目这么写:

$(‘.class1‘).click(function () {
    some_function();
});
$(‘.class2‘).click(function () {
    some_function();
});

如果你喜欢重复的编码

如果你不关心代码性能

如果你不关注最佳实践

更好的实现方法:

$(‘.class1‘).$(‘.class2‘).click(function () {
    some_function();
});

大部分项目这么写:

// Set‘s an element‘s title attribute using it‘s current text
$(".container input#elem").attr("title", $(".container input#elem").text());

// Set ‘s an element‘ s text color to red
$(".container input#elem").css("color", "red");

// Makes the element fade out
$(".container input#elem").fadeOut();

如果你喜欢重复的编码
如果你不关心代码性能
如果你不关注最佳实践
。。。这么写没问题

更好的实现方法:

// Set‘s an element‘s title attribute using it‘s current text
$("#elem").attr("title", $("#elem").text());

// Set‘s an element‘s text color to red
$("#elem").css("color", "red");

// Makes the element fade out
$("#elem").fadeOut();

简化你的选择器

最佳实践:

// Stores the live DOM element inside of a variable
var elem = $("#elem");

// Set‘s an element‘s title attribute using it‘s current text
elem.attr("title", elem.text());

// Set‘s an element‘s text color to red
elem.css("color", "red");

// Makes the element fade out
elem.fadeOut();

使用变量缓存你的选择器

或者是用更简单的写法:

// Stores the live DOM element inside of a variable
var elem = $("#elem");
// Chaining
elem.attr("title", elem.text()).css("color", "red").fadeOut();

使用链式调用

5.另外一个操作DOM的示例
大部分项目这么写:

// Dynamically building an unordered list from an array
var localArr = ["Greg", "Peter", "Kyle", "Danny", "Mark"],
list = $("ul.people");

$.each(localArr, function (index, value) {
    list.append("<li id=" + index + ">" + value + "</li>");
});

最佳实践:只append一次:

// Dynamically building an unordered list from an array
var localArr = ["Greg", "Peter", "Kyle", "Danny", "Mark"],
list = $("ul.people"),
dynamicItems = "";

$.each(localArr, function (index, value) {
    dynamicItems += "<li id=" + index + ">" + value + "</li>";
});
list.append(dynamicItems);

参考资料:
http://gregfranko.com/jquery-best-practices/
http://stackoverflow.com/questions/18307078/jquery-best-practises-in-case-of-document-ready
http://gregfranko.com/jquery-best-practices/#/29

时间: 2024-08-30 11:42:42

工程师,请优化你的代码的相关文章

CSDN日报20170329 ——《“全栈”工程师 请不要随意去做》

[程序人生]"全栈"工程师 请不要随意去做 作者:郭小北 很简单就是最近越来越多的人想做[全栈工程师],他们的目标就是全栈,他们才入行短短1-2年,甚至刚从培训班出来:我的目标是做全栈,我啥都要学会,啥都会写,这样我就是大牛了,可以挣大钱,就算创业,我也不用招那么多人,一个人搞定一个产品,融资上市 ,CEO 白富美,balabala... [Web 前端]关于 PWA 落地问题的思考 作者:Horky PWA 是最近一个热门话题,很多开发同学都在尝试落地,其中也有些还在犹豫.这篇文章主

android内存优化3—从代码角度进行优化

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能.下面我们就从几个方面来了解Android开发过程中的代码优化. 1)静态变量引起内存泄露 在代码优化的过程中,我们需要对代码中的静态变量特别留意.静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁.所以,一般情况下,静态变量

OutputCache缓存优化asp.net代码 提高网页性能

对于asp.net编写的网页来说,使用缓存是一种非常重要也是很常用的优化技术,它可以大大减轻服务器的负载压力,优化这些网页的性能,在网与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能.同时,在网页加速显示上也起了很大的作用. OutputCache以声明的方式控制 ASP.NET 页或页中包含的用户控件的输出缓存策略. 语法: <%@ OutputCache Duration="#ofseconds"   Location=&quo

[Android] Android开发优化之——从代码角度进行优化

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能.下面我们就从几个方面来了解Android开发过程中的代码优化. 1)静态变量引起内存泄露 在代码优化的过程中,我们需要对代码中的静态变量特别留意.静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁.所以,一般情况下,静态变量

程序人生:请正确看待“垃圾”代码

不知不觉,博主工作五年了,随着从事软件开发时间的增长,技术自然是慢慢积累了,但是博主认为最重要的是看待项目的眼光变了.当年博主工作1-2年的时候,自我感觉很良好,认为技术是王道:认为项目应该从技术的角度来说要完美,要符合开发规范,要符合程序思想,要符合面向对象.总之,认为技术才是正道.有时仅仅因为认为代码实现方式不爽而推倒重来:甚至不惜影响进度. 那么,果真如此么?一个项目一定要从技术的角度达到完美么,一个类,一个方法,一个变量的声明非得严格按照编程规范.一个好的程序员一定是代码写的完美的么.

优化C/C++代码的小技巧

说明: 无意看到一篇小短文,猜测作者应该是一个图形学领域的程序员或专家,介绍了在光线(射线)追踪程序中是如何优化C/C++代码的.倒也有一些参考意义,当然有的地方我并不赞同或者说我也不完全理解,原文在此,我的粗糙翻译如下: 1. 牢记Ahmdal定律 funccost表示是函数func的运行时间百分比,funcspeedup是你优化后函数的运行系数: 所以,如果函数TriangleIntersect()占用40%的运行时间,而在你优化后使它运行快了两倍,那么你的程序运行能够快了25%: 这意味着

优化C/C++代码的小技巧(转)

源:http://www.cnblogs.com/lizhenghn/p/3969531.html 说明: 无意看到一篇小短文,猜测作者应该是一个图形学领域的程序员或专家,介绍了在光线(射线)追踪程序中是如何优化C/C++代码的.倒也有一些参考意义,当然有的地方我并不赞同或者说我也不完全理解,原文在此,我的粗糙翻译如下: 1. 牢记Ahmdal定律 funccost表示是函数func的运行时间百分比,funcspeedup是你优化后函数的运行系数: 所以,如果函数TriangleIntersec

采用抽象类优化Fragment提交代码

记住一直framgent,总是framgent是咱们android开发的一个原则. 一.使用framgnet的通用用法 先看下面的这段代码,一段使用framgent的通用用法.由于该布局并没有指定一个特定的fragment,因此只要有activity托管fragment就可以使用这个通用布局. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="htt

如何优化C语言代码(程序员必读)

如何优化C语言代码(程序员必读) 5.减少运算的强度 可以使用运算量小但功能相同的表达式替换原来复杂的的表达式.如下: (1).求余运算. a=a%8; 可以改为: a=a&7; 说明:位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调 用子程序来完成,代码长.执行速度慢.通常,只要求是求2n方的余数,均可使用 位操作的方法来代替. (2).平方运算 a=pow(a,2.0); 可以改为: a=a*a; 说明:在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得