CSS.JS文件发布机制的思考

     

    在开发过程中,有时遇到由于缓存问题导致页面不能及时更新,有时页面引入了不必需的样式脚本文件,有时由于文件太多,字节过大导致页面的性能缓慢,为了解决这些问题,个人设想了一个初步的解决方案。

     

     

    解决方案如下:

     

     

     

    描述

    备注

    资源级别

      页面的资源级别:

    1. 全局级(Common
    2. 模块级(Module
    3. 页面级(Page

     

    优化方案

      优化主要从以下几个方面:

    1. 减少单个文件的字节大小
    2. 减少文件的个数(即减少http请求数)

       

    其他的优化是从开发技巧上进行的,取决于专业水平

      文件输出方案

    1. 合并
    2. 压缩

      基于资源级别及优化方案,制定以下4种方案:

      1、直接引用单个文件依次引入(<link/><script/>

      2、基于1,进行单个文件压缩

      3、按照资源级别合并成新的单个文件

      4、基于3,进行合并后的文件压缩



       

    思考点

    方案3 如何确定合并的文件个数?


    缓存问题

    采用时间戳后缀

     

    f2econfig_json

    配置文件:

    var f2eJson={
               
    "Version":"v3",//版本

    "Update":"20091015",//根据时间戳更新缓存

    "Compress":"1",//文件输出方案(1234

    "Common":[//全站公共样式

      "common/global.css"

    ],

    "Module":{ //模块及样式

           "模块1":["product,.css"]

    },

    "Page":{//每个页面所拥有的样式

           "index.php":["","sys/index.css"],

             //第一个元素存储模块引用名称,无则留空

           "search.php":["模块1","product/search.css"]

           //引用多个模块,用 “,”隔开,比如:   模块1,模块2

     }

    }

    1. php有专门的json转换库
    2. js的配置结构同css的配置json

    f2engine.php

       1、读取json配置文件,转化成php数组
       2、根据每个页面的资源参数,查找该页面拥有的样式资源
       3、根据文件输出方案,进行处理
       4、在页面上输出
    1. 配置文件没有更新的情况下,只解析一次json为数组
    2. 只解析一次资源,并将结果保存,供下次直接使用

       

    例子

      比如search.php这个页面的样式引用

       

    1. 根据页面找到页面级资源: Page["search.php"]
    2. 根据该数组的第一个值查找所引用的模块样式
    3. 根据配置文件中的“Compress”值确定文件输出方案,并进行处理
    4. 在页面上进行输出

      //全站样式 common

      <link type="text/css" href="common/global.pack.css?20091015" rel="stylesheet" />

      //模块样式 module

      <link type="text/css" href="product.pack.css?20091015" rel="stylesheet" />

      //页面样式 page

      <link type="text/css" href="product/serach.pack.css?20091015" rel="stylesheet" />

       

      :压缩后文件名称变为   search.pack.css

       

     

     

    代码在开发中。

    欢迎大家一起探讨指教下。

     

     

     

Tag标签: 前端
0
0
(请您对文章做出评价)
« 上一篇:我常用的ff插件
posted @ 2009-08-03 15:19 路口 阅读(2688) 评论(15)  编辑 收藏 网摘

  回复  引用  查看    
#1楼2009-08-03 16:17 | 莫耶      
rails的机制就是这样的
呵呵

  回复  引用  查看    
#2楼2009-08-03 16:25 | wingoo      
关注下,,
始终没找到好的方式

  回复  引用  查看    
#3楼[楼主]2009-08-03 16:40 | 路口      
引用莫耶:
rails的机制就是这样的
呵呵


能给个rails的这个机制的资料么,分析学习下 :)

  回复  引用  查看    
#4楼2009-08-03 16:50 | Kai.Ma      
yahoo采用“引用路径=文件名+版本号”机制。
  回复  引用  查看    
#5楼2009-08-03 16:57 | 司徒正美      
我就是学ror的
sass能动态生成css
在生产环境,我们只要少许设置就可以把多个css压缩成一个,js同理!
缓存更不用说,ROR在这方面走在世界最前列,其他框架至少要追十年八年才追得上它!

  回复  引用  查看    
#6楼2009-08-03 17:04 | 温景良(Jason)      
学习了
  回复  引用  查看    
#7楼[楼主]2009-08-03 17:19 | 路口      
引用Kai.Ma:yahoo采用“引用路径=文件名+版本号”机制。

这个也是在有版本更新的时候,防止缓存的方式。
不知道它是以怎么样的一种机制来更改文件名后面的版本号的,手工一个个改不大可能的。这个机制是关键。

  回复  引用    
#8楼2009-08-03 17:20 | 游客9527[未注册用户]
@司徒正美
你也不怕风大闪了舌头

  回复  引用  查看    
#9楼2009-08-03 17:30 | CPU风扇      
严重需要这方面的资料
  回复  引用  查看    
#10楼2009-08-03 17:47 | 飞天小肥猪(膘叔)      
@司徒正美
十年八年,吓死人了。。
须知覆水难收。
任何事物都有两面性,当他照顾了某样东西的时候,必然会放弃另外的东西

  回复  引用  查看    
#11楼[楼主]2009-08-03 18:04 | 路口      
引用飞天小肥猪(膘叔):

膘叔,您来了。^_^

  回复  引用  查看    
#12楼2009-08-03 18:23 | 勇仔      
引用路口:
引用Kai.Ma:yahoo采用“引用路径=文件名+版本号”机制。

这个也是在有版本更新的时候,防止缓存的方式。
不知道它是以怎么样的一种机制来更改文件名后面的版本号的,手工一个个改不大可能的。这个机制是关键。

可能文件名根本就没改~~重写URL版本号忽略。唯一的作用是使客户端缓存失效。

纯猜测,不为以上言论负任何责任!!

  回复  引用  查看    
#13楼2009-08-03 18:24 | 勇仔      
引用司徒正美:
我就是学ror的
sass能动态生成css
在生产环境,我们只要少许设置就可以把多个css压缩成一个,js同理!
缓存更不用说,ROR在这方面走在世界最前列,其他框架至少要追十年八年才追得上它!

ROR框架几岁了?

  回复  引用  查看    
#14楼2009-08-03 20:00 | 司徒正美      
引用勇仔:
引用司徒正美:
我就是学ror的
sass能动态生成css
在生产环境,我们只要少许设置就可以把多个css压缩成一个,js同理!
缓存更不用说,ROR在这方面走在世界最前列,其他框架至少要追十年八年才追得上它!

ROR框架几岁了?

这与发布时间没关系,正如一个人的能力与其年龄挂不上钩一样!你倒不想想,正因为rails,ruby才一夜成名,PHP与java都有其模仿者,吸收其COC、DRY、REST理念的更多不胜数!但PHP的类的能力太弱,java虽然有动态语言的特征,但底子里是静态语言,它们都模仿得太差了!人家一句代码实现的功能,换它们起码要写三四倍!这里学.net的人较多,就不说它了!我们的眼光要放远一些,现在的情形是外国的东西流行了五六年,才被国内普遍吸纳……web标准就是个例子,国内还有许多人用表格布局!到电信行业,日本仔早就不用的小灵通卖给中国,中国就像捡到宝那样高兴,现在还大喊3G,人家都就WIFI,光纤了!你站的高度决定了你能看多远,你试一试ROR吧!

  回复  引用  查看    
#15楼2009-08-03 23:03 | Jun1st      
@司徒正美
有的时候站得高,不一定看得远,即使你看得远,那又怎么样?
外国流行的东西,不一定适合国情,决定一个技术成功与否,不一定在于它本身,关键是市场
先进的东西不一定好,适合自己的才好。小鬼子屁股大点地方,一个礼拜全国的3G网络就架设好,下个礼拜心血来潮就换上4G,国情不一样的
不过呢,学点新东西肯定是不错的,有好处。兼容并蓄,开阔思维