C#:读取JS和CSS文件内容的最佳优化方式

时间:2012-07-05 09:01:05

标签: c# asp.net file-io

使用 C#, Framework 2.0

  

读取JS和CSS文件内容的最佳优化方法是什么?

请注意,内容需要同时写出

编辑:

更清楚的是,在加载页面时,我需要读取所有JS文件的内容并在页面上写出内容。最后,这个页面将作为一个单独的JS文件,并以同样的方式用于CSS文件。

因为我在这里请求读取文件的内容次数。

我正在寻找在访问文件时优化其性能的最佳方法。

4 个答案:

答案 0 :(得分:0)

据我所知,这是阅读文件内容的最佳方式,

使用File.ReadAllText(filepath)获取内容。

filepath = Server.MapPath(jsFile);
if (File.Exists(filepath))
{
   contents = File.ReadAllText(filepath);
   Response.Write(contents);
}

答案 1 :(得分:0)

取决于项目类型,但您可以查看Bundling & Minification。这样你就不必重新发明轮子了。

答案 2 :(得分:0)

目标是什么?扫描输出?这是一个编码安全的版本(即:尽可能编码转换)

    void ConcatenateAllSafe(StreamWriter output, params string[] files)
    {
        foreach (var f in files)
        {
            using(StreamReader rd = new StreamReader(f))
            {
                string line = null;
                while (null != (line = rd.ReadLine()))
                {
                    output.WriteLine(line);
                }
            }
        }
    }

    // This version will assume everything is sharing the same encoding
    void ConcatenateAllUnsafe(Stream output, params string[] files)
    {
        var data = new byte[1024 * 64];//64k should be enough for anyone

        foreach (string f in files)
        {
            using (Stream inStream = new FileStream(f, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                for (int offset = 0,
                         read; 0 != (read = inStream.Read(data, offset, data.Length)); offset += read)
                {
                    output.Write(data, 0, read);
                }
            }
        }
    }

答案 3 :(得分:0)

已经有一个ToolkitScriptManager,它将捆绑,缩小和放大将所有javascripts压缩成一个请求。您可以尝试一下这个。

我理解您捆绑,缩小和放大的理由将javascript和CSS压缩成一个文件,但无法理解为什么必须为每个请求完成它。你可以,

  1. 使用CodeMaster in his answer(YUICompressor,Closure Compiler,AJAXminifier)建议的现有捆绑和缩小工具之一。这只会将脚本和CSS捆绑一次,也就是在构建时自身捆绑,并使用它来提供所有请求。对我来说,这是捆绑脚本并减少服务器负载的最有效方法,因为它们只是静态文件,而不需要处理它们来捆绑它们。此外,脚本可以被视为静态文件,并在客户端缓存或从CDN加载。

  2. 使用Toolkit脚本管理器方法,其中自定义处理程序将查找查询字符串,如果组合存在则查找其缓存,如果不使用Florion's answer构建输出并将其缓存以用于后续调用。通过这种方式,您可以避免频繁的文件读取。