By cfddream on 2010/03/04
今天在逛 firebug.lite时,发现有python的文件;下来看下,原来是压缩js的,去掉多余的空格跟注释,但没有去掉换行符,统一改成一行。
使用方法:
python minifier.py firebug-lite.js firebug-lite-compressed.js
Posted in JavaScript, python, 未分类 | Tagged compressed
By cfddream on 2010/03/03
网页制作Webjx文章简介:全局变量是魔鬼,这句话在JavaScript存在的地方应该就是成立的,当然Firefox扩展也不例外.
全局变量是魔鬼,这句话在JavaScript存在的地方应该就是成立的,当然Firefox扩展也不例外,如果大家把多于一个的对象置于全局命名空间下,和其他扩展的冲突是很容易发生的,而且发现这种冲突引起的错误是很困难的,因为每个人的扩展列表都不一样啊。避免全局名字污染已经成了一个基本原则,本文从这点引申,介绍了一个应用在Firebug中的扩展架构模式,非常值得推荐。
【原文】Firefox Extensions: Global Namespace Pollution
【作者】Jan Odvarko
【译文】http://cuimingda.com/2009/01/
【译者】明达
以下是对原文的翻译:
最近有几个开发者向我咨询如何设计Firefox扩展的架构,第一个显现在我脑海中的答案就是要合理定义那些在ChromeWindow作用域下的全局变量。
不合理的定义全局变量,可以轻易的引发不同扩展之间的冲突,而这些完全是应该避免的(这也是AMO审阅的步骤之一),因为冲突所引发的问题是很难被发现的。就目前的开发环境来说,全局变量就是魔鬼,尤其是采用OOP开发模式的时候。
我不想重复介绍如何从头开始开发一个Firefox扩展,对于这方面已经有很多非常详细的文章。本文的重点放在如何设计一个更加易于维护的Firefox扩展架构。
如果你对前面的介绍感兴趣,那就接着看吧。。。
命名空间架构
扩展之间发生冲突的重要原因就是因为定义了不合理的全局变量。我认为对每个扩展来说,只有一个全局变量已经很足够了(可以根据扩展的信息来定义这个唯一的全局变量的名字,比如可以是扩展的名字、域名、地址等),不仅可以满足我们的开发,而且可以避免那些令人讨厌的冲突。
Firebug使用的命名空间架构,基本建立在著名的Module Pattern基础上(这种模式最早由Douglas Crockfod定义)下的。这种模式简单而清晰,但其实我在很长时间里都不是很明确这种模式究竟是如何工作的(I hadn’t understand how it actually works for a long time)。我相信每个开发者都可以充分利用这个方法。
基本的思路是将每个JavaScript脚本文件放进自己的作用域,这是通过一个函数来实现的,没有定义任何全局变量,比如下面这段代码:
function() {
// TODO: 脚本文件中的全部代码
}
我管这个函数就叫做命名空间。摆在眼前的第一个问题是,如何确定这个函数的内容会在正确的时间被调用。第二个问题是,如何在多个脚本文件中共享对象(这个会在后面的章节解答)。 Firebug通过将所有的命名空间进行注册,并在Firefox chrome UI加载的时候调用来解决第一个问题,也就是下面这段代码:
myExtension.ns(function()
{
// TODO: 脚本文件中的全部代码
});
命名空间(就是原来定义的那个函数)为当作myExtension.ns函数的一个参数,而myExtension对象是这个扩展中定义的唯一全局变量。这个对象代表着整个扩展。不用担心这个名字太长,我们可以为他建立个快捷方式(在实际开发中,这个名字可能会类似 comSoftwareIsHardMyExtension这个样子)。
ns函数比较简单,就是把所有的方法都添加到一个数组中。
var namespaces = [];
this.ns = function(fn)
{
var ns = {};
namespaces.push(fn, ns);
return ns;
};
执行已注册命名空间的函数,不可以命名为apply,别的什么名字都可以。
this.initialize = function() {
for (var i = [...]
Posted in Firebug, JavaScript | Tagged framework, pattern
By cfddream on 2010/03/02
gvim 在 linux mint8环境下
前提安装有mozilla js 解析器 rhino
没有则如下安装
sudo apt-get install rhino
jslint 下载地址 :http://www.jslint.com/rhino/index.html
~.vimrc 配置如下
function! g:JSlint(b)
let s = bufname(”%”)
let es = ‘:!rhino /home/cfddream/WebDev/tools/jslint/jslint_rhino.js ‘.s
if a:b == 0
exec es
else
exec es.’ [...]
Posted in JavaScript, vim | Tagged jslint
By cfddream on 2009/12/17
Speed Up Your JavaScript
View more documents from Nicholas Zakas.
Posted in JavaScript | Tagged Performance, ppt, speed
By cfddream on 2009/12/17
function arr_get(arr, is){
if(!is) return arr;
else {
if(String(is).indexOf(’:') == -1){
var l = arr.length ,i = Number(is);
return arr[i [...]
Posted in JavaScript, python | Tagged index
By cfddream on 2009/12/06
function range(start, end, step){
var l = arguments.length;
if(l == 0) return [];
if(l == 1) return arguments.callee(0, start, 1);
if(l == 2) return arguments.callee(start, end, 1);
var temp = []
// start = start>>0, end [...]
Posted in JavaScript | Tagged python, range
By cfddream on 2009/12/01
Advanced JavaScript Techniques
View more documents from Dmitry Baranovskiy.
Javascript Security
View more presentations from jgrahamc.
Your JavaScript Library
View more documents from Dmitry Baranovskiy.
Loading JavaScript: Even a caveman can do it
View more presentations from Kyle Simpson.
Unittesting JavaScript with Evidence
View more presentations from Tobie Langel.
JavaScript – Optimising Where it Hurts (Jake Archibald)
View more documents from Jake Archibald.
HTML5 JavaScript APIs
View more [...]
Posted in JavaScript, 技术 | Tagged js
By cfddream on 2009/11/18
Extreme JavaScript Performance
View more documents from Thomas Fuchs.
Posted in JavaScript
By cfddream on 2009/10/29
微软发布了 Ajax Library 6 和 Ajax Minifier
相关信息:http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx
http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488
跟 Yahoo 开发的 yuicompressor 进行了对比,ajax-minifier 压缩率略高一点点!
Posted in JavaScript, library | Tagged ajax, library, minifier
By cfddream on 2009/10/20
1.先来看下看下函数声明的两种方式:
// 常规函数声明;在程序的上下问(注意:作用域),都可以访问调用
function add_one(x, y){
return x + y;
}
// 函数直接量, 使用变量来引用匿名函数;只能在函数直接量被声明后才能调用。
[...]
Posted in JavaScript | Tagged browsers, js