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

作者:路口 来源:路口  时间:2009-08-04 13:07:00 

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

解决方案如下:

 

描述

备注

资源级别

    页面的资源级别:

  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",//文件输出方案(1,2,3,4)

"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

     

 


代码在开发中。欢迎大家一起探讨指教下。

标签:缓存,更新,脚本
0
投稿

猜你喜欢

  • mysql存储过程 游标 循环使用介绍

    2024-01-12 20:28:56
  • matlab读取串口数据并显示曲线的实现示例

    2022-12-17 15:56:17
  • 5个Python杀手级的自动化脚本分享

    2022-11-21 12:03:54
  • Python heapq库案例详解

    2022-12-27 12:26:52
  • 基于Python实现剪切板实时监控方法解析

    2023-05-31 16:01:59
  • ASP控制每页打印行数实例

    2008-04-13 06:48:00
  • 详解CentOS升级Python2.6到Python2.7并安装pip

    2023-06-13 18:59:45
  • python 合并表格详解

    2023-09-08 16:03:48
  • 使用Vue-router二级路由跳转另一条路由下的子级

    2024-05-09 09:52:07
  • SqlServer 2005 T-SQL Query 学习笔记(3)

    2024-01-18 23:44:01
  • Vue3响应式对象Reactive和Ref的用法解读

    2024-05-02 16:34:48
  • 如何在小空间放置大图片

    2009-08-04 13:04:00
  • python:解析requests返回的response(json格式)说明

    2023-11-05 15:43:25
  • 使用coverage统计python web项目代码覆盖率的方法详解

    2023-05-23 18:24:35
  • 通过FSO进行页面计数

    2008-11-27 16:02:00
  • Git 教程之标签详解

    2023-10-25 21:58:04
  • IE不支持border-spacing的解决办法

    2009-04-28 13:11:00
  • 详解JavaScript中的Object.is()与"==="运算符总结

    2024-04-22 12:50:25
  • 使用python 打开文件并做匹配处理的实例

    2022-01-15 16:27:30
  • Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并

    2023-11-20 23:14:50
  • asp之家 网络编程 m.aspxhome.com