精华内容
下载资源
问答
  •  linux提供的web服务,能在网页展示中文,下载pdf出现中文无法读取!,甚是迷瞪,经分析展示是本地浏览器的解析,下载pdf是服务器端的响应,因此要在服务端安装对应的字体库就可以解决此问题! 问题解决:#  ...

    目录

     

    一、问题描述:

    二、问题解决:

    2.1 linux安装中文字体

    2.2 下载字体

    三、新增字体命令

    3.2 拷贝字体到指定目录

    3.3 验证字体安装情况

    四、常用字体名称中文对应英文


    一、问题描述:

      linux提供的web服务,能在网页展示中文,下载pdf出现中文无法读取!,甚是迷瞪,经分析展示是本地浏览器的解析,下载pdf是服务器端的响应,因此要在服务端安装对应的字体库就可以解决此问题!

    二、问题解决:

    Linux安装对应的中文字体库!

    2.1 linux安装中文字体

    Windows下的ttf/ttc字体是可以在linux上使用,确定网页端使用的字体类型,必须对的上!

    2.2 下载字体

    simsun.ttc //宋体常规

    链接: https://pan.baidu.com/s/1_rQ1jqdtKeoR6u1YazbZwA 提取码: 5f2t 

    宋体常规下载:download

    C:\Windows\Fonts        //Window字体目录打包 传输到linux  /usr/share/fonts/  

    三、新增字体命令

    3.1 linux字体管理器

    yum install -y fontconfig mkfontscale

    查看对应rpm的安装文件

    rpm -ql fontconfig
    rpm -ql mkfontscale
    
    /etc/fonts/fonts.conf
    /etc/fonts/fonts.dtd
    /usr/bin/fc-cache
    /usr/bin/fc-cat
    /usr/bin/fc-list
    /usr/bin/fc-match
    /usr/bin/fc-query
    /usr/bin/fc-scan
    
    fc-list //查看已经安装的字体

    3.2 拷贝字体到指定目录

    cp simsun.ttc  /usr/share/fonts/
    mkfontscale       //字体扩展
    mkfontdir           //新增字体目录
    fc-cache -fv      //刷新缓存

    3.3 验证字体安装情况

    [root@VM]# fc-list :lang=zh
    /usr/share/fonts/simsun.ttc: SimSun,宋体:style=Regular,常规
    /usr/share/fonts/simsun.ttc: NSimSun,新宋体:style=Regular,常规

    fc-list    //"宋体"中文字体已经安装成功

    [root@VM/]# fc-list
    /usr/share/fonts/dejavu/DejaVuSansCondensed-Oblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
    /usr/share/fonts/dejavu/DejaVuSansCondensed-Bold.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
    /usr/share/fonts/simsun.ttc: SimSun,宋体:style=Regular,常规
    /usr/share/X11/fonts/Type1/c0611bt_.pfb: Courier 10 Pitch:style=Bold Italic
    /usr/share/X11/fonts/Type1/UTBI____.pfa: Utopia:style=Bold Italic
    /usr/share/X11/fonts/Type1/c0419bt_.pfb: Courier 10 Pitch:style=Regular
    /usr/share/fonts/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
    /usr/share/X11/fonts/Type1/c0648bt_.pfb: Bitstream Charter:style=Regular
    /usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
    /usr/share/X11/fonts/Type1/cursor.pfa: Cursor:style=Regular
    /usr/share/X11/fonts/Type1/UTB_____.pfa: Utopia:style=Bold
    /usr/share/X11/fonts/Type1/c0583bt_.pfb: Courier 10 Pitch:style=Bold
    /usr/share/X11/fonts/Type1/UTI_____.pfa: Utopia:style=Italic
    /usr/share/X11/fonts/Type1/c0582bt_.pfb: Courier 10 Pitch:style=Italic
    /usr/share/fonts/dejavu/DejaVuSansCondensed.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
    /usr/share/fonts/dejavu/DejaVuSans-ExtraLight.ttf: DejaVu Sans,DejaVu Sans Light:style=ExtraLight
    /usr/share/fonts/dejavu/DejaVuSansCondensed-BoldOblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
    /usr/share/X11/fonts/Type1/c0633bt_.pfb: Bitstream Charter:style=Bold Italic
    /usr/share/X11/fonts/Type1/c0649bt_.pfb: Bitstream Charter:style=Italic
    /usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf: DejaVu Sans:style=Oblique
    /usr/share/X11/fonts/Type1/c0632bt_.pfb: Bitstream Charter:style=Bold
    /usr/share/fonts/simsun.ttc: NSimSun,新宋体:style=Regular,常规
    /usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf: DejaVu Sans:style=Bold Oblique
    /usr/share/X11/fonts/Type1/UTRG____.pfa: Utopia:style=Regular
    [root@VM/]# 
    
    

    四、常用字体名称中文对应英文

    宋体 SimSun
    黑体 SimHei
    微软雅黑 Microsoft YaHei
    微软正黑体 Microsoft JhengHei
    新宋体 NSimSun
    新细明体 PMingLiU
    细明体 MingLiU
    标楷体 DFKai-SB
    仿宋 FangSong
    楷体 KaiTi
    仿宋_GB2312 FangSong_GB2312
    楷体_GB2312 KaiTi_GB2312


    宋体:SimSuncss中中文字体(font-family)的英文名称
    Mac OS的一些:
    华文细黑:STHeiti Light [STXihei]
    华文黑体:STHeiti
    华文楷体:STKaiti
    华文宋体:STSong
    华文仿宋:STFangsong
    儷黑 Pro:LiHei Pro Medium
    儷宋 Pro:LiSong Pro Light
    標楷體:BiauKai
    蘋果儷中黑:Apple LiGothic Medium
    蘋果儷細宋:Apple LiSung Light
    Windows的一些:
    新細明體:PMingLiU
    細明體:MingLiU
    標楷體:DFKai-SB
    黑体:SimHei
    新宋体:NSimSun
    仿宋:FangSong
    楷体:KaiTi
    仿宋_GB2312:FangSong_GB2312
    楷体_GB2312:KaiTi_GB2312
    微軟正黑體:Microsoft JhengHei
    微软雅黑体:Microsoft YaHei
    装Office会生出来的一些:
    隶书:LiSu
    幼圆:YouYuan
    华文细黑:STXihei
    华文楷体:STKaiti
    华文宋体:STSong
    华文中宋:STZhongsong
    华文仿宋:STFangsong
    方正舒体:FZShuTi
    方正姚体:FZYaoti
    华文彩云:STCaiyun
    华文琥珀:STHupo
    华文隶书:STLiti
    华文行楷:STXingkai
    华文新魏:STXinwei
    Windows 中的中文字体。
    在默认情况下,也就是未自行安装新字体或者 Office 等文字处理软件的情况下,Windows 默认提供下列字体:
    Windows 95/98/98SE 宋体、黑体、楷体_GB2312、仿宋_GB2312
    Windows XP/2000/2003/ME/NT 宋体/新宋体、黑体、楷体_GB2312、仿宋_GB2312 (Windows XP SP3 宋体-PUA)
    Windows Vista/7/2008 宋体/新宋体、黑体、楷体、仿宋、微软雅黑、SimSun-ExtB
    那么每种字体能显示那些汉字呢?
    Vista 之前的 Windows 中宋体/新宋体、黑体支持 GBK 1.0 字符集,
    楷体_GB2312、仿宋_GB2312 支持 GB2312-80 字符集。
    (注:Windows 3.X 只能支持 GB2312-80 字符集)
    Vista 及之后的 Windows 中宋体/新宋体、黑体、楷体、仿宋、微软雅黑支持 GB18030-2000 字符集,
    SimSun-ExtB 只支持 GB18030-2005 字符集扩展 B 部分。
    下面对字符集进行简单的介绍:
    GB2312-80 < GBK 1.0 < GB18030-2000 < GB18030-2005
    GB2312-80 中的字符数量最少,GB18030-2005 字符数量最多。
    GB2312-80 是最早的版本,字符数比较少;
    GBK 1.0 中的汉字大致与 Unicode 1.1 中的汉字数量相同;
    GB18030-2000 中的汉字大致与 Unicode 3.0 中的汉字数量相同,主要增加了扩展 A 部分;
    GB18030-2005 中的汉字大致与 Unicode 4.1 中的汉字数量相同,主要增加了扩展 B 部分;
    由于 Unicode 5.2 的发布,估计 GB18030 会在近期发布新版本,增加扩展 C 部分。
    需要说明的是在 GB18030 中扩展 B 部分并不是强制标准。
    如果想查看 GB18030 的标准文本,请访问 http://www.gb168.cn 中的强标阅读。
    如果想了解 Unicode 的内容,请访问 http://www.unicode.org。
    现在纠正网上普遍的一个错误:
    GB18030-2000 和 GB18030-2005 都不支持单字节的欧元符号
    与简体中文有关的代吗页如下:
    936 gb2312 简体中文(GB2312)————其实是GBK
    10008 x-mac-chinesesimp 简体中文(Mac)
    20936 x-cp20936 简体中文(GB2312-80)
    50227 x-cp50227 简体中文(ISO-2022)
    51936 EUC-CN 简体中文(EUC)
    52936 hz-gb-2312 简体中文(HZ)
    54936 GB18030 简体中文(GB18030)
    补充:
    使用楷体_GB2312、仿宋_GB2312后,在 Windows 7/Vista/2008 中可能不再显示为对应的字体。
    这是因为 Windows 7/Vista/2008 中有楷体、仿宋,默认情况下没有楷体_GB2312、仿宋_GB2312,字体名称相差“_GB2312”。

    展开全文
  • 课程关键字 ...显示网页服务器或档案系统内的文件,并让用户与...当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。 HTML超文本标记语言 hyper...

    课程关键字

    关键字 英文 解释
    浏览器 Browser 显示网页服务器或档案系统内的文件,并让用户与这些文件互动的软件
    Web前端 Web front end 通过正确的代码书写,实现网站能正确显示字体、图片、视频等
    缓存 cache 当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。
    HTML超文本标记语言 hypertext markup language 比普通纯文字的文本要强悍些,并可以进行标记
    成对 pairing 标签名有成对出现的
    自闭 self colsing 标签名也可一个括号结束
    姿势 posture 书写代码要有一定的规范
    缩进 indent 书写下一行内容是要较上一行缩进

    作业完成汇报

    1.编程题

    在这里插入图片描述
    在这里插入图片描述

    3.CS架构和BS架构的区别

    Client/Server是建立在局域网的基础上的。Browser/Server是建立在广域网的基础上的.。
      1.硬件环境不同:C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。B/S 建立在广域网之上的, 不必是专门的网络硬件环境。例如电话上网,,租用设备.,信息管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
      2.对安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强, 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。B/S 建立在广域网之上, 对安全的控制能力相对弱,面向是不可知的用户群。
      3.对程序架构不同:C/S 程序可以更加注重流程,,可以对权限多层次校验,,对系统运行速度可以较少考虑。B/S 对安全以及访问速度的多重的考虑,,建立在需要更加优化的基础之上,比C/S有更高的要求。 B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统.。SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟。
      4.软件重用不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 对的多重结构,要求构件相对独立的功能,能够相对较好的重用。
      5.系统维护不同:系统维护在是软件生存周期中,开销大。重要C/S 程序由于整体性,,必须整体考察, 处理出现的问题以及系统升级。升级难,可能是再做一个全新的系统。B/S程序由构件组成,方便构件个别的更换,实现系统的无缝升级,系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
      6.处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的,与操作系统平台关系最小。
      7.用户接口不同:C/S 多是建立的Window平台上,表现方法有限。对程序员普遍要求较高。B/S 建立在浏览器上,,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,减低开发成本。
      8.信息流不同:C/S 程序一般是典型的中央集权的机械式处理,交互性相对低。B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化,更象交易中心。

    今日学习总结

    1、代码书写的几种基本格式
    <标签名>文字</标签名> 成对
    <标签名/> 自闭
    <标签名 属性名=“属性值”/>
    2、代码书写不仅要正确也要有姿势,要适当的换行空格,要让人感到舒适
    3、以后的学习之路还很长,要好好听课,也要自己好好练习,不懂就问。

    展开全文
  • PHP和MySQL Web开发第4版

    热门讨论 2014-08-13 15:32:15
    15.8 安全的Web服务器 15.9 审计与日志记录 15.10 防火墙 15.11 备份数据 15.11.1 备份常规文件 15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题...
  • 15.8 安全的Web服务器 15.9 审计与日志记录 15.10 防火墙 15.11 备份数据 15.11.1 备份常规文件 15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题...
  • 6.1 Web服务器/应用服务器 6.2 Apache Web服务器的安装 6.3 PHP应用服务器的安装 6.4 AmfPHP的安装 6.5 MySQL的安装 6.6 MySQLQueryBrowser的安装 第7章. Flex/PHP交互基本技术实现 7.1 基本交互(单值交互...
  • 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...
  • 以至于服务器在等待动态资源压缩的时间会抵消掉高压缩率带来的好处,但它非常适合静态文件压缩,因为它的解压速度很快。 使用Zopfli压缩可以比Zlib的最大压缩提升3%至8%。 <h3>3.2 图片...
  • 书名:《Java Web开发实战1200例(第I卷)》(清华大学出版社.卢瀚.王春斌) PDF格式扫描版,全书分为6篇23章,共909页。2011年1月出版。 注:原书无书签。为了方便阅读,本人在上传前添加了完整的书签。 全书压缩打包...
  • 书名:《Java Web开发实战1200例(第I卷)》(清华大学出版社.卢瀚.王春斌) PDF格式扫描版,全书分为6篇23章,共909页。2011年1月出版。 注:原书无书签。为了方便阅读,本人在上传前添加了完整的书签。 全书压缩打包...
  • 书名:《Java Web开发实战1200例(第II卷)》(清华大学出版社.卢瀚.王春斌) PDF格式扫描版,全书分为7篇23章,共960页。2011年6月出版。 注:原书只有前20章818页,本人添加了剩余章节重新编辑成完整版本,为了方便...
  • 书名:《Java Web开发实战1200例(第II卷)》(清华大学出版社.卢瀚.王春斌) PDF格式扫描版,全书分为7篇23章,共960页。2011年6月出版。 注:原书只有前20章818页,本人添加了剩余章节重新编辑成完整版本,为了方便...
  • 书名:《Java Web开发实战1200例(第II卷)》(清华大学出版社.卢瀚.王春斌) PDF格式扫描版,全书分为7篇23章,共960页。2011年6月出版。 注:原书只有前20章818页,本人添加了剩余章节重新编辑成完整版本,为了方便...
  • 使用易于读取且标准的文件格式发送问题 精确地描述问题并言之有物 话不在多而在精 别动辄声称找到 Bug 低声下气不能代替你的功课 描述问题症状而非你的猜测 按发生时间先后列出问题症状 描述目标而不是过程 别要求...
  • Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。 然而最近在使用matplotlib默认情况会出现乱码问题,原则上matplotlib是支持中文的,只是在配置...
  • icepdf-core

    2014-04-27 02:46:43
    ICEpdf是一种开源,轻量级的pdf 引擎,用于展示/查看PDF文档,转换和抽取PDF文档的内容,还可以集成到Java桌面应用程序或Web服务器中使用。 ICEpdf的API采用100%纯Java编写,快速高效,使用简单。 ICEpdf的优势:与...
  • 背景描述解决方案war应用内嵌TomcatSpring boot扩展阅读apache和nginx配置背景描述使用tomcat配置cdn服务器时,css文件能正常加载,但是加载字体文件时出现了Access-Control-Allow-Origin错误:已拦截跨源请求:同源...

    背景描述

    使用tomcat配置cdn服务器时,css文件能正常加载,但是加载字体文件时出现了Access-Control-Allow-Origin错误:

    已拦截跨源请求:同源策略禁止读取位于 http://localhost:9999/font-awesome/fonts/fontawesome-webfont.woff2?v=4.5.0 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。(未知)
    downloadable font: download failed (font-family: "FontAwesome" style:normal weight:normal stretch:normal src index:1): bad URI or cross-site access not allowed source: http://localhost:9999/font-awesome/fonts/fontawesome-webfont.woff2?v=4.5.0

    原因是tomcat禁止了跨域请求。关于HTTP访问控制的详细信息可以查看:HTTP访问控制(CORS)

    解决方案

    war应用

    对于标准的war项目包,只需要增加一个filter就能取消Access-Control-Allow-Origin(以下简称CORS)的限制。

    首先新建filter类

    package com.itxc.filter;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class CORSFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
            httpResponse.addHeader("Access-Control-Allow-Origin", "*");
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        @Override
        public void destroy() {
    
        }
    }

    然后在web.xml中使用上述filter即可

    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>com.itxc.filter.CORSFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    参考:tomcat添加跨域访问功能-Access-Control-Allow-Origin:*

    内嵌Tomcat(Spring boot)

    对于Spring Boot开发的项目,原理一样,只需要为Spring MVC添加一个Filter即可。

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    import javax.servlet.Filter;
    
    @Configuration
    public class SpringMvcConfig {
    
        /**
         * 解决同源策略问题的filter
         * @return
         */
        @Bean
        public Filter corsFilter(){
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration config = new CorsConfiguration();
            config.addAllowedOrigin("*");
            config.addAllowedHeader("*");
            config.addAllowedMethod("OPTIONS");
            config.addAllowedMethod("HEAD");
            config.addAllowedMethod("GET");
            config.addAllowedMethod("PUT");
            config.addAllowedMethod("POST");
            config.addAllowedMethod("DELETE");
            config.addAllowedMethod("PATCH");
            source.registerCorsConfiguration("/**", config);
            return new CorsFilter(source);
        }
    }

    重启Application即可。

    扩展阅读:apache和nginx配置

    要达到同样的目标,ngnix下可以这样配置:

    server {
    ...
    # Fix @font-face cross-domain restriction in Firefox
    location ~* \.(ttf|ttc|otf|eot|woff|font.css)$ {
    add_header Access-Control-Allow-Origin "http://yoursite.com";  #或* 代表任何域
    #add_header Access-Control-Allow-Headers X-Requested-With;
    #add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    }
    ...
    }

    apache(http.conf文件)配置:

    <Directory "C:/htdocs">
        #Require all denied
        Header set Access-Control-Allow-Origin *
    </Directory>
    展开全文
  • 作 者: (英)奥代尔 著,张立浩 译 ...此外还将演示如何在服务器连接中断时继续运行web应用程序,如何使用ajax读取存储在二进制文件中的隐藏数据,以及如何确保javascript web应用程序中最高级别的可访问性。
  • 该项目在“ / api”文件夹中包含一些服务器端解决方案。 所有与前端相关的源文件都在“ / web”文件夹中。 安装 在使用项目工具之前,您需要安装NPM和NodeJS。 要安装依赖项,请运行: npm install --production /...
  •  技巧 1:将经常使用的数据缓存在 Web 服务器上 典型的 ASP 页从后端数据存储中检索数据,然后将结果转换成超文本标记语言 (HTML)。无论数据库的速度如何,从内存中检索数据总要比从后端数据存储中检索数据快得多。...

    改善ASP性能和外观的技巧集锦(上)
    [日期:2006-10-10] [字体:大 中 小]

      技巧 1:将经常使用的数据缓存在 Web 服务器上
    典型的 ASP 页从后端数据存储中检索数据,然后将结果转换成超文本标记语言 (HTML)。无论数据库的速度如何,从内存中检索数据总要比从后端数据存储中检索数据快得多。从本地硬盘读取数据通常也比从数据库中检索数据更快。因此,通常可以将数据缓存在 Web 服务器上(存储在内存或磁盘中),来提高性能。 缓存是传统的以空间换取时间的做法。如果您缓存的内容正确,那么您可以看到性能会有显著的提高。为使缓存有效,必须保存那些经常重复使用的数据,且要重新计算这些数据需要(适度)大的开销。如果缓存的都是些陈旧的数据,就会造成内存浪费。 不经常发生改变的数据是很好的缓存候选数据,因为您不必担心随着时间的迁移该数据与数据库同步的问题。组合框列表、引用表、DHTML 碎片、扩展标记语言 (XML) 字符串、菜单项和站点配置变量(包括数据源名称 (DSN)、Internet 协议 (IP) 地址和 Web 路径)都是很好的缓存候选内容。注意您可以缓存数据的“表示”,而不缓存数据本身。如果 ASP 页很少更改,且缓存的开销也很大(例如,整个产品目录),则应考虑事先产生 HTML,而不是在响应每个请求时重新显示。 应将数据缓存在哪里,有哪些缓存策略?通常,数据缓存在 Web 服务器的内存或磁盘中。

    技巧 2: 将经常使用的数据缓存在 Application 或 Session 对象中
    ASP Application 和 Session 对象为将数据缓存在内存中提供了方便的容器。您可以将数据指派到 Application 和 Session 对象中,这些数据在 HTTP 调用之间保留在内存中。Session 数据是按每个用户分别存储的,而Application 数据则在所有用户之间共享。 什么时候将数据装载到 Application 或 Session 中呢?通常,数据是在启动Application 或 Session 时装载。要在 Application 或 Session 启动过程中装载数据,应将适当的代码分别添加到Application_OnStart() 或 Session_OnStart() 中。这些函数应在 Global.asa 中,如果没有,则可以添加这些函数。还可以在第一次需要时装函数应在 Global.asa 中,如果没有,则可以添加这些函数。还可以在第一次需要时装载该数据。为此,在 ASP 页中添加一些代码(或编写一个可重复使用的脚本函数),以检查数据是否存在,如果不存在,就装载数据。这是一个传统的性能技术,称为“惰性计算” - 在您知道需要某一个值以前不计算该值。例如: 可以为所需要的每个数据块编写类似的函数。 应以什么格式存储数据?可以存储任何变体类型,因为所有脚本变量都是变体型。例如,您可以存储字符串、整数或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。要从 ADO 记录集获取数据,您可以手工将数据复制到 VBScript 变量,一次一个字段。使用一个 ADO 记录集持久函数 GetRows()、GetString() 或Save()(ADO 2.5),可加快速度且更容易一些。 在适当的条件下,可以将 ADO 记录集本身缓存在 Application 或 Session 作用域中。有两个警告:
    必须将 ADO 标记为自由线程
    必须使用断开连接的记录集。
    如果不能保证满足这两个要求,则不要缓存 ADO 记录集。在下面的“非敏捷组件”和“不要缓存连接”技巧中,我们将讨论将 COM 对象存储在 Application 或 Session 作用域中的危险性。 当您将数据存储在 Application 或 Session 作用域时,数据将保留在那里,直到您以编程方式改变它、Session 过期或 Web 应用程序重新启动为止。如果数据需要更新怎么办?要手工强制对 Application 数据进行更新,您可以访问只有管理员才可访问的 ASP 页来更新数据。或者,您可以通过函数定期自动刷新数据。下面例子存储带有缓存数据的时间戳,并隔一段时间后刷新数据。 Session[/b] 或 Application对象中缓存大的数组不是一个好的做法。在访问数组的任何元素之前,脚本语言的语法要求必须临时复制整个数组。数组能快速查寻和存储在内存中是邻近的关键数据对。索引一个词典比索引一个数组要慢得多。应针对您的实际情况,选择提供最佳性能的数据结构。
    技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上
    有时,数据可能太多,无法都缓存在内存中。“太多”只是一个说法,这要看您想消耗多少内存,以及需缓存的项目数和检索这些项目的频率。在任何情况下,如果数据太多多少内存,以及需缓存的项目数和检索这些项目的频率。在任何情况下,如果数据太多而无法都缓存在内存中,则考虑将数据以文本或 XML 文件缓存在 Web 服务器的硬盘上。可以同时将数据缓存在磁盘和内存中,为您的站点建立最适宜的缓存策略。 注意当测量单个 ASP 页的性能时,检索磁盘上的数据可能不一定要比从数据库检索数据更快。但缓存会降低数据库和网络上的负载。在高负载的情况下,这样做可大大改善总体吞吐量。当缓存开销很大的查询结果(如多表联接或复合存储过程)或大的结果集时,这是非常有效的。与往常一样,要测试一下几种方案的优劣。 ASP 和 COM 提供一些建立基于磁盘的缓存方案的工具。ADO 记录集 Save() 和 Open() 函数保存和装载磁盘中的记录集。可以使用这些方法重新编写上面 Application 数据缓存技巧中的代码示例,用文件的 Save() 代替写到Application 对象中的代码。 有一些其它组件可以用于文件:
    Scripting.FileSystemObject 可使您创建、读和写文件。
    与 Internet Explorer 一起提供的 Microsoft&reg; XML 解析器 (MSXML) 支持保存和装载 XML 文档。
    LookupTable 对象(例如,用在 MSN 上)是从磁盘装载简单列表的最好选择。最后,应考虑将数据的表示缓存在磁盘上,而不是数据本身。预先转换的 HTML 可以用.htm 或 .asp 文件存储在磁盘上,超级链接可以直接指向这些文件。可以使用商用工具,如 XBuilder,或 Microsoft&reg; SQL Server&#8482; Internet 发布功能将产生HTML 的过程自动化。或者,您可以将 HTML 代码片断放在 .asp 文件中。还可以使用FileSystemObject 从磁盘读取 HTML 文件,或使用 XML 尽早转换。
    技巧 4:避免将非敏捷的组件缓存在 Application 或 Session 对象中
    尽管将数据缓存在 Application 或 Session 对象中是一个好的做法,但缓存 COM 对象却有严重的陷阱。通常,人们倾向于将经常使用的 COM 对象缓存到 Application 或 Session 对象中。很遗憾,许多 COM 对象(包括所有以 Visual Basic 6.0 或更低版本ession 对象中。很遗憾,许多 COM 对象(包括所有以 Visual Basic 6.0 或更低版本编写的对象)当存储在 Application 或 Session 对象时,会引起严重的瓶颈。 具体来讲,当任何不敏捷的组件缓存在 Session 或 Application 对象时,将引起性能瓶颈。敏捷的组件是被标记为 ThreadingModel=Both 的组件,它聚集 Free-threaded marshaler (FTM);或被标记为ThreadingModel=Neutral 的组件。(Neutral 模型是 Windows&reg; 2000 和 COM+ 的新增模型。) 下列组件不是敏捷的:
    自由线程的组件(除非它们聚集 FTM)。
    单元线程组件。
    单线程组件。
    配置的组件(Microsoft Transaction Server (MTS)/COM+ 库和服务器程序包/应用程序)不是敏捷的,除非它们是 Neutral 线程。单元线程组件和其它非敏捷的组件在页作用域内是最适合的(即,它们在单个 ASP 页上创建和销毁)。 在 IIS 4.0 中,被标记为ThreadingModel=Both 的组件被认为是敏捷的。在 IIS 5.0 中,只有这一点还不够。组件必须不仅被标记 Both,还必须聚集 FTM。有关敏捷性的文章讲述了如何使以 Active Template Library 编写的 C++ 组件聚集 FTM。要注意如果组件缓存界面指针,那么那些指针本身必须是敏捷的,或必须存储在 COM 共用界面表 (GIT) 中。如果您不能重新编译 Both 线程组件以聚集 FTM,那么您可以将组件标记为 ThreadingModel=Neutral。或者,如果您不想让 IIS 执行敏捷性检查(因此,您可以允许非敏捷的组件存储在Application 或 Session 作用域中),您可以在配置数据库中将 AspTrackThreading Model 设置为 True。不建议更改 AspTrackThreadingModel。 如果您想将以Server.CreateObject 创建的非敏捷的组件存储在 Application 对象中,IIS 5.0 将出现一个错误。您可以在Global.asa 中使用 避免这一错误,但不建议这样做,因为这会导致汇集和串行化,关于这一点将在下面讲述。 如果您缓存非敏捷的组件会出现什么毛病?缓集和串行化,关于这一点将在下面讲述。 如果您缓存非敏捷的组件会出现什么毛病?缓
    存在 Session 对象中的非敏捷的组件将 Session 锁定于 ASP 工作者线程。ASP 维护一个工作者线程池来处理请求。通常情况下,一个新请求总是由第一个可用的工作者线程来处理。如果 Session 被锁定于一个线程,那么请求必须等到其相关的线程可用为止。
    将非敏捷的组件存储在Application 作用域对性能的影响甚至更坏。ASP 必须创建一个特殊的线程运行存储在
    Application 作用域中的非敏捷组件。这会有两个结果:所有调用都必须汇集到此线程,且所有调用都排成长队。“汇集”的意思是参数必须存储在内存的共享区域;执行一个开销很大的到特殊线程的上下文切换;执行组件的方法;将结果汇集到共享区域;执行另一个开销很大的上下文切换,将控制返回到原始的线程。“串行化”意思是指每次只运行一个方法。两个不同的 ASP 工作者线程不能同时在共享组件上执行多个方法。这样就杜绝了并发性,特别是在多处理器计算机上。更糟的是,所有非敏捷的 Application 作用域的组件共享一个线程(主机 STA),因此串行化的影响甚至更显著。 如之奈何?下面是一些一般的规则。如果您使用 Visual Basic (6.0) 或更早版本编写对象,那么不要将它们缓存在 Application 或 Session 对象中。如果您不知道对象的线程模型,不要缓存它。不要缓存非敏捷的对象,而应在每个页面创建和释放它们。对象直接在 ASP 工作者线程上运行,因此没有汇集或串行化。如果 COM 对象在 IIS 服务器上运行,且如果它们不花长时间初始化和删除,性能尚可。注意单线程对象不应该这样使用。小心 - VB 可创建单线程对象!如果您必须这样使用单线程对象(如 Microsoft Excel 电子表格),别指望会有很高的吞吐量。当 ADO 被标记为自由线程,ADO 记录集可以安全地缓存。要将 ADO 标记为自由线程,使用 Makfre15.bat 文件,该文件通常位于以安全地缓存。要将 ADO 标记为自由线程,使用 Makfre15.bat 文件,该文件通常位于目录 //Program Files/Common/System/ADO 中。
    警告 如果您使用 Microsoft Access作为数据库,不应将 ADO 标记为自由线程的。ADO 记录集也必须切断连接。一般来说,如果您不能控制站点中的 ADO 配置,最好不要缓存记录集。 词典组件也是敏捷的对象。LookupTable 从数据文件中装载其数据,可用于组合框数据和配置信息。Duwa mish Books 中的 PageCache 对象可提供词典语法,Caprock Dictionary 也可提供。这些对象或其派生对象可以构成有效缓存策略的基础。注意 Scripting.Dictionary 对象不是敏捷的,不应该存储在 Application 或 Session 作用域中。
    技巧 5:不要将数据库连接缓存在 Application 或 Session 对象中
    缓存 ADO 连接通常是很糟糕的策略。如果一个 Connection 对象存储在 Application对象中,并在所有的页面中使用,那么所有页面将争抢这一连接。如果 Connection 对象存储在 ASP Session 对象中,那么将为每个用户创建数据库连接。这就会使连接池的优势荡然无存,并给 Web 服务器和数据库带来不必要的压力。 可以不缓存数据库连接,而是在使用 ADO 的每个 ASP 页面中创建和删除 ADO 对象。这是很有效的,因为 IIS 内嵌了数据库连接池。更准确地说,IIS 自动启用 OLEDB 和 ODBC 连接池。这就能确保在每个页面上创建和删除连接将是有效的。 因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在 Application 或 Session 对象中。但是,您可以安全地缓存断开连接的记录集,它们不保存到其数据连接的引用。
    技巧 6:合理地使用 Session 对象
    一秒钟要求几百页面或成千上万用户同时访问的站点,这个技巧对于必须水平扩展的站点 (即那些利用多台服务器以处理负载或实现容错的站点) 甚至更重要。对于较小的站点,诸如 Intranet 站点,要想实现 Session 带来的方便,必然增大系统开销。 简言之,ASP 自动为每个访问 Web 服务器的用户创建一个 Session。每个 Session 大约需要 10 KB 的内存开销(最主要的是数据存储在 Session 中),这就使所有的请求都减慢。在配置的超时时段(通常是 20 分钟)结束以前,Session 一直保留有效。 Session 的最大的问题不是性能,而是可扩展性。Session 不能跨越几台 Web 服务器,一旦在一台服务器上创建 Session,其数据就留在那儿。这就意味着如果您在一个 Web 服务器群使用 Session,您必须设计一个策略,将每个用户请求始终发到用户 Session 所在的那台服务器上。这被称为将用户“粘”在 Web 服务器上。如果 Web 服务器崩溃,被“粘住的”用户将丢失他们的会话状态,因为会话不是粘到磁盘上。 实现粘性会话的策略包括硬件和软件解决方案。诸如 Windows 2000 Advanced Server 中的网络负载平衡和 Cisco 的 Local Director 之类的解决方案都可以实现粘性会话,代价是要损失一定程度的可扩展性。这些解决方案是不完善的。不建议此时部署您自己的软件解决方案(我们过去常常使用ISAPI 筛选器和 URL 转换等等)。 Application 对象也不跨越多台服务器,如果您必须跨越 Web 服务器群共享和更新 Application 数据,您必须使用后端数据库。但是,只读 Application 数据在 Web 服务器群中仍是有用的。 如果只是因为要增加运行时间只读 Application 数据在 Web 服务器群中仍是有用的。 如果只是因为要增加运行时间(处理故障转移和服务器维护),大多数关键任务站点至少需部署两台 Web 服务器。因此,在设计关键任务应用程序时,必须实现“粘性会话”,或干脆避免使用 Session,以及任何其它将用户状态存储在单个 Web 服务器上的状态管理技术。 如果您不使用 Session,一定要将它们关闭。您可以通过 Internet Services Manager,为应用程序执行此操作。如果您决定使用 Session,您可以采用一些方法减轻它们对性能的影响。 您可以将不需要 Session 的内容(如帮助屏幕,访问者区域等等)移到另一个关闭了 Session 的 ASP 应用程序中。您可以逐页提示 ASP,您不再需要该页面上的 Session 对象,使用以下放在 ASP 页面最上面的指令: 使用这一指令有一个很好的理由是,这些 Session 在框架集方面存在一个有意思的问题。ASP 保证任何时候Session 只有一个请求执行。这样就确保如果浏览器为一个用户请求多个页面,一次只有一个 ASP 请求接触 Session,这样就避免了当访问 Session 对象时发生的多线程问题。很遗憾,一个框架集中的所有页面将以串行方式显示,一个接一个,而不是同时显示。用户可能必须等候很长时间,才能看到所有的框架。该故事的寓意:如果某些框架集页面不依靠 Session,一定要使用 EnableSessionState=False 指令告诉 ASP。
    有许多管理 Session 状态的方法,可替代 Session 对象的使用。对于少量的状态(少于4 KB),我们通常建议使用 Cookies、QueryString 变量和隐式变量。
    技巧 7: 将代码封装在 COM 对象中
    如果您有许多 VBScript 或 JScript,您可以经常将代码移到编译的 COM 对象中,从而可改善性能。编译的代码通常比解释的代码运行得更快。编译的 COM 对象可以通过“早绑定”访问其它 COM 对象,与脚本使用的“晚绑定”相比,“早绑定”是调用 COM 对象的更有效方法。将代码封装在 COM 对象中还有一些优点(除性能之外):
    COM 对象有利于将表示逻辑与业务逻辑分开。
    COM 对象可以保证代码重复使用。
    许多开发人员发现以 VB、C++ 或 Visual J++ 编写的代码比 ASP 更容易调试。
    COM 对象也有缺点,包括初始开发时间和需要不同的程序设计技巧。注意封装少量的 ASP 可能引起性能下降,而不会得到性能改进。这种情况通常在少量的 ASP 代码被封装进 COM 对象时发生。在这种情况下,创建和调用 COM 对象的系统开销超过了编译的代码的优点。应反复地试验,以确定什么样的 ASP 脚本和 COM 对象代码的组合产生最好的性能。注意,与 Microsoft Windows NT&reg; 4.0/IIS 4.0 相比,Windows 2000/IIS 5.0 中在脚本和 ADO 性能方面有了很大的改进。因此,随着 IIS 5.0 的推出,编译代码比 ASP 代码的性能优势有所降低。如果您部署 COM 组件,以负荷对它们进行测试特别重要。事实上,理所当然应对所有的 ASP 应用程序进行负荷测试。
    技巧 8:迟一点获得资源,早一点释放资源
    这里是一个小技巧供您参考。一般来说,最好迟一点获得资源,早一点释放资源。这适用于 COM 对象以及文件句柄和其它资源。这种优化方法主要用于 ADO 连接和记录集。当您使用完记录集,比方说在显示一个表及其数据之后,应立即释放它,而不是等到页面结束时再释放。将 VBScript 变量设置为Nothing 是最好的做法。不要让记录集超出作用域之外。而且,要释放任何相关的 Command 或 Connection 对象(在将记录集或连接设置为 = Nothing 之前,不要忘记调用Close())。这会缩短数据库必须为您准备资源的时间,并尽快释放数据库到连接池的连接。

    技巧 9:进程外执行过程以性能换取可靠性
    ASP 和 MTS/COM+ 两者都有配置选项,可使您兼顾可靠性和性能。当建立和部署应用程序时,应知道如何兼顾两者的性能。ASP 选项可以配置 ASP 应用程序,以便以三种方法之一运行。在 IIS 5.0 中,引入了“隔离级”这一术语以说明这些选项。这三个隔离级分别是低级、中级和高级:
    低级隔离:这在 IIS 的所有版本中都得到支持,且是最快的。它在 Inetinfo.exe 中运行 ASP,Inetinfo.exe 是主要 IIS 进程。如果 ASP 应用程序崩溃,IIS 也会崩溃。(要在 IIS 4.0 下重新启动 IIS,Web 站点管理员应使用诸如 InetMon 之类的工具监视站点,如果服务器发生故障,应启用批处理文件以重新启动服务器。IIS 5.0 引入了可靠的重新启动,该方法可使发生故障的服务器自动重新启动。)
    中级隔离:IIS 5.0 引入了这个新的级别,它被称为进程外级别,因为 ASP 在 IIS 进程之外运行。在中级隔离中,被配置作为中级隔离运行的所有 ASP 应用程序都共享一个进程空间。这就减少了在一台服务器运行多个进程外 ASP 应用程序所需要的进程数量。中级隔离是 IIS 5.0 中的默认隔离级别。
    高级隔离:在 IIS 4.0 和 IIS 5.0 中支持这一级别,高级隔离也是进程外的。如果 ASP 崩溃,Web 服务器并不会崩溃。下次 ASP 请求时,ASP 应用程序就会自动重新启动。在高级隔离中,配置作为高级隔离运行的每个 ASP 应用程序都在其自有进程空间中运行。这样做可保护 ASP 应用程序彼此之间不相互干扰。其缺点是它要求每个 ASP 应用程序都要有一个单独的进程。当在一台服务器上必须运行许多应用程序时,系统开销就会大大增加。
    哪个选项最好的呢?在 IIS 4.0 中,进程外运行将显著降低性能。在 IIS 5.0 中,做了许多改进,将进程外运行 ASP 应用程序所产生的开销降到最低限度。事实上,在绝大多数测试中,IIS 5.0 中的 ASP 进程外应用程序比 IIS 4.0 中的进程内应用程序运行得更快。不管怎样,在两个平台上,进程内(低隔离级)性能最佳。但是,如果访问率相对较低或最大吞吐量较低,低隔离级的优势不太明显。因此,在您每一 Web 服务器每秒钟需要数百或成千上万页面时,才会觉得有必要设置低隔离级。与往常一样,应对多种配置进行测试,确定您要采取哪一种折衷方案。
    注意 当您运行 ASP 进程外应用程序时(中级或高级隔离),它们在 NT4 中的 MTS 和在 Windows 2000 中的 COM+ 中运行。即,在 NT4 中它们在 Mtx.exe 中运行;而在 Windows 2000 中,它们在 DllHost.exe 中运行。您可以在任务管理器中看到这些进程在运行。您还可以看到 IIS 如何为进程外 ASP 应用程序配置 MTS 程序包或 COM+ 应用程运行。您还可以看到 IIS 如何为进程外 ASP 应用程序配置 MTS 程序包或 COM+ 应用程序。
    COM 选项
    COM 组件也有三种配置选项,虽然与 ASP 选项不完全类似。COM 组件可以是“未配置的”、配置为库应用程序或配置为服务器应用程序。“未配置的”意思是指组件没有注册COM+。组件将在调用程序的进程空间运行,那就是说,它们是“进程内的”。库应用程序也是进程内的,但使用 COM+ 的服务,包括安全、事务和上下文支持。服务器应用程序被配置为在它们自有的进程空间内运行。
    您可以看到未配置的组件比库应用程序略有一些优势。库应用程序比服务器应用程序的性能优点更大。这是因为库应用程序与 ASP 在同一进程内运行,而服务器应用程序在它们的自有进程内运行。进程间的调用比进程内调用开销更大。而且,当在进程之间传递诸如记录集之类的数据时,必须在两个进程之间复制所有的数据。
    陷阱!当使用 COM 服务器应用程序时,如果您在 ASP 和 COM 之间传递对象,要确保对象执行“按值汇集”或 MBV。执行 MBV 的对象将它们自己从一个进程复制到另一个进程。这比下面一种方法好,采用这种方法时,对象仍在创建者的进程中,另外一个进程反复地调用创建进程以使用该对象。切断连接的 ADO 记录集将“按值汇集”,连接的记录集则不然。Scripting.Dictionary 不执行 MBV,且不在进程之间传递。
    最后,VB 程序员请注意:MBV 不通过传递参数 ByVal 获得。MBV 由原始的组件作者执行。怎么办?
    如果让我们建议一个兼顾性能与可靠性的合理配置,它们应是如下的配置:
    在 IIS 4.0 中,使用 ASP 低隔离级别,使用 MTS 服务器程序包。
    在 IIS 5.0 上,使用 ASP 的中隔离级,并使用 COM+ 库应用程序。
    这些是非常一般的原则,主机服务公司一般情况下以中或高隔离级运行 ASP,而单用途的 Web 服务器可以以低隔离级运行。衡量各种利弊,并自己决定哪个配置更能符合您的需要。
    技巧 10:使用显式选项
    在 .asp 文件中应使用 Option Explicit。此指令放在 .asp 文件的最上面,它强制开发人员声明要使用到的所有变量。许多程序员认为这种方法对于调试应用程序很有帮助,因为这种方法避免了键错变量名和误建新变量的可能性(例如,将 MyXMLString=) 错写成 MyXLMString=...。
    更重要的一点也许是,声明的变量比未声明的变量速度更快。由此,脚本在运行时每次用到未声明的变量时,按名称引用它。另一方面,声明的变量是有顺序的,要么以编译时间,要么以运行时间。以后,声明的变量都按此顺序引用。因为 Option Explicit 强制变量声明,它能确保声明所有变量,因此访问的速度也很快。
    技巧 11:在子例程和函数中使用局部变量
    局部变量是那些在子例程和函数内声明的变量。在函数或子例程内,局部变量访问比全局变量访问更快。局部变量的使用也会使代码更清晰,因此应尽量使用局部变量。
    技巧 12:将经常使用的数据复制到脚本变量中
    当访问 ASP 中的 COM 对象时,应将经常使用的对象数据复制到脚本变量中。这样做可减少 COM 方法调用,因为 COM 方法调用与访问脚本变量相比,开销相对较大。当访问Collection 和 Dictionary 对象时,这种技术也会减少开销很大的查找。
    一般来说,如果您打算不止一次访问对象数据,那么就应将数据放到脚本变量中。这种优化的主要目标是 Request 变量(Form 和 QueryString 变量)。例如,您的站点可传递一个名为 UserID 的 QueryString 变量。假设此 UserID 在特定页面上被引用 12 次。可以无须调用 Request(?UserID?) 12 次,而是在 ASP 页面最上面将 UserID 指派到。可以无须调用 Request(?UserID?) 12 次,而是在 ASP 页面最上面将 UserID 指派到一个变量。然后在该页面自始至终使用该变量。这样就省去了 11 次 COM 方法调用。实际上,访问 COM 属性或方法的开销并没有那么大。
    技巧 13:避免重新确定数组的维数
    应尽量避免 Redim 数组。就性能而言,如果计算机的物理内存大小有限,最好将数组的初始维数设置为其最不利的情况 - 或将维数设置为其最佳的情况,然后再按需要重新确定维数。这并非意味着,如果知道您不需要内存时,就随便分配几兆字节的内存。
    下面的代码给您显示使用 Dim 和 Redim 不当的情形。
    <%
    Dim MyArray()
    Redim MyArray(2)
    MyArray(0) = ?hello?
    MyArray(1) = ?good-bye?
    MyArray(2) = ?farewell?
    ...
    ' some other code where you end up needing more space happens, then ...
    Redim Preserve MyArray(5)
    MyArray(3) = ?more stuff?
    MyArray(4) = ?even more stuff?
    MyArray(5) = ?yet more stuff?
    MyArray(5) = ?yet more stuff?
    %>
    最好一开始就将数组的初始大小 Dim 正确(在本例中,是 5)比 Redim 数组使其更大好得多。您可能浪费一些内存(如果您没有使用所有的元素),但获得的好处是速度变得更快。
    技巧 14:使用响应缓冲
    您可以通过启用“响应缓冲”,将要输出的一整页缓冲起来。这样就将写到浏览器的量减到最少,从而改善总体性能。每个写操作都会产生很大的系统开销(在 IIS 中以及在通过网络发送的数据量方面),因此写操作越少越好。由于其启动慢且使用 Nagling 算法(用来减轻网络塞车情况),TCP/IP 在发送一些大的数据块时比必须发送许多小的数据块时的效率高得多。
    有两个方法启用响应缓冲。
    第一种,您可以使用 Internet Services Manager 为整个应用程序启用响应缓冲。我们建议采用这种方法,在 IIS 4.0 和 IIS 5.0 中默认为新的ASP 应用程序启用响应缓冲。
    第二种,可以在每个 ASP 页面的接近顶端的地方加入下面的代码行,从而启用响应缓冲:
    <% Response.Buffer = True %>
    此代码行必须在任何响应数据被写到浏览器之前执行(即,在任何 HTML 出现在 ASP 脚本之前以及在使用 Response.Cookies 集合设置任何 Cookies 之前)。一般来说,最好为整个应用程序启用响应缓冲。这样,您就不必在每个页面最上面写入上述的代码行。
    Response.Flush
    关于响应缓冲有一个常见的抱怨,就是用户感觉到 ASP 页面的响应速度很慢(即使整个响应时间得到改进),因为他们必须等到整个页面生成,然后他们才能看到东西。对于响应时间得到改进),因为他们必须等到整个页面生成,然后他们才能看到东西。对于运行时间长的页面,您可以设置 Response.Buffer = False,禁用响应缓冲。但是,一个更好的策略是利用 Response.Flush 方法。这种方法将 ASP 转换的所有 HTML 送到浏览器。例如,在转换 1,000 行的表的前 100 行之后,ASP 可以调用 Response.Flush,强制将转换的结果送到浏览器,这样可使用户在其余的行准备好之前看到头 100 行。这种技术可以将响应缓冲与浏览器逐渐显示数据完美地结合在一起。(注意在上面的 1,000 行表的举例中,许多浏览器在它们看到关闭 </table>标记之前不会开始显示表。检查您的目标浏览器是否支持。为避免这种情况,将表分成多个具有较少行的表,并在每个表之后调用 Response.Flush。较新版本的 Internet Explorer在表完全下载之前就开始显示表,如果您指定表列宽,显示速度就会特别快,这样做可避免强制 Internet Explorer 通过测量每个单元格的内容宽度来计算列宽。)另一个关于响应缓冲的常见的抱怨是,当产生非常大的页面时,将占用许多服务器内存。撇开产生大页面的方法不谈,这种问题也可通过巧妙使用 Response.Flush 来加以解决。
    技巧 15:批处理内嵌脚本和 Response.Write 语句
    VBScript 语法 <% = expression %>将“expression”的值写到 ASP 输出流中。如果响应缓冲未启用,那么执行其中的每一条语句,都会以许多小的数据包通过网络将数据写到浏览器中。这样速度很慢。而且穿插执行少量的脚本和 HTML,将引起脚本引擎和HTML 之间的切换,从而降低性能。因此,使用下面的技巧:使用 Response.Write 调用代替捆绑紧密的内嵌表达式。当禁用响应缓冲时,这一技巧的效果特别大。最好启用响应缓冲,然后看批处理 Response.Write 是否有助于提高性能。
    技巧 16:如果页面需要很长时间才能完成,那么执行前使用 Response.IsClientConnected
    如果用户性急,他们可能会在您开始执行他们的请求之前,就会放弃 ASP 页面。如果他们单击刷新或移到服务器上的另一个页面,在 ASP 请求队列的末尾就有一个新的请求等候,在队列的中间有一个断开连接的请求。当服务器的负载很高时(因此请求队列就会很长,响应时间也会相应地变长),就会经常发生这种情况,这样只能使情况变得更糟。如果用户不再连接,执行 ASP 页面(特别是慢的、大的 ASP 页面)已没有任何意义
    。您可以使用 Response.IsClientConnected 属性检查这一情况。如果它返回 False,则应调用 Response.End 并放弃页的其余部分。事实上,IIS 5.0 已将这一做法编为程序 - 每当 ASP 即将执行新请求时,它就会检查请求在队列中已等候了多长时间。如果已经在那里等候了多于 3 秒钟,ASP 将检查客户机是否仍处于连接状态,如果没有连接已经在那里等候了多于 3 秒钟,ASP 将检查客户机是否仍处于连接状态,如果没有连接,就立即终止请求。您可以在配置数据库中使用 AspQueueConnectionTestTime 设置将超时时间由 3 秒调整为其它值。如果页面要花很长时间才能执行完,也可以不时地检查 Response.IsClientConnected。当启用了响应缓冲时,最好不时地执行 Response.Flush,以用户知道,正在发生什么事。
    注意 在 IIS 4.0 上,除非先执行了 Response.Write,否则 Response.IsClientConnected 就不能正常工作。如果启用了缓冲,您也必须执行 Response.Flush。在 IIS 5.0上,却没有必要这样做,- Response.IsClientConnected 工作正常。在任何情况下,Response.IsClientConnected 都会有一些开销,因此只有在一个操作至少要花(比方说) 500 毫秒(如果您想维持每秒钟数十页的吞吐量,这是一个很长的时间)才使用它。
    经验表明,不要每次重复执行紧密循环时都调用它,如显示表的许多行时 - 每隔二十或五十行调用一次可能比较合适。
    技巧 17:使用 <OBJECT>标记例示对象
    如果要引用不在所有代码路径(特别是服务器或应用程序作用域的对象)中使用的对象,使用 Global.asa 中 <object runat=server id=objname> 标记声明它们,而不使用Server.CreateObject 方法。Server.CreateObject 能立即创建对象。如果以后不再使用该对象,您就浪费了资源。<object id=objname> 标记声明 objname,但在其方法或属性第一次使用以前,不会创建 objname。这又是一个惰性计算的例子。
    技巧 18:对于 ADO 和其它组件使用 TypeLib 声明
    当使用 ADO 时,开发人员经常加入 adovbs.txt,以访问 ADO 的各种常量。在要使用常量的每个页面中必须包含此文件。此常量文件相当大,给每个 ASP 页面的编译时间和脚技巧 18:对于 ADO 和其它组件使用 TypeLib 声明本大小增加了许多系统开销。IIS 5.0 引入了绑定到组件类型库的功能。这可使您引用类型库一次,并将其用在每个ASP 页面上。每个页面不会产生编译常量文件的开销,且组件开发人员不必建立VBScript#_include 文件以在 ASP 上使用。要访问 ADO TypeLib,将下面一条语句放在 Global.asa 中。
    <!-- METADATA NAME=?Microsoft ActiveX Data Objects 2.5 Library?
    TYPE=?TypeLib? UUID=?{00000205-0000-0010-8000-00AA006D2EA4}? -->

    <!-- METADATA TYPE=?TypeLib?
    FILE=?C:/Program Files/Common Files/system/ado/msado15.dll? -->

    展开全文
  • 将内容解压缩到您喜欢的Web服务器文件夹中。 在phpmysql中创建一个名为'bd_api'的数据库 从文件夹“ sql”将文件“ bd_api.sql”导入数据库“ bd_api” 用 启动您的网络服务器 通过链接“ ”在浏览器中访问API ...
  • 我在MacOS Sierra上使用的Dotfile主要用于Web开发。 包含: 和 , ,彩色man页,用于制作文件夹并输入的mk , extract以提取任何压缩文件, e读取pwd .env文件变量, sphp以使用brew-php-switcher和apache跳过的...
  • 4.Report XP功能完善以后可以通过下载xml格式报表文件到本地打印或者通过applet读取服务器上的报表文件直接从浏览器打印 从而解决web应用的网络报表印刷问题 5.Beta版本程序提供常用的报表线条,矩形,文本框...
  • 翻译算法-源码

    2021-02-18 00:36:32
    尽管此项目是一个Web应用程序,但我故意省略了服务器端语言,以使其尽可能易于下载和编辑,甚至可能用于桌面应用程序。 当前支持 虽然有所限制: 从C ++到Python Java到C ++ Java到Python 自己所有的语言 支持...
  • 实例074 获取服务器名称、客户端名称和IP地址 实例075 ASP.NET实现断点续传 第3章 ASP.NET与Word文件交互操作 3.1 Word文档基本操作 180 实例076 创建Word文档 实例077 向Word文档中写入文字 实例078 在Word...
  • 实例074 获取服务器名称、客户端名称和IP地址 实例075 ASP.NET实现断点续传 第3章 ASP.NET与Word文件交互操作 3.1 Word文档基本操作 180 实例076 创建Word文档 实例077 向Word文档中写入文字 实例078 在Word...
  • 读者可将相关文件夹(如ch2)拷贝到Tomcat服务器安装目录的子目录webapps下,并启动Tomcat服务器,在浏览器中浏览网页。 表1 第1章 序号 文件名称 位置 说明 1 SimpleJSP.jsp 第1章\ch1 第一个JSP页面 2 web.xml ...
  • WORD电子签名插件V1.2

    热门讨论 2008-10-18 14:42:36
    不需要专门的图章服务器,可以使用任意的WEB服务提供程序,如IIS,tomcat等,将软件包中的web目录部署(白话:拷贝)到WEB的某个目录(tomcat中,考到某个上下文)就可以了。  然后在“网络图章”对话框中,输入...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 228
精华内容 91
关键字:

web读取服务器字体