JavaScript框架Jquery介绍

想必很多人都知道JQuery框架了,现在有很多JavaScript的框架,但是真正非常优秀的框架还属JQuery,从微软在VS2008中专门为其提供只能提示这一侧面可以看得出来它的分量。 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,包括来自德国的Jörn Zaefferer,罗马尼亚的Stefan Petre等等。 jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。 jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。 Jquery是继prototype之后又一个优秀的Javascrīpt框架。对prototype我使用不多,简单了解过。但使用上jquery之后,马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和jquery:prototype就像Java,而jquery就像ruby.实际上我比较喜欢java(少接触Ruby 罢了)但是jquery的简单的实用的确有相当大的吸引力啊!在项目里我把jquery作为自己唯一的框架类包。使用其间也有一点点心得,其实这些心得,在jquery的文档上面也可能有讲,不过还是记下来,以备忘罢。 下面是最为简单的JQuery的应用: 告别代码重复的时代 还记得$()这个东西吧?prototype还是DWR都使用了这个函数代替document.getElementById()。没错,jquery也跟风了。为达到document.getElementById()的目的,jquery是这样写的:var someElement = $("#myId"). jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。 jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

May 21, 2009

JQuery下载,最新版本持续更新

JQuery是一个非常酷的JavaScript框架,极大地简化了JavaScript的操作,本人这段时间开始学习它,并且用它,现在把它当成了一个类似.NET框架的开发类库了,每一个项目我都需要引用到这个框架。 这篇日志我提供JQuery下载地址,并且持续更新,希望给各位带来方便: 1、JQuery下载地址(1.3.2版本——最新发布版本) 精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js 完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.js VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2-vsdoc2.js 2、JQuery下载地址(1.3版本) 精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.min.js 完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.js VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3-vsdoc.js 3、JQuery下载地址(1.2.6版本——这是现在用得最多的版本) 精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js 打包版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.pack.js 完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js

May 21, 2009

JQuery页面加载顺序

JQuery页面加载顺序 JQuery在页面加载顺序方面提供了更好更合理的操作,在JavaScript中,window.onload事件下的代码是必须在所有页面元素都加载完成之后才执行(注意:包括了图片和文件等),可是有的时候我们希望hmtl代码加载完成之后(即DOM加载完成之后)就执行某些代码,在JQuery里有这样的函数: $(document).ready(function(){ alert(“hello”); }); 上面的代码在Dom结构被浏览器解析之后就可以执行了。当然也有其他人使用JavaScript来编写一些函数可以实现这样的功能,只不过JQuery更好。另外,使用这样的函数还有一个好处,就是可以基于同一个页面在加载结束之后执行多个脚本函数。

May 21, 2009

Web前端开发技术会议的心得体会

去年参加了雅虎(Yahoo)举办的第二届D2网站Web前端技术会议,这是我第一次参加这样的技术会议,很多东西听得似懂非懂,周爱民讲web前端基本设计模式,还推荐了他自己写的一本书关于Javascript核心编程的书籍,其他几个都是雅虎的大牛在讲ajax应用,很可惜没有听到实质性的知识。 这里顺便介绍一下什么是D2,D2(Designer & Developer Frontend Technology Forum)号称是中国所有前端开发者的节日,包括前端设计师,前端开发工程师,和所有对前端技术感兴趣的人,D2目的是推动国内前端技术的发展,为国内前端 从业者提供一个自由交流,学习探讨技术的平台,促进国内行业标准跟国际的融合,发掘前端技术可以创造的更大价值。 第一届是淘宝网举办,也是他们发起的,第二届是由雅虎举办,第三届是土豆网举办,只参加过第二届,不知道后来举办得怎么样,不过通过这次的会议,至少明白了Web前端优化的重要性,也明白了像JavaScript、div、css这样的技术是很有讲究的。

May 21, 2009

什么叫设计模式

现在网上有大量的文章写设计模式,无论是Gof的23种设计模式,还是其他自己创造处理的模式,但是在做这些工作之前应该深入理解什么叫设计模式。 总的来说,设计模式是一各个编程套路,类似于建筑设计,网上也有关于什么叫设计模式的经典分析,下面仅仅作为摘要简述: 1、来自豆瓣网的声音: 设计模式并不是什么新的东西。有些模式,你或许已经在实际项目中应用了很多年了,只是不知道人家原来是这么称呼它的! 2、来自博客园的分析: 设计模式就是解决问题的一种方式,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就可以一次又一次的使用该解决方案而不做重复性的劳动。设计模式有四个基本要素:模式名称、问题、解决方案、效果。 按照模式的目的性准则,模式可以分为创建型模式、结构型模式和行为型模式。创建型模式与对象的创建有关;结构型模式处理类和对象的组合;行为型模式对类和对象怎样交互和怎样分配职责进行描述。 按照模式的范围准则,模式可以分为类模式和对象模式。类模式处理类和子类的关系,这些关系通过继承建立,是静态的,在编译时就确定下来。对象模式是处理对象之间的关系,这些关系在运行时刻是可以变化的,更具动态性。 创建型类模式将对象的创建工作部分延迟到子类。创建型对象模式则是将它延迟到另一个对象中。 结构型类模式使用继承机制来组合类。结构型对象模式则描述了对象的组装方式。 行为型类模式使用继承描述算法和控制流。行为型对象模式描述使用一组对象怎样协作完成单个对象无法完成的任务。

May 21, 2009

关于Web性能分析和大型网站架构设计

对于网站的理解,不同层次的人有不同的理解。一个网站可以简单地只有几个静态页面,花上一两个小时的时间就可以做好;但是也可能设计地非常精巧,能够承受亿万级的访问量,这样的网站设计起来就很复杂,而且会耗掉大量的人力物力。简单的网站提供的功能是有限的,作用也很小;但是对于大型的网站,就非常地有用,可以提供丰富多彩的功能,比如Google、百度、淘宝、新浪、搜狐等这些网站。 所有的网站开发人员都希望能够设计出性能稳定、负载能力大的网站,而一个对于web系统:最大的瓶颈是数据库;展现效率的决定性因素是前端调用和架构;系统健壮性的决定性因素是总体架构。 1、Web系统最大瓶颈是数据库 无论是使用哪类数据库管理软件(DB2、SQL Server、Oracle),数据库瓶颈是让网站开发者最为头痛的,每一次数据库连接操作都会消耗极大的系统资源(CPU资源、磁盘IO资源等),如果并发达到百万级,没有合理的数据库访问策略,那么网站肯定马上就瘫痪。解决这一问题,主要靠缓存机制,而在数据库缓存里最好用的莫过于Memcached(非常高效的分布式数据库缓存工具),有了Memcached,那么就可以大量地减少数据库链接数,而且可以进行分布式,极大了减小了数据库的压力,而且可以随时增加服务器扩充数据库负载能力。当然Memcached并非绝对灵丹妙药,必须在网站架构和程序代码上下功夫,比如数据库读写分离、缓存更新机制等。Memcached是针对Linux操作系统的,在Windows下也可以用,但并不一定能够达到很好的效果,幸运的是微软现在也自己开发了一套类似的东西:Velocity。 2、展现效率的决定性因素是前端调用和架构 如果你认真去分析淘宝网的页面代码,你就会发现这句话一点都没有错,当服务器响应快速了之后,如何能够展现地更快,就是前端优化,淘宝的前端开发工程师曾说过:页面响应80%时间来自js、css和html代码,由此可见前端的重要性。对于css和div,在兼容浏览器的前提下,最好能够尽量向web标准靠拢,对于js,我建议是使用稳定的js框架,个人喜欢JQuery。 3、系统健壮性的决定性因素是总体架构 网站的总体架构相当于一个人的骨架,没有好的架构不用提稳定性了。一个好的网站架构应该满足:三层(表现、逻辑、数据访问)分离、代码规范、可扩充,如果是大型网站,还要是分布式的、数据库读写分离。

May 21, 2009

委托用法,C#源代码

1、委托的概念 委托是C#一个非常重要的概念,也是很有用的,因为委托和事件结合起来使用可以完成很多功能(委托是事件的基础),而且可以通过委托来实现函数的匿名方法(通过将委托与命名方法或匿名方法关联,可以实例化委托)。 C#的委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。 2、委托的用法 委托类型声明的格式如下: public delegate void TestDelegate(string message);delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。 为了与命名方法一起使用,委托必须用具有可接受签名的方法进行实例化。有关方法签名中允许的方差度的更多信息,请参见委托中的协变和逆变。为了与匿名方法一起使用,委托和与之关联的代码必须一起声明。 3、实现代码 下面用C#代码来说明如何使用委托(参考自微软msdn): using System; // Declare delegate -- defines required signature: delegate void SampleDelegate(string message); class MainClass { // Regular method that matches signature: static void SampleDelegateMethod(string message) { Console.WriteLine(message); } static void Main() { // Instantiate delegate with named method: SampleDelegate d1 = SampleDelegateMethod; // Instantiate delegate with anonymous method: SampleDelegate d2 = delegate(string message) { Console.WriteLine(message); }; // Invoke delegate d1: d1("Hello"); // Invoke delegate d2: d2(" World"); } }

May 21, 2009

网站被黑原因,sql注入式攻击,网站挂马防范

1、网站被黑的原因 此次我们网站遭到的是sql注入攻击,具体攻击目标是数据库中存放2009年1月份数据表,黑客修改了这张表的一个字段的信息,导致了我们网站被嵌入带有威胁的js代码。 2、解决办法 到目前为止,我们已经把整个数据库的所有记录信息都进行了排查、消除了所有带有危害的数据,我们也已经把所有容易受到攻击的端口关闭(ftp的21端口)、并重新设置数据库的用户名和密码;另外,开发人员和系统人员都在努力寻找和修补在Web服务器上可能存在的sql注入漏洞。 3、未来防范策略 (1)、严格限制对sql server数据库的访问权限; (2)、对网站的sql语句进行全面排查,确保所有对数据库请求操作都进行字符串过滤; (3)、关闭除了80和443以外的其他所有端口; (4)、定期对数据库最可能受攻击的数据进行安全检查。

May 21, 2009

设计模式:单件模式C#实现,源代码

单件模式属于创建型模式,创造性模式主要是关注于如何以及何时创建对象。Singleton 模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点。在程序设计过程中,有很多情况需要确保一个类只能有一个实例。 namespace Singleton.Design.Pattern { class Program { static void Main(string[] args) { //Singleton e = new Singleton(); 这是错误的,因为已经设定为保护类型了 Singleton instance = Singleton.Instance(); instance.Show(); Console.ReadKey(); } } public class Singleton { private static Singleton instance; protected Singleton() { } public static Singleton Instance() { if (instance == null) { instance = new Singleton(); } return instance; } public void Show() { Console.WriteLine("Singleton is Show now!"); } } }

May 21, 2009

设计模式:抽象工厂模式C#实现,源代码

前一篇文章介绍了简单工厂和工厂方法模式,这次讨论抽象工厂模式。 1、抽象工厂模式定义 抽象工厂模式也叫Abstract Factory模式,是由GoF提出的23种设计模式中的一种,也是对象创建型模式之一。它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它提供一个接口,以创建多个相关联的对象,而无需具体指定其具体的类。形象地说,它是一个工厂,能够生产众多产品。当用户需要某种产品的时候,不需要去关心这个产品的具体实现,而只需要指定产品的名称,抽象工厂就能够按你的要求进行生产。这里所指的产品,在C#中我们代表的是一个实例的类。 2、在什么情况下使用抽象工厂模式 在面向对象的程序设计中,我们经常会定义许多类,并通过new对其进行实例化。一旦类对象较多,且在实例化的时候,要做的初始化工作比较复杂的时候,我们就可以通过抽象工厂来管理。根据对象的性质和内容分别抽象成类,同时定义接口和接口方法。一旦定义了抽象工厂,实例类的工作就交给工厂,使用者只需要告诉工厂,你实例化的对象是什么就行了。 3、抽象工厂模式实现原理 抽象工厂模式(Abstract Factory)强调的是对象组合机制,由在父工厂内定义不同的“子工厂”对象来负责不同的目标对象的创建。请注意下面要点: (1)、 抽象工厂模式中,产品(目标对象)的使用者可能需要使用具体的子工厂来生成该产品; (2)、抽象工厂模式采用传参数的形式直接在父工厂内决定该产品对象应该由哪一个子工厂生产。即Abstract Factory模式中,跟客户打交道的只有抽象工厂与抽象产品,客户不需要知道产品由哪个工厂生产,也不需要知道被生产的是哪一种具体的产品; (3)、Factory Method模式中,省城的对象产品只限定于某一类产品;Abstract Factory模式则可以提供多个生产接口生成多类产品; (4) 、Abstract Factory模式Factory Method模式的更高层次的抽象,也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况。 4、C#实现代码 using System; using System.Collections.Generic; using System.Text; namespace AbstractFactory.Design.Pattern { class Program { static void Main(string[] args) { IAbstratFactory factory1 = new ConcreteFactory1(); IAbstratFactory factory2 = new ConcreteFactory2(); Evironment e1 = new Evironment(factory1); Evironment e2 = new Evironment(factory2); e1.Show(); e2.Show(); e1.Run(); e2.Run(); Console.ReadKey(); } } //抽象产品 public interface IAbstractProduceA { void MakeProduce(); } public interface IAbstractProduceB { void InterTract(IAbstractProduceA a); } //具体产品 public class ProduceA1:IAbstractProduceA { public void MakeProduce() { Console.WriteLine(“ProduceA1 is Created now!”); } } public class ProduceB1 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this + " contact with " + a); } } public class ProduceA2 : IAbstractProduceA { public void MakeProduce() { Console.WriteLine(“ProduceA2 is Created now!”); } } public class ProduceB2 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this+" contact with “+a); } } //抽象工厂 public interface IAbstratFactory { IAbstractProduceA CreateProduceA(); IAbstractProduceB CreateProduceB(); } //具体工厂 public class ConcreteFactory1 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA1(); } public IAbstractProduceB CreateProduceB() { return new ProduceB1(); } } public class ConcreteFactory2 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA2(); } public IAbstractProduceB CreateProduceB() { return new ProduceB2(); } } //客户端 public class Evironment { private IAbstractProduceA abstractProdueA; private IAbstractProduceB abstractProdueB; public Evironment(IAbstratFactory factory) { abstractProdueA = factory.CreateProduceA(); abstractProdueB = factory.CreateProduceB(); } public void Show() { abstractProdueA.MakeProduce(); } public void Run() { abstractProdueB.InterTract(abstractProdueA); } }

May 21, 2009