2010-09-29 97 views
0

嘿家伙..我正在C#中编写一个Windows应用程序,用于缩小CSS文件并将JS文件打包为批处理作业。应用程序的一个障碍是,如果用户选择已经打包的JavaScript文件,该怎么办?它将最终增加文件大小,完全击败我的目的!如何检测JS是否已打包

正在打开文件并寻找字符串eval(function(p,a,c,k,e,d)够了吗?我的猜测是否定的,因为那里有其他的JS打包方法。帮帮我!

+0

谢谢大家,为您解答。每个答案都以某种方式帮助了我。最后我今天在我的博客上免费发布我的打包工具。检查出来,让我知道 - http://j.mp/mini5ive。没有垃圾邮件,承诺;-) – GPX 2010-10-10 06:20:34

回答

3

有人可能会建议你比较前后JS的大小和返回/使用两者中较小的一个。

UPDATESep 30 at 1:02

基于在评论提问GPX下面是一个非常简单的方式告诉。有可能是决定本的不同,或更准确,方法,但这应该让你在正确的方向前进:

var unpackedJs = File.ReadAllText(...) 
var unpackedSize = jsContent.Length; 
var packedJs = ... // Your Packaging routine 
File.WriteAllText(pathToFile, unpackedSize < packedJs.Length ? unpackedJs : packedJs) 
+0

这是一个相当合理的解决方案,但我打开文件,阅读内容,更改并保存。如果我能在写入文件之前弄清楚文件大小,这将会很有帮助。任何指针? – GPX 2010-09-30 01:02:50

1

我会检查文件大小和代码(例如:平均线长度)线。这两个信息应该足以知道代码是否足够紧凑。

试试这个demo

0

当您创建/保存缩小文件时,请使用标准文件名约定“Filename.min.js”。然后,当他们选择文件时,可以检查该文件是否可靠。

我不认为在防伪上太过分是明智的做法。如果一个用户(他是一名开发人员)不够聪明,可以对文件进行双重打包,他们应该遇到问题。我知道你应该给他们带来怀疑的好处,但在这种情况下,似乎并不值得花费。

+0

我同意。但是我想到的是一次性的灵魂作用,即使它在所有JS引用中与“.min”一样微不足道,也不会为用户提供编辑代码的额外任务。 – GPX 2010-09-30 01:07:38

0

如果您正在使用安全最小化例程,则您的输出应该与输入相同。我不会推荐你提到的例程。 MS的Ajax Minifier是一个很好的工具,甚至可以提供在您的项目中使用的dll。这会让你的关注成为一个非问题。

+0

我没有看到你的意思是“安全”。 PACKER已经被很多年的所有人所使用。至少和通过Web浏览器放置代码一样安全。 – 2010-09-29 17:13:09

+0

是的。 PACKER是安全的,因为重新包装一个已经包装好的JS仍然会使它变得有用,但只有文件大小更大! – GPX 2010-09-30 01:05:46

0

我会建议为打包文件的扩展名添加'.min'前缀,如'script.min.js'。然后只需检查文件名称。

除此之外,我会建议检查线条有多长,以及使用了多少空间。精简/打包的JS通常几乎没有空格(通常是字符串)和非常长的行。

1

我指导你发布一个表明包装不好的帖子。

http://ejohn.org/blog/library-loading-speed/

而是使用微小。 Google Closure编译器可以通过REST Web服务完成此操作。只能使用.min.js扩展名缩小(未打包)。

Gzip会做得更好,并且会被浏览器解压缩。最好在服务器上打开zip压缩文件,以便进一步压缩缩小的文件。

当然这引发了一个问题'如何判断我的Javascript是否已经缩小!'

+0

感谢您的链接,詹姆斯。但个人而言,我认为通过浏览器“打包”打包的JavaScript的开销并不能改变游戏规则,因为这些日子里,每个人都拥有功能强大的机器,并且它们没有太大区别。只是我的论点。你怎么看? – GPX 2010-10-10 06:24:06

+0

那么解压缩是在JavaScript中完成的 - 最好是进行jit编译 - 但更糟糕的是,每次页面加载时都必须发生 - 即使脚本来自缓存。 Gzip压缩会生成一个较小的文件,并由浏览器解压缩一次,然后放入缓存中。另外,设置起来非常简单,即使在更改文件时也无需执行任何操作。对我来说,这是不容易的。 – 2010-10-10 18:56:12