博赛,打造web2.0 网赚第一强势品牌

显示标签为“script”的博文。显示所有博文
显示标签为“script”的博文。显示所有博文

2009年7月9日星期四

9个javascript语法高亮插件


语法高亮效果使用非常频繁,特别是在博客里展示各种代码的时候,可以让代码更易读。我们身边就有很多语法高亮的插件,其中大部分是用javascript写的,也有一些是通过server端语言实现(比如Phyton或Ruby)。


下面介绍的是一些纯javascript实现的语法高亮插件。


英文原文:http://www.webdesignbooth.com/9-useful-javascript-syntax-highlighting-scripts/


1. SyntaxHighlighter


我相信这个插件是我们使用多的,它支持超多的语言,如果遇到不支持的语法还支持自定义。syntax-highlighter


2. SHJS


SHJS 是js语法高亮插件的代表,它支持很多编程语言,兼容Firefox 2 &3, IE 6 & 7, Opera 9.6, Safari 3.2 &Chrome 1.0。
shjs


3. beautyOfCode


beautyOfCode 是一个基于jQuery的语法高亮插件,使用了Alex Gorbatchev的语法高亮脚本使它更贴近 XHTML标准。
beauty-of-code


4. Chili


Chili is也是基于jQuery的语法高亮插件,支持很多语言并且带很多可配置项。chili


5. Lighter.js


Lighter.js是基于MooTools的免费语法高亮插件, 简单易用。
lighter-js


6. Highlight.js


highlight.js 同样是简单易用,支持多数语言,它有很多可以跟CMS、论坛和博客整合的插件。highlight-js


7. DlHighlight


DlHighlight是一款比较简单的高亮插件,仅支持JavaScript, CSS, XML, HTML。dlhighlight


8. Google Code Prettify


Google Code Prettify是谷歌出品的语法高亮插件,可以高亮html页面中的部分代码片段。google-code-prettify


9. JUSH


JUSH是另外一个 jQuery语法高亮插件 ,支持HTML, CSS, PHP, PY 和 SQL。
jush


本文链接:http://jsssc.cn/9-useful-javascript-syntax-highlighting-scripts/


本站所有文章,除特别标明外,皆为原创。如需转载,请保留本说明文字并以链接的形式保留本文链接和出处:


转载自:9个javascript语法高亮插件| 路可




Related posts:

  1. JQuery高亮插件
  2. 如何给JavaScript文件传递参数

2009年6月27日星期六

WEB前端优化的体会

随着WEB2.0时代来,给网络的带来了空前的发展。前端用户体验变得越来越显的重要,从而来弥补B/S结构的用户交互型差的一些弊端,可是这样会带来一个问题就是会增加客户端的压力,比如大量运用JS代码,大家都知道JS代码是运行在客户端的,会影响到整个网页的在浏览器的解析效率,这样也可能暗示着会增加客户端的流量,所以不管是从服务器负载角度还是站在用户的角度来看,对客户端的代码进行优化都显得尤为重要!本文主要内部和外部两方面来阐述WEB前端优化的方法。希望能给读者一些体会和启发。


    首先,我们通过一个雅虎的统计图表来看看打开http://yahoo.com的http的流量数据:



我们可以发现一个页面的从第一次发出服务器请求到完全载入到客户端的过程中,读取html代码只占了整个响应时间中的5%,这个结果适 用于绝大多数网站,在采样美国的前十位网站中,只有一家超过5%但少于20%,其余80%的时间是用来读取网页其他内容的,也就是说,前端(原文是 front-end,意思就是不包括html代码的其余内容,可以是图片,脚本,flash,视频,各种东西)。这就是为什么我们要把目光集中在这些东西 来提高显示速度的关键原因。


为什么要从前端开始着手有三个主要原因:


这里有提升和改进的潜力。如果能减少一半的体积,就能减少40%的响应时间。


改进前端比改进后端需要的时间和资源更少。(改进后端要重新设计应用程序规划,代码,寻找优化代码的方法,添加或改变硬件配置,分布式数据库,等等)


我们的黄金规则是:首先优化前端表现,这些东西耗费了用户端响应时间中的80%。


一、从代码之外,咱们有以下三种方法


1.运用cdn技术


具体方式,可以Google一下。(大体的原理好像就是判断访问者的位置及访问的内容从而来选择就近的服务器来处理用户的请求)


2.加一个长时间过期的头部


Expires: Thu, 15 Apr 2010 20:00:00 GMT
浏览器会用缓存来减少http请求数来加快页面加载的时间,如果页面头部加一个很长的过期时间,浏览器就会一直缓存页面里的元素。
不过这样会带来一个问题,就是如果页面里的东西变动的话就要改名字了,否则用户端不会主动刷新,在yahoo工作组用的是版本号,例如yahoo_2.0.6.js


3.Gzip压缩


Gzip是现在最流行和最有效的压缩方式,她是GNU开发的,RFC1952标准化。
(Gzip是在服务器端压缩图片,css,脚本等,传送到用户端的浏览器再解压,这样可以提高传输速度,不过对服务器的压力会增大,一般选择部分元素压缩比较合适。)


 


4.避免重定向


重定向会减慢用户体验,它会延迟所有的东西直至到达新页面。一个最浪费的重定向经常会发生而我们的开发者又会经常忽略的就是比如 http://astrology.yahoo.com/astrology的结果是重定向到http://astrology.yahoo.com /astrology/ 在Apache里用Alias 或者mod_rewrite或者DirectorySlash解决。
从一个旧网站跳转到新网站也是经常要用到重定向,还有就是连接一个网站中的不同部分和在某些情况下(比如不同浏览器,不同的用户帐号类型,等等)的用户导 向。用重定向很简单,而且只需要一点额外的代码,虽然在这些情况下用重定向减少了开发者的复杂度,但它降低了用户的体验,变通的做法是用Alias和 mod_rewrite如果两个部分是在同一主机上的话,如果是由域名变更引起的重定向,变通的做法是通过Alias或mod_rewrite创建一个 CNAME(一个DNS记录,创建一个别名,从一个域名指向另一个域名)


5.配置ETags


ETags(Entity tags)是服务器和浏览器的一个功能,它用来判断浏览器缓存里的元素是否和原来服务器上的一致。ETags比last-modified date更具有弹性,它用一个独一无二的字符串来标识一个元素的版本。
源服务器用响应头里的ETag来特定一个元素的ETag:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: “10c24bc-4ab-457e1c1f”
Content-Length: 12195
之后,如果浏览器要验证这个元素,它就会用If-None-Match头来回传ETag到源服务器。如果符合的话,一个304状态的代码就会从源服务器返回到浏览器,这样源服务器就节省了传输具体数据的开销。
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: “10c24bc-4ab-457e1c1f”
HTTP/1.1 304 Not Modified


用Etags的问题就在于它会标识那个特定的服务器,如果换了服务器,Etags也就失去了原有的功能,但是这种现在在网络上太常见了,因为我们经常用服务器集群。默认情况下,Apache和IIS会在Etag中内嵌数据,这样会动态减少验证成功的机会。


Apache1.3和2.x的ETag格式是inode-size-timestamp。虽然一个文件可能在不同服务器的同一个目录,同样的大小,安全级,时间戳等等,它的inode会随着服务器的不同而不同。


IIS5.0和6.0有同样类似Etags的东西,叫时间戳:ChangeNumber(更改号),更改号是一个用来追踪IIS配置变化的计数器,ChangeNumber在不同IIS服务器之间是不一样的。


它最终的问题就是,IIS和Apache产生的Etags会在不同服务器之间无法匹配,这样我们的浏览器就无法得到我们期待的304响应,而给我们 的是一个普通的200响应,和正常的数据流。如果你的网站只有一个服务器还无所谓,如果是集群,而你用的是默认的ETag配置,你的用户就会获得更慢的页 面,你的服务器也会有更高的负载,消耗更大的带宽资源,代理也无法高效缓存你的内容,甚至即使你有一个长时间过期的头部(按:见第三条规则),也不会阻止 它重新载入内容。


如果你不想发挥Etags提供的这个弹性验证模型的优势,你最好关掉它。Apache中关掉它的方法是在Apache的配置文件中写这么一句:
FileETag none


二、我们从代码方面来探讨有如下方法


1.减少http请求数


图片,css,script,flash,等等这些都会增加http请求数,减少这些元素的数量能减少响应时间。


CSS Sprites技术能减少图片的请求数,把零散的小图片放到一起,运用background-position来改变背景图片的位置,前提是html元素事先定义好宽高,其实就像一个遮罩,移动背景就会看到不同的景象。


内嵌图像 用data:URL scheme的方式把图片内容代码直接嵌入html代码中,这样会增大html代码的体积,改进的方式是把内嵌图片嵌入到css中(css被缓存),这样就会更好的减少http请求数而且不增大html的体积。


很多用户都是在空缓存的情况下进入你的网站的,这样第一次的速度就会显得很重要。


第一条规则是最重要的一条规则。


2.把样式表放到顶部


我们发现把css放到文档头部会让网页加载得更快。因为这样可以让页面逐渐加载。
把样式表放到接近底部的问题是它阻止了页面元素的逐渐显示。这样还会导致“flash of unstyled content” 即在样式表加载之前页面内容是以没有样式的形式显示出来的,待加载完样式后,页面重绘,内容一闪即改变了样式表现。


3.把脚本放到底部


把脚本放到尽可能底部的地方,一个原因是让页面逐渐渲染,另一个是实现更好的并行下载。


对于脚本,脚本以下的内容被阻止逐渐加载了,因为只有当下载完脚本以后才会下载下面的内容,第二个脚本引起的问题是阻止平行下载。 “http/1.1 specification”建议浏览器对一个域名, 同一时间下载数不超过2个(按:实际监测发现一般有超过2个),我曾经让ie并行下载100个图片。 当脚本正在下载的时候,浏览器不会开始下载任何东西。


4.避免css expressions


css expressions 是一个有力(和危险)的方式动态的改变css的属性。他们自ie5就开始被支持,举个例子,用css expression可以让背景色每个小时轮换一次。但是被非ie浏览器忽略的。


background-color: expression( (new Date()).getHours()%2 ? “#B8D4FF” : “#F08A00″ );


expressions的问题就在与它的计算频率绝对超出我们的想象,甚至当我们移动鼠标,都会引起页面的重绘!


下面是举例页面


减少css expressions计算次数的一个方法就是使用一次性的expressions。 当第一次expression计算出一个明确的值,就让样式等于这个值,不再变动。如果样式的属性一定要动态的改变,就用时间句柄吧!


5.让脚本和样式外延


Javascript和CSS应该是外部调用还是内嵌呢?
用外部调用文件的方式更快,因为他们是可以被缓存的,如果是内嵌在页面中他们就无法被缓存了!想想如果用户要在你的网站看很多很多的页面,如果都是使用同一个外部脚本和样式,那么他们一旦被缓存,就再也不需要下载了,这样会给你带来很大的潜在好处。


 


6.减小脚本体积


有两个比较流行的工具是用来减小脚本的体积的–JSMin和YUI Compressor。(按:这个压缩和Gzip压缩是不一样的,Gzip是传输压缩,这个是代码压缩)。


我们以上方法,读者应该适当的选择或配合使用,我们在选择方法的原则是应该以最低的代价来完成客户端的功能。




No related posts.

WEB前端高性能优化之JavaScript优化细节

关键字: javascript优化



一、避免出现脚本失控


不论什么脚本,在任何时间、任何浏览器上执行,都不应该超过100毫秒。如果实际执行的时间长于这个底限,一定要将进程分解成若干更小的代码段。


脚本失控基本上有以下四个方面的原因:


1. 在循环中执行了太多的操作


    解决这个问题的诀窍就是用下面这两个问题来评估每个循环:
    1. 这个循环必须要同步执行么?
    2. 循环里面的数据,必须要按顺序执行么?


    如果1和2都可以否定,那么建议使用setTimeout方式将循环体切分成小块进行异步处理


    将循环中的定义变量及初始化操作放到循环外。参见:http://www.w3cgroup.com/article.asp?id=111


2. 臃肿的函数体


    在JavaScript中,我们应该尽可能的用局部变量来代替全局变量!


    理解JavaScript作用域链。参见:http://www.jslab.org.cn/?tag=ScopeChainAndClosure


    理解原型链。参见:http://www.jslab.org.cn/?tag=prototypeChain


3. 过多的递归


    使用迭代方式替代递归,采用memoization技术优化递归


    斐波那契数列的递归算法优化,参见:http://www.jslab.org.cn/?tag=Memoization


4. 过多的DOM调用


    在Web开发中,JavaScript的一个很重要的作用就是对DOM进行操作。可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行回流(reflow)操作。而执行了过多的回流操作,你就会发现自己的网站变得越来越慢了。我们应该尽可能的减少DOM操作。


    回流操作主要会发生在几种情况下:


        * 改变窗体大小
        * 更改字体
        * 添加移除stylesheet块
        * 内容改变哪怕是输入框输入文字
        * CSS虚类被触发如 :hover
        * 更改元素的className
        * 当对DOM节点执行新增或者删除操作或内容更改时。
        * 动态设置一个style样式时(比如element.style.width=”10px”)。
        * 当获取一个必须经过计算的尺寸值时,比如访问offsetWidth、clientHeight或者其他需要经过计算的CSS值(在兼容DOM的浏览器中,可以通过getComputedStyle函数获取;在IE中,可以通过currentStyle属性获取)。


    解决问题的关键,就是限制通过DOM操作所引发回流的次数:


        1.在对当前DOM进行操作之前,尽可能多的做一些准备工作,保证N次创建,1次写入。


        2.在对DOM操作之前,把要操作的元素,先从当前DOM结构中删除:
            1. 通过removeChild()或者replaceChild()实现真正意义上的删除。
            2. 设置该元素的display样式为“none”。
            修改操作完成后,将上面这个过程反转过来,建议使用第2种方式。


        3.CSS部分
            另外一个经常引起回流操作的情况是通过style属性对元素的外观进行修改,如element.style.backgroundColor = “blue”;
            每次修改元素的style属性,都肯定会触发回流操作,要解决这个问题可以:
            1.使用更改className的方式替换style.xxx=xxx的方式。
            2.使用style.cssText = ”;一次写入样式。
            3. 避免设置过多的行内样式
            4. 添加的结构外元素尽量设置它们的位置为fixed或absolute
            5. 避免使用表格来布局
            6. 避免在CSS中使用JavaScript expressions(IE only)


        4.将获取的DOM数据缓存起来。这种方法,对获取那些会触发回流操作的属性(比如offsetWidth等)尤为重要。


        5.当对HTMLCollection对象进行操作时,应该将访问的次数尽可能的降至最低,最简单的,你可以将length属性缓存在一个本地变量中,这样就能大幅度的提高循环的效率。


 


二、避免大字符串字面量对象操作,如 字符串.lenth,尽量转换为new String(字符串)后再进行操作


 


三、在做字符查找替换等操作时善用正则表达式


快速掌握ECMAScript正则表达式。参见:http://www.w3cgroup.com/article.asp?id=202


 


四、减少语句,利用运算符优先级实现if else表达式,使用三元表达式,使用连续表达式(看情况,将损失程序可读性)


利用运算符优先级实现if else表达式参见:http://www.w3cgroup.com/article.asp?id=131


 


五、将CSS,JS文件合并到一个文件(非BT爱好者还是不要玩了^_^)


参见:http://www.w3cgroup.com/article.asp?id=29


 


六、避免Javascript事件绑定出现内存泄漏


“These memory leaks often occur as a result of circular references between JavaScript objects and objects within IE’s DOM (document object model).” Microsoft GPDE Team Blog


参见:http://www.w3cgroup.com/article.asp?id=207


 


七、使用WEB Workers技术(支持html5的浏览器)


Web Workers为JavaScript提供了一种能在后台进程中运行的方法,Web Workers进程能够在不影响用户界面的情况下处理任务。


参见:http://www.w3cgroup.com/article.asp?id=242


 


八、Y!14条(14 Rules for Faster-Loading Web Sites)


    *  Rule 1 - Make Fewer HTTP Requests
    * Rule 2 - Use a Content Delivery Network (Server端)
    * Rule 3 - Add an Expires Header (Server端)
    * Rule 4 - Gzip Components (Server端)
    * Rule 5 - Put Stylesheets at the Top
    * Rule 6 - Put Scripts at the Bottom
    * Rule 7 - Avoid CSS Expressions
    * Rule 8 - Make JavaScript and CSS External
    * Rule 9 - Reduce DNS Lookups (Server端)
    * Rule 10 - Minify JavaScript
    * Rule 11 - Avoid Redirects (Server端)
    * Rule 12 - Remove Duplicate Scripts
    * Rule 13 - Configure ETags (Server端)
    * Rule 14 - Make AJAX Cacheable
    * Rule 15 - Use Iframes Wisely


参见:http://www.w3cgroup.com/article.asp?id=97


 


九、微软早期的DHTML优化建议


    * 使用数组push替代字符串累加


 


原创文章,转载请注明出处http://www.w3cgroup.com/article.asp?id=255


本文链接:




Related posts:

  1. 如何给JavaScript文件传递参数

2009年6月20日星期六

各种浏览器前端开发调试工具

 


一、IE网页调试插件


IE Developer Toolsbar


IE下的FireBug。HTML及CSS调试工具。.该产品让开发人员能够深入探索和理解Web页面,帮助开发者更好地创建Web应用.安装后可以在IE中快速分析网页的软件.该工具条可集成在IE窗口,或以浮动窗口形式存在.


IE Developer Toolbar 的特性如下:



  • 浏览和修改Web页的文档对象模型(DOM).

  • 通过多种技术方式定位、选定Web页上的特定元素.

  • 禁止或激活IE设置.

  • 查看HTML对象的类名、ID,以及类似链接路径、tab顺序、快捷键等细节


Microsoft Script Debugger


Microsoft(R) Script Debugger 是扩展所有 Microsoft(R) ActiveX(R) Scripting 主机应用程序的调试环境—例如 Microsoft(R) Internet Explorer (IE) 或 Microsoft(R) Internet Information Server (IIS)。


与 IE 和 IIS 联合使用时,Web 开发人员可在客户机和服务器上浏览、编辑和调试带脚本的 HTML 页(.htm、.html 和 .asp 文件)。Script Debugger 使开发人员更加有效地开发脚本应用程序。


Companion.JS


IE下的javascript调试工具。请注意,这可不是一个js文件,而是一个名字,它是作为ie的插件来安装使用的,而且需要结合Microsoft Script Debugger使用,通过安装这个工具,但页面出现错误时会在左上角弹出一个小错误提示,点击会在IE下面显示出一个错误控制台,就如FF下的 firebug控制台一样。错误信息提示很详细。


SuperPreview


SuperPreview是微软发布的网页开发调试工具,自带有很多元素查看工具,如箭头、移动、辅助线、对比……,在查看网页的IE6/IE7/IE8不同表现的同时,可以对比效果。


IETester


同时拥有IE6、IE7、IE8(Vista兼容)。延伸阅读:TAG: IETester


二、firefox网页调试插件


FireBug


Firebug 和 firefox 整合在一起,使你浏览网页时手边有了一套强大的网页开发工具。你可以编辑、调试和监控任何网页上的 CSS、HTML 和 Javascript。要查阅文档、截图和论坛请访问Firebug的网站:http://www.getfirebug.com.


Web Developer


Web Developer作为FF的插件存在,主要功能表现在几个重要的方面:


对页面中的文本、图像、媒体文件进行控制,对网页所应用的CSS文件的id与class辅助查看,表格辅助查看,可以实现修改CSS文件实时显示出得到的页面效果等等。


Web Developer插件能够帮助我们对CSS网站进行分析,我们使用FF对网页进行浏览,运用Web Developer插件不仅仅只是能看到对方的源代码,还能方便的分析出页面的布局结构,CSS书写方式,鼠标所在位置的id或class是什么等等,使 我们能迅速的理解、学习别人的成功经验,进而更加方便快捷的掌握CSS布局技术。


YSlow


YSlow是yahoo美国开发的一个页面评分插件,基于Firebug, 非常的棒,从中我们可以看出我们页面上的很多不足,并且可以知道我们改怎么却改进和优化。YSlow从Firebug收集当前网页和该网页的访问信息后进行分析,如有必要则给出如何提高页面加载速度的建议,比如减少DNS查询,使用外部并压缩Javascript等。


Javascript Debugger


FireFox下的javascript调试工具,比FireBug有更强大的调试功能.


三、其它


Opera Developer Tools


Opera下的DOM,CSS查看工具,类似FireBug.


webkit


Safari下的开发调试工具


Fiddler


一个很强大的http流查看工具


Httpwatch


数据分析工具,头消息接受/发送的查看,POST数据查看.等等。




No related posts.