引用静态资源时加上时间戳,处理浏览器缓存问题

参考其他文章列举存储过程的优劣,据此分析目前智慧电站总项目下,还有那些地方的数据库操作,适合使用存储过程进行优化。

存储过程是什么?

储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。——维基百科

可以理解为数据库中的函数过程。

存储过程的优势

就我在项目中实际使用来说,当前台处理涉及多条数据库查询语句操作,并出现临时表需整合多个表筛选多余信息的情况下使用到了存储过程。并且发现在数据库中写一个存储过程,web端、移动端以及桌面端都可以调用。

引用自微软文档-存储过程(数据库引擎)

减少了服务器/客户端网络流量

过程中的命令作为代码的单个批处理执行。这可以显著减少服务器和客户端之间的网络流量,因为只有对执行过程的调用才会跨网络发送。 如果没有过程提供的代码封装,每个单独的代码行都不得不跨网络发送。

更强的安全性

  • 多个用户和客户端程序可以通过过程对基础数据库对象执行操作,即使用户和程序对这些基础对象没有直接权限。 过程控制执行哪些进程和活动,并且保护基础数据库对象。 这消除在了单独的对象级别授予权限的要求,并且简化了安全层。
  • 在通过网络调用过程时,只有对执行过程的调用是可见的。 因此,恶意用户无法看到表和数据库对象名称、嵌入自己的 Transact-SQL 语句或搜索关键数据。
  • 使用过程参数有助于避免 SQL 注入攻击。 因为参数输入被视作文字值而非可执行代码,所以,攻击者将命令插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
  • 可以对过程进行加密,这有助于对源代码进行模糊处理。

代码的重复使用

任何重复的数据库操作的代码都非常适合于在过程中进行封装。这消除了不必要地重复编写相同的代码、降低了代码不一致性,并且允许拥有所需权限的任何用户或应用程序访问和执行代码。

更容易维护

在客户端应用程序调用过程并且将数据库操作保持在数据层中时,对于基础数据库中的任何更改,只有过程是必须更新的。 应用程序层保持独立,并且不必知道对数据库布局、关系或进程的任何更改的情况。

改进的性能

默认情况下,在首次执行过程时将编译过程,并且创建一个执行计划,供以后的执行重复使用。 因为查询处理器不必创建新计划,所以,它通常用更少的时间来处理过程。

存储过程的劣势

很多文章提到存储过程的可移植性差:

由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

但目前项目,是确认绑定在SQL Server数据库中,不会轻易更改,可移植性不是考虑的重点。

适用范围

依据存储过程的优势,目前可以封装成存储过程的几个数据处理:

  • 订餐系统中的提交操作
    【遇到问题】之前在做这一功能时,就受限于提交多个表增、删、改的顺序以及完成状态,利用php多次判断数据操作的执行状态的方式不仅繁琐,而且进行到其中一步发生错误,还需要把前面的数据操作撤销,不影响该次订餐操作性质。
    【解决当时】封装为存储过程,利用数据库本身的逻辑控制,一次性提交执行一次订餐提交操作。

更多文章可以来我的个人博客里面看到

欢迎来访:绵绵小站

参考文章

时间: 2024-10-25 14:01:40

引用静态资源时加上时间戳,处理浏览器缓存问题的相关文章

利用 filter 机制 给 静态资源 url 加上时间戳,来防止js和css文件的缓存,利于开发调试

直接上代码: public class WeiXinFilter implements Filter{ private static Logger logger = LoggerFactory.getLogger(WeiXinFilter.class); public void init(FilterConfig fConfig) throws ServletException {} public void destroy() {} public void doFilter(ServletReq

Spring MVC 读取静态资源时404错误

背景:web.xml配置时拦截策略是拦截所有请求: <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-

Django 模板中引用静态资源(js,css等)

Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1.6/howto/static-files/ 大致步骤是这样的: 1.确保setting.py里的installed_apps中包括了django.contrib.staticfiles,没有的话大家给添上就行. 2.同样是在setting.py里面进行添加,我们需要添加静态资源相关的配置.可以这么写

shell备份文件时加上时间戳

1.在root目录下新建backup_date文件,写入echo _back_`date '+%Y%m%d%H%M%S'` [root@iZbp10er5cziaoscpe3x0hZ ~]# vi backup_date echo _back_`date '+%Y%m%d%H%M%S'` 2.编辑 .bashrc文件,添加一行 alias bak="/root/backup_date" 3.执行source .bashrc 使配置生效 [root@iZbp10er5cziaoscpe3

springboot整合thymeleaf——引用静态资源

原html src="/css/index.css" thymeleaf中,th:src="@{/css/index.css}" 原文地址:https://www.cnblogs.com/fangwr/p/11939243.html

使用时间戳解决浏览器缓存问题

在IE或者其他的很多浏览器中,如果你每次请求的地址是相同的,浏览器就不会去连接服务器而是去读取缓存,这样对于很多应用来时是非常好的,可以降低服务器的压力或者减少带宽的使用,但是对于ajax应用,很多都是必须保持时时的连接与服务器进行交互,所以需要使用一个小技巧,时间戳来使每次的请求地址都不同,从而跳过浏览器的缓存 机制实现每次的请求服务器,这样的功能在图片验证码的时候也是比较常用的一种方法. 时间戳参数是不会被后台程序接受的,只是为了保证是新的URl避免浏览器读缓存

互联网企业静态资源的部署,如何充分利用浏览器缓存机制

浏览器获取静态资源方式:缓存.版本 从html文件中解析出静态资源的url,查看本地缓存是否存在.是否过期,是否需要重新获取.根据url全路径匹配查找是否存在,根据header的字段expire/cache-control等判断是否过期. 所谓版本信息,不过是静态资源url的一部分信息,通过修改服务器html里静态资源的版本信息,达到修改静态资源url路径的目的,从而实现客户端浏览器重新下载静态资源的目的. 版本示例:http://xx.x.x.x:8083/static/dll/vendor1

Spring MVC静态资源处理(转)

优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do . *.xhtml等方式.这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST风格的URL. 如果将DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当

idea中JSP页面不能访问静态资源(图片,js,css)

必须配置SpringMvc对访问静态资源的支持,idea默认就是在main/webapp 下的文件路径,要在web-info同级的resource文件下放置,JSP中 ${pageContext.request.contextPath}的添加 <mvc:default-servlet-handler/>的作用 优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的