日志文章列表

2006年06月02日 20:54:09

网站类项目商业计划书

目录

  报告目录

  第一部分 摘要(整个计划的概括)

  (文字在2-3页以内)
  一. 项目简单描述(目的、意义、内容、运作方式)
  二. 市场目标概述
  三. 项目优势及特点简介
  四. 利润来源简析
  五. 投资和预算
  六. 融资方案(资金筹措及投资方式)
  七. 财务分析(预算及投资报酬)

  第二部分 综述

  第一章 项目背景

  一. 项目的提出原因
  二. 项目环境背景
  三. 项目优势分析(资源、技术、人才、管理等方面)
  四. 项目运作的可行性
  五. 项目的独特与创新分析

  第二章 项目介绍

  一. 网站建设宗旨
  二. 定位与总体目标
  三. 网站规划与建设进度
  四. 资源整合与系统设计
  五. 网站结构/栏目板块
  六. 主要栏目介绍
  七. 商业模式
  八. 技术功能
  九. 信息/资源来源
  十. 项目运作方式
  十一. 网站优势(资源/内容/模式/技术/市场等)
  十二. 无形资产
  十三. 策略联盟
  十四. 网站版权
  十五. 收益来源概述
  十六. 项目经济寿命

  第三章. 市场分析

  一. 互联网市场状况及成长
  二. 商务模式的市场地位
  三. 目标市场的设定
  四. 传统行业市场状况(网站市场资源的基础)
  五. 市场定位及特点(消费群体、消费方式、消费习惯及影响市场的主要因素分析市场规模、市场结构与划分,特定受众等
  六. 市场成长(网站PageView与消费者市场)
  七. 本项目产品市场优势(对于特定人群的市场特点的省事、省时、省力、省钱等)
  八. 市场趋势预测和市场机会
  九. 行业政策

  第四章 竞争分析

  一. 有无行业垄断
  二. 从市场细分看竞争者市场份额
  三. 主要竞争对手情况

  第五章 商业实施方案

  一. 商业模式实施方案总体规划介绍
  二. 营销策划
  三. 市场推广
  四. 销售方式与环节
  五. 作业流程
  六. 采购、销售政策的制定
  七. 价格方案
  八. 服务、投诉与退货
  九. 促销和市场渗透(方式及安排、预算)
    1. 主要促销方式
    2. 广告/公关策略、媒体评估
    3. 会员制等
  十. 获利分析
  十一. 销售资料统计和销售纪录方式,销售周期的计算。
  十二. 市场开发规划,销售目标(近期、中期),销售预估(3-5年)销售额、占有率及计算依据

  第六章 技术可行性分析

  一. 平台开发
  二. 数据库
  三. 系统开发
  四. 网页设计
  五. 安全技术
  六. 内容设计
  七. 技术人员
  八. 知识产权

  第七章 项目实施

  1. 项目实施构想(公司的设立、组织结构与股权结构)
  2. 网站开发进度设计与阶段目标
  3. 营销进度设计与阶段目标
  4. 行政管理部门的建立、职工的招募和培训安排
  5. 项目执行的成本预估

  第八章 投资说明

  一. 资金需求说明(用量/期限)
  二. 资金使用计划(即用途)及分期
  三. 项目投资构成和固定资产投资的分类
  四. 主要流动资金构成
  五. 投资形式(贷款/利率/利率支付条件/转股-普通股、优先股、任股权/对应价格等)
  六. 资本结构
  七. 股权结构
  八. 股权成本
  九. 投资者介入公司管理之程度说明
  十. 报告(定期向投资者提供的报告和资金支出预算)
  十一. 杂费支付(是否支付中介人手续费)

  第九章 投资报酬与退出

  一. 股票上市
  二. 股权转让
  三. 股权回购
  四. 股利

  第十章 风险分析与规避

  一. 政策风险
  二. 资源风险
  三. 技术风险
  四. 市场风险
  五. 内部环节脱节风险
  六. 成本控制风险
  七. 竞争风险
  八. 财务风险(应收帐款/坏帐/亏损)
  九. 管理风险(含人事/人员流动/关键雇员依赖)
  十. 破产风险

  第十一章 管理 (QQRR.COM)

  一. 公司组织结构
  二. 现有人力资源或经营团队
  三. 管理制度及协调机制
  四. 人事计划(配备/招聘/培训/考核)
  五. 薪资、福利方案
  六. 股权分配和认股计划

  第十二章 经营预测

  一. 网站经营
    1.访问人数成长预测
    2.会员增长预测
    3.行业联盟预测
  二. 销售数量、销售额、毛利率、成长率、投资报酬率预估及计算依据

  第十三章 财务可行性分析

  一. 财务分析说明

  二. 财务数据预测
    1. 收入明细表
    2. 成本费用明细表
    3. 薪金水平明细表
    4. 固定资产明细表
    5. 资产负债表
    6. 利润及利润分配明细表
    7. 现金流量表

  三. 财务分析指标

  反映财务盈利能力的指标
   a. 投资回收期(Pt)
   b. 投资利润率
   c. 投资利税率
   d. 不确定性分析

  第三部分 附录

  一. 附件
  1. 主要经营团队名单及简历
  2. 专业术语说明
  3. 企业形象设计/宣传资料(标识设计、说明书、出版物、包装说明等)

  二. 附表 (QQRR.COM)
    1. 市场受众分析(人群分布/数量等)表
    2. 互联网成长状况表
    3. 主要设备清单
    4. 互联网市场调查表
    5. 预估分析表
    6. 各种财务报表及财务预估表

类别: 无分类 |  评论(0) |  浏览(16334) |  收藏
2006年05月17日 08:45:16

《mysql管理员指南》之 mysql的优化

《mysql管理员指南》之 mysql的优化

(本文是monty在o'reilly open source convention 2000大会上的演讲)

[晏子 编译整理]

一、我们可以且应该优化什么?

硬件

操作系统/软件库

sql服务器(设置和查询)

应用编程接口(api)

应用程序


--------------------------------------------------------------------------------

二、优化硬件

如果你需要庞大的数据库表(>2g),你应该考虑使用64位的硬件结构,像alpha、sparc或即将推出的ia64。因为mysql内部使用大量64位的整数,64位的cpu将提供更好的性能。

对大数据库,优化的次序一般是ram、快速硬盘、cpu能力。

更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新。

如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查,一台ups就能够在电源故障时让系统安全关闭。

对于数据库存放在一个专用服务器的系统,应该考虑1g的以太网。延迟与吞吐量同样重要。


--------------------------------------------------------------------------------

三、优化磁盘

为系统、程序和临时文件配备一个专用磁盘,如果确是进行很多修改工作,将更新日志和事务日志放在专用磁盘上。
低寻道时间对数据库磁盘非常重要。对与大表,你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表,索引mediun int类型的列,需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2m的空间。实际上,大多数块将被缓存,所以大概只需要1-2次寻道。
然而对于写入(如上),你将需要4次寻道请求来找到在哪里存放新键码,而且一般要2次寻道来更新索引并写入一行。
对于非常大的数据库,你的应用将受到磁盘寻道速度的限制,随着数据量的增加呈n log n数据级递增。
将数据库和表分在不同的磁盘上。在mysql中,你可以为此而使用符号链接。
条列磁盘(raid 0)将提高读和写的吞吐量。
带镜像的条列(raid 0+1)将更安全并提高读取的吞吐量。写入的吞吐量将有所降低。
不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或raid(除了raid 0)。
在linux上,在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和dma功能。这可以将响应时间提高5~50%。
在linux上,用async (默认)和noatime挂载磁盘(mount)。
对于某些特定应用,可以对某些特定表使用内存磁盘,但通常不需要。

--------------------------------------------------------------------------------

四、优化操作系统

不要交换区。如果内存不足,增加更多的内存或配置你的系统使用较少内存。
不要使用nfs磁盘(会有nfs锁定的问题)。
增加系统和mysql服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n #)。
增加系统的进程和线程数量。
如果你有相对较少的大表,告诉文件系统不要将文件打碎在不同的磁道上(solaris)。
使用支持大文件的文件系统(solaris)。
选择使用哪种文件系统。在linux上的reiserfs对于打开、读写都非常快。文件检查只需几秒种。

--------------------------------------------------------------------------------

五、选择应用编程接口

perl
可在不同的操作系统和数据库之间移植。
适宜快速原型。
应该使用dbi/dbd接口。
php
比perl易学。
使用比perl少的资源。
通过升级到php4可以获得更快的速度。
c
mysql的原生接口。
较快并赋予更多的控制。
低层,所以必须付出更多。
c++
较高层次,给你更多的时间来编写应用。
仍在开发中
odbc
运行在windows和unix上。
几乎可在不同的sql服务器间移植。
较慢。myodbc只是简单的直通驱动程序,比用原生接口慢19%。
有很多方法做同样的事。很难像很多odbc驱动程序那样运行,在不同的领域还有不同的错误。
问题成堆。microsoft偶尔还会改变接口。
不明朗的未来。(microsoft更推崇ole而非odbc)
odbc
运行在windows和unix上。
几乎可在不同的sql服务器间移植。
较慢。myodbc只是简单的直通驱动程序,比用原生接口慢19%。
有很多方法做同样的事。很难像很多odbc驱动程序那样运行,在不同的领域还有不同的错误。
问题成堆。microsoft偶尔还会改变接口。
不明朗的未来。(microsoft更推崇ole而非odbc)
jdbc
理论上可在不同的操作系统何时据库间移植。
可以运行在web客户端。
python和其他
可能不错,可我们不用它们。

--------------------------------------------------------------------------------

六、优化应用

应该集中精力解决问题。
在编写应用时,应该决定什么是最重要的:
  速度
  操作系统间的可移植性
  sql服务器间的可移植性
使用持续的连接。.
缓存应用中的数据以减少sql服务器的负载。
不要查询应用中不需要的列。
不要使用select * from table_name...
测试应用的所有部分,但将大部分精力放在在可能最坏的合理的负载下的测试整体应用。通过以一种模块化的方式进行,你应该能用一个快速“哑模块”替代找到的瓶颈,然后很容易地标出下一个瓶颈。
如果在一个批处理中进行大量修改,使用lock tables。例如将多个updates或deletes集中在一起。

--------------------------------------------------------------------------------

七、应该使用可移植的应用

perl dbi/dbd
odbc
jdbc
python(或其他有普遍sql接口的语言)
你应该只使用存在于所有目的sql服务器中或可以很容易地用其他构造模拟的sql构造。www.mysql.com上的crash-me页可以帮助你。
为操作系统/sql服务器编写包装程序来提供缺少的功能。

--------------------------------------------------------------------------------

八、如果你需要更快的速度,你应该:

找出瓶颈(cpu、磁盘、内存、sql服务器、操作系统、api或应用)并集中全力解决。
使用给予你更快速度/灵活性的扩展。
逐渐了解sql服务器以便能为你的问题使用可能最快的sql构造并避免瓶颈。
优化表布局和查询。
使用复制以获得更快的选择(select)速度。
如果你有一个慢速的网络连接数据库,使用压缩客户/服务器协议。
不要害怕时应用的第一个版本不能完美地移植,在你解决问题时,你总是可以在以后优化它。


--------------------------------------------------------------------------------

九、优化mysql

挑选编译器和编译选项。
位你的系统寻找最好的启动选项。
通读mysql参考手册并阅读paul dubios的《mysql》一书。(已有中文版-译注)
多用explain select、show variables、show status和show processlist。
了解查询优化器的工作原理。
优化表的格式。
维护你的表(myisamchk、check table、 optimize table)
使用mysql的扩展功能以让一切快速完成。
如果你注意到了你将在很多场合需要某些函数,编写mysql udf函数。
不要使用表级或列级的grant,除非你确实需要。
购买mysql技术支持以帮助你解决问题:)

--------------------------------------------------------------------------------

十、编译和安装mysql

通过位你的系统挑选可能最好的编译器,你通常可以获得10-30%的性能提高。
在linux/intel平台上,用pgcc(gcc的奔腾芯片优化版)编译mysql。然而,二进制代码将只能运行在intel奔腾cpu上。
对于一种特定的平台,使用mysql参考手册上推荐的优化选项。
一般地,对特定cpu的原生编译器(如sparc的sun workshop)应该比gcc提供更好的性能,但不总是这样。
用你将使用的字符集编译mysql。
静态编译生成mysqld的执行文件(用--with-mysqld-ldflags=all-static)并用strip sql/mysqld整理最终的执行文件。
注意,既然mysql不使用c++扩展,不带扩展支持编译mysql将赢得巨大的性能提高。
如果操作系统支持原生线程,使用原生线程(而不用mit-pthreads)。
用mysql基准测试来测试最终的二进制代码。

--------------------------------------------------------------------------------

十一、维护

如果可能,偶尔运行一下optimize table,这对大量更新的变长行非常重要。
偶尔用myisamchk -a更新一下表中的键码分布统计。记住在做之前关掉mysql。
如果有碎片文件,可能值得将所有文件复制到另一个磁盘上,清除原来的磁盘并拷回文件。
如果遇到问题,用myisamchk或check table检查表。
用mysqladmin -i10 precesslist extended-status监控mysql的状态。
用mysql gui客户程序,你可以在不同的窗口内监控进程列表和状态。
使用mysqladmin debug获得有关锁定和性能的信息。

--------------------------------------------------------------------------------

十二、优化sql

扬sql之长,其它事情交由应用去做。使用sql服务器来做:

  找出基于where子句的行。
  join表
  group by
  order by
  distinct

不要使用sql来做:

  检验数据(如日期)
  成为一只计算器

技巧:

  明智地使用键码。
  键码适合搜索,但不适合索引列的插入/更新。
  保持数据为数据库第三范式,但不要担心冗余信息或这如果你需要更快的速度,创建总结表。
  在大表上不做group by,相反创建大表的总结表并查询它。
  update table set count=count+1 where key_column=constant非常快。
  对于大表,或许最好偶尔生成总结表而不是一直保持总结表。
  充分利用insert的默认值。

--------------------------------------------------------------------------------

十三、不同sql服务器的速度差别(以秒计)

 
+--------------------------+--------+---------+
|通过键码读取2000000行:   | nt   | linux |
+--------------------------+--------+---------+
|mysql               | 367   | 249   |
+--------------------------+--------+---------+
|mysql_odbc           | 464   |       |
+--------------------------+--------+---------+ 
|db2_odbc             | 1206   |       |
+--------------------------+--------+---------+ 
|informix_odbc         | 121126 |       |
+--------------------------+--------+---------+ 
|ms-sql_odbc           | 1634   |       |
+--------------------------+--------+---------+
|oracle_odbc           | 20800 |       |
+--------------------------+--------+---------+   
|solid_odbc           | 877   |       |
+--------------------------+--------+---------+
|sybase_odbc           | 17614 |       |
+--------------------------+--------+---------+ 

+--------------------------+--------+---------+ 
|插入350768行:         | nt   | linux |
+--------------------------+--------+---------+
|mysql               | 381   | 206   |
+--------------------------+--------+---------+
|mysql_odbc           | 619   |       |
+--------------------------+--------+---------+
|db2_odbc             | 3460  |       |
+--------------------------+--------+---------+
|informix_odbc         | 2692  |       |
+--------------------------+--------+---------+
|ms-sql_odbc           | 4012  |       |
+--------------------------+--------+---------+
|oracle_odbc           | 11291 |       |
+--------------------------+--------+---------+ 
|solid_odbc           | 1801  |       |
+--------------------------+--------+---------+
|sybase_odbc           | 4802  |       |
+--------------------------+--------+---------+


在上述测试中,mysql配置8m高速缓存运行,其他数据库以默认安装运行。


--------------------------------------------------------------------------------

十四、重要的mysql启动选项

back_log 如果需要大量新连接,修改它。
thread_cache_size 如果需要大量新连接,修改它。
key_buffer_size 索引页池,可以设成很大。
bdb_cache_size bdb表使用的记录和键吗高速缓存。
table_cache 如果有很多的表和并发连接,修改它。
delay_key_write 如果需要缓存所有键码写入,设置它。
log_slow_queries 找出需花大量时间的查询。
max_heap_table_size 用于group by
sort_buffer 用于order by和group by
myisam_sort_buffer_size 用于repair table
join_buffer_size 在进行无键吗的联结时使用。


--------------------------------------------------------------------------------

十五、优化表

mysql拥有一套丰富的类型。你应该对每一列尝试使用最有效的类型。
analyse过程可以帮助你找到表的最优类型:select * from table_name procedure analyse()。
对于不保存null值的列使用not null,这对你想索引的列尤其重要。
将isam类型的表改为myisam。
如果可能,用固定的表格式创建表。
不要索引你不想用的东西。
利用mysql能按一个索引的前缀进行查询的事实。如果你有索引index(a,b),你不需要在a上的索引。
不在长char/varchar列上创建索引,而只索引列的一个前缀以节省存储空间。create table table_name (hostname char(255) not null, index(hostname(10)))
对每个表使用最有效的表格式。
在不同表中保存相同信息的列应该有同样的定义并具有相同的列名。

--------------------------------------------------------------------------------

十六、mysql如何次存储数据

数据库以目录存储。
表以文件存储。
列以变长或定长格式存储在文件中。对bdb表,数据以页面形式存储。
支持基于内存的表。
数据库和表可在不同的磁盘上用符号连接起来。
在windows上,mysql支持用.sym文件内部符号连接数据库。

--------------------------------------------------------------------------------

十七、mysql表类型

heap表:固定行长的表,只存储在内存中并用hash索引进行索引。
isam表:mysql 3.22中的早期b-tree表格式。
myiasm:iasm表的新版本,有如下扩展:
  二进制层次的可移植性。
  null列索引。
  对变长行比isam表有更少的碎片。
  支持大文件。
  更好的索引压缩。
  更好的键吗统计分布。
  更好和更快的auto_increment处理。
来自sleepcat的berkeley db(bdb)表:事务安全(有begin work/commit|rollback)。

--------------------------------------------------------------------------------

十八、mysql行类型(专指iasm/myiasm表)

如果所有列是定长格式(没有varchar、blob或text),mysql将以定长表格式创建表,否则表以动态长度格式创建。
定长格式比动态长度格式快很多并更安全。
动态长度行格式一般占用较少的存储空间,但如果表频繁更新,会产生碎片。
在某些情况下,不值得将所有varchar、blob和text列转移到另一个表中,只是获得主表上的更快速度。
利用myiasmchk(对isam,pack_iasm),可以创建只读压缩表,这使磁盘使用率最小,但使用慢速磁盘时,这非常不错。压缩表充分地利用将不再更新的日志表

--------------------------------------------------------------------------------

十九、mysql高速缓存(所有线程共享,一次性分配)

键码缓存:key_buffer_size,默认8m。
表缓存:table_cache,默认64。
线程缓存:thread_cache_size,默认0。
主机名缓存:可在编译时修改,默认128。
内存映射表:目前仅用于压缩表。
注意:mysql没有运行高速缓存,而让操作系统处理。


--------------------------------------------------------------------------------

二十、mysql缓存区变量(非共享,按需分配)

sort_buffer:order by/group by
record_buffer:扫描表。
join_buffer_size:无键联结
myisam_sort_buffer_size:repair table
net_buffer_length:对于读sql语句并缓存结果。
tmp_table_size:临时结果的heap表大小。
 

--------------------------------------------------------------------------------

二十一、mysql表高速缓存工作原理

每个myisam表的打开实例(instance)使用一个索引文件和一个数据文件。如果表被两个线程使用或在同一条查询中使用两次,myiasm将共享索引文件而是打开数据文件的另一个实例。
如果所有在高速缓存中的表都在使用,缓存将临时增加到比表缓存尺寸大些。如果是这样,下一个被释放的表将被关闭。
你可以通过检查mysqld的opened_tables变量以检查表缓存是否太小。如果该值太高,你应该增大表高速缓存。
 

--------------------------------------------------------------------------------

二十二、mysql扩展/优化-提供更快的速度

使用优化的表类型(heap、myiasm或bdb表)。
对数据使用优化的列。
如果可能使用定长行。
使用不同的锁定类型(select high_priority,insert low_priority)
auto_increment
replace (replace into table_name values (...))
insert delayed
load data infile / load_file()
使用多行insert一次插入多行。
select into outfile
left join, straight join
left join ,结合is null
order by可在某些情况下使用键码。
如果只查询在一个索引中的列,将只使用索引树解决查询。
联结一般比子查询快(对大多数sql服务器亦如此)。
limit
  select * from table1 where a > 10 limit 10,20
  delete * from table1 where a > 10 limit 10
foo in (常数列表) 高度优化。
get_lock()/release_lock()
lock tables
insert和select可同时运行。
udf函数可装载进一个正在运行的服务器。
压缩只读表。
create temporary table
create table .. select
带raid选项的myiasm表将文件分割成很多文件以突破某些文件系统的2g限制。
delay_keys
复制功能

--------------------------------------------------------------------------------

二十二、mysql何时使用索引

对一个键码使用>, >=, =, <, <=, if null和between
  select * from table_name where key_part1=1 and key_part2 > 5;
  select * from table_name where key_part1 is null;

当使用不以通配符开始的like
  select * from table_name where key_part1 like 'jani%'

在进行联结时从另一个表中提取行时
  select * from t1,t2 where t1.col=t2.key_part

找出指定索引的max()或min()值
  select min(key_part2),max(key_part2) from table_name where key_part1=10

一个键码的前缀使用order by或group by
  select * from foo order by key_part1,key_part2,key_part3

在所有用在查询中的列是键码的一部分时间
  select key_part3 from table_name where key_part1=1

--------------------------------------------------------------------------------

二十三、mysql何时不使用索引

如果mysql能估计出它将可能比扫描整张表还要快时,则不使用索引。例如如果key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好:
  select * from table_name where key_part1 > 1 and key_part1 < 90

如果使用heap表且不用=搜索所有键码部分。

在heap表上使用order by。

如果不是用键码第一部分
  select * from table_name where key_part2=1
 
如果使用以一个通配符开始的like
  select * from table_name where key_part1 like '%jani%'

搜索一个索引而在另一个索引上做order by
  select * from table_name where key_part1 = # order by key2

--------------------------------------------------------------------------------

二十四、学会使用explain

对于每一条你认为太慢的查询使用explain!

mysql> explain select t3.dateofaction, t1.transactionid
  -> from t1 join t2 join t3
  -> where t2.id = t1.transactionid and t3.id = t2.groupid
  -> order by t3.dateofaction, t1.transactionid;
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| table | type   | possible_keys | key   | key_len | ref         | rows | extra                   |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| t1   | all   | null       | null   |   null | null         |   11 | using temporary; using filesort |
| t2   | ref   | id         | id     |     4 | t1.transactionid |   13 |                       |
| t3   | eq_ref | primary     | primary |     4 | t2.groupid     |   1 |                       |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+

all和范围类型提示一个潜在的问题。
 


--------------------------------------------------------------------------------

二十五、学会使用show processlist

使用show processlist来发现正在做什么:
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| id | user | host     | db | command | time | state     | info                     |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| 6 | monty | localhost | bp | query   | 15   | sending data | select * from station,station as s1 |
| 8 | monty | localhost |   | query   | 0   |         | show processlist             |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+

在mysql或mysqladmin中用kill来杀死溜掉的线程。
--------------------------------------------------------------------------------

二十六、如何知晓mysql解决一条查询

运行项列命令并试图弄明白其输出:
show variables;
show columns from ...\g
explain select ...\g
flush status;
select ...;
show status;

--------------------------------------------------------------------------------

二十七、mysql非常不错

日志
在进行很多连接时,连接非常快。
同时使用select和insert的场合。
在不把更新与耗时太长的选择结合时。
在大多数选择/更新使用唯一键码时。
在使用没有长时间冲突锁定的多个表时。
在用大表时(mysql使用一个非常紧凑的表格式)。

--------------------------------------------------------------------------------

二十八、mysql应避免的事情

用删掉的行更新或插入表,结合要耗时长的select。
在能放在where子句中的列上用having。
不使用键码或键码不够唯一而进行join。
在不同列类型的列上join。
在不使用=匹配整个键码时使用heap表。
在mysql监控程序中忘记在update或delete中使用一条where子句。如果想这样做,使用mysql客户程序的--i-am-a-dummy选项。

--------------------------------------------------------------------------------

二十九、mysql各种锁定

内部表锁定
lock tables(所有表类型适用)
get lock()/release lock()
页面锁定(对bdb表)
alter table也在bdb表上进行表锁定
lock tables允许一个表有多个读者和一个写者。
一般where锁定具有比read锁定高的优先级以避免让写入方干等。对于不重要的写入方,可以使用low_priority关键字让锁定处理器优选读取方。
update low_priority set value=10 where id=10;

   

--------------------------------------------------------------------------------

三十、给mysql更多信息以更好地解决问题的技巧

注意你总能去掉(加注释)mysql功能以使查询可移植:

select /*! sql_buffer_results */ ...
select sql_buffer_results ...
将强制mysql生成一个临时结果集。只要所有临时结果集生成后,所有表上的锁定均被释放。这能在遇到表锁定问题时或要花很长时间将结果传给客户端时有所帮助。
select sql_small_result ... group by ...
告诉优化器结果集将只包含很少的行。
select sql_big_result ... group by ...
告诉优化器结果集将包含很多行。
select straight_join ...
强制优化器以出现在from子句中的次序联结表。
select ... from table_name [use index (index_list) | ignore index (index_list)] table_name2
强制mysql使用/忽略列出的索引。

--------------------------------------------------------------------------------

三十一、事务的例子

myiasm表如何进行事务处理:
mysql> lock tables trans read, customer write;
mysql> select sum(value) from trans where customer_id=some_id;
mysql> update customer set total_value=sum_from_previous_statement
      where customer_id=some_id;
mysql> unlock tables;

bdb表如何进行事务:
mysql> begin work;
mysql> select sum(value) from trans where customer_id=some_id;
mysql> update customer set total_value=sum_from_previous_statement
      where customer_id=some_id;
mysql> commit;

注意你可以通过下列语句回避事务:
update customer set value=value+new_value where customer_id=some_id;


--------------------------------------------------------------------------------

三十二、使用replace的例子

replace的功能极像insert,除了如果一条老记录在一个唯一索引上具有与新纪录相同的值,那么老记录在新纪录插入前则被删除。不使用

select 1 from t1 where key=#
if found-row
  lock tables t1
  delete from t1 where key1=#
  insert into t1 values (...)
  unlock tables t1;
endif

而用
replace into t1 values (...)  


--------------------------------------------------------------------------------

三十三、一般技巧

使用短主键。联结表时使用数字而非字符串。
当使用多部分键码时,第一部分应该时最常用的部分。
有疑问时,首先使用更多重复的列以获得更好地键码压缩。
如果在同一台机器上运行mysql客户和服务器,那么在连接mysql时则使用套接字而不是tcp/ip(这可以提高性能7.5%)。可在连接mysql服务器时不指定主机名或主机名为localhost来做到。
如果可能,使用--skip-locking(在某些os上为默认),这将关闭外部锁定并将提高性能。
使用应用层哈希值而非长键码:
select * from table_name where hash=md5(concat(col1,col2)) and
col_1='constant' and col_2='constant'

在文件中保存需要以文件形式访问的blob,在数据库中只保存文件名。
删除所有行比删除一大部分行要快。
如果sql不够快,研究一下访问数据的较底层接口。

--------------------------------------------------------------------------------

三十四、使用mysql 3.23的好处

myisam:可移植的大表格式
heap:内存中的表
berkeley db:支持事务的表。
众多提高的限制
动态字符集
更多的status变量
check和repair表
更快的group by和distinct
left join ... if null的优化
create table ... select
create temporary table_name (...)
临时heap表到myisam表的自动转换
复制
mysqlhotcopy脚本

--------------------------------------------------------------------------------

三十五、正在积极开发的重要功能

改进事务处理
失败安全的复制
正文搜索
多个表的删除(之后完成多个表的更新)
更好的键码缓存
原子rename (rename table foo as foo_old, foo_new as foo)
查询高速缓存
merge tables
一个更好的gui客户程序

类别: 无分类 |  评论(1) |  浏览(12266) |  收藏
2006年05月07日 09:28:29

网络经济的运行模式与竞争策略

              复旦大学金融研究院博士后 马广奇


  [内容提要] 网络经济是不同于传统经济的一种低成本、无摩擦、高效率的全新的经济型态。网络经济不仅对传统的经济学理论提出了严峻的挑战,而且对社会制度、法律、政府和人们的观念形成巨大的冲击,尤其是对企业的运作机制和竞争策略提出了迫切的更新要求。
  [关键词]网络经济、非摩擦经济、经济学理论、企业竞争策略


  网络经济经历了一段时间的热潮后似乎归于平静,然而网络经济却现实地发展着,关于网络经济的争论也一直没有停止。网络经济与传统经济有什么不同?网络经济的运行规律如何?网络经济下企业的竞争策略是什么等问题值得人们深入思考。我认为,网络经济是不同于传统经济的一种低成本、无摩擦、高效率的全新的经济型态。网络经济不仅对传统的经济学理论提出了严峻的挑战,而且对社会制度、法律、政府和人们的观念形成巨大的冲击,尤其是对企业的运作机制和竞争策略提出了迫切的更新要求。

  一、网络经济对传统经济学理论的挑战

  西方交易费用理论认为,任何交易都是有成本的,是要花费费用的,经济运行是有摩擦、有阻力的,也就是说经济活动是一种摩擦经济。只有通过合理的产权界定和有效的制度安排,才能降低交易费用,减少摩擦,提高经济效率。由此,如果说传统经济是一种摩擦经济的话,那么网络经济就是一种非摩擦经济。
  网络经济在大部分情况下就是没有摩擦的经济,也就是说,生产、销售和售后服务等费用要比在传统经济模式下低得多,几乎以接近于零的成本获得无限资源,无限地提供产品、服务及创意,从而使经济状况大为改观。在某种意义上,这种新型的经济模式就如同一个虚拟的世界,只要产品低成本制造、廉价销售,就会赢得用户。可见,网络经济是不同于以往经济模式的一种低成本、无摩擦、高效率的全新的经济型态。
  网络经济向传统经济学理论提出了严峻的挑战,具体来说,主要表现在以下几点:

  (一)网络经济推翻了传统的供需平衡机制
  在传统经济学中,生产随需求而变化,企业根据需求的升降来调整生产。也就是说,传统经济是一种“供给支持需求”型经济,即“看不见的手”努力平衡供给和需求。它的传导机制是:需求——价格——供给。具体来说,需求下降,引起价格降低,再引起供给减少;需求上升,引起价格升高,再引起供给扩大。而在网络经济中,由于没有什么摩擦,没有相互抵触的因素,因而需求毫不费力地随生产的变化而变化。也就是说,网络经济是一种“供给主导需求”型经济,即“看不见的手”努力“主流化”。它的传导机制是:供给——价格——需求。具体来说,供给增长,引起价格降低,刺激需求增长;供给增长,又引起价格降低,再刺激需求增长,如此循环往复。可见,网络经济中供需平衡的规律颠倒了。

  (二)网络经济改变了传统经济中的“收益递减规律”
  收益递减规律打个比方说就是,消费者吃得越饱,饥饿感就越小,对食物的需求就越少,因此食品商的收益也就越小。而在网络经济中,消费者吃得越多,就越感到饥饿。例如,微软公司的用户需要越来越多的该公司生产的产品,因为软件用户已被锁定在某一个文字处理系统或排版系统上,他们不愿学习使用新的系统,于是不断购买原系统的新版本。不久,一种产品、一项服务或一个创意就取得了偶像地位,随之在消费者眼中变成了一种时尚,从而取得了主流地位。主流化了的产品、服务或创意能自身获得动力,从而使收益递增,而不是递减。

  (三)网络经济具有不同于传统经济的“反馈机制”
  这里首先要明确负反馈和正反馈的概念。所谓负反馈就象是汽车行驶太快时的突然刹车,是阻力、摩擦力。在传统经济学中,负反馈既是阻力,表现为需求阻碍供给;又是摩擦力,表现为制造、分配和销售的正常开支,表现为收益递减。正反馈则截然相反,它是在加速而不是阻碍市场份额的变化。降低价格,锁定特定的用户群,发展长远客户,所有这一切都刺激了需求的增长。这种正反馈机制促使需求不断增长,迫使产量持续增长,直到市场饱和。因此,网络经济自身具有正反馈机制,这种正反馈机制与传统经济学中的负反馈机制或收益递减规律的运作方式正好截然相反。
  但是,网络经济虽然不同于传统经济,但它仍要受市场力量的支配。正如詹姆士·阿利指出的,“递增利润的存在并不意味着递减利润就不存在了,这两种现象将永远共存,并且起着互补作用。”实际上,网络经济仅仅是延迟了递减利润开始产生影响的时间。

  (四)网络经济具有非线性的“混沌”特征
  某些具有内在不稳定的系统时而会出现紊乱的态势,数学上称之为“混沌”。而非线性则是指人们难以预料的因果关系。例如股票市场价格的波动就是一种混沌状态,买卖、抢夺市场份额向来就是按非线性系统规律进行的。一个混沌系统就是一个非线性系统。网络经济就是这样一个非线性的系统,它一旦有变化,就不是从一个值均匀地变化到另一个值,而是跳跃式地变化。网络经济内在的非线性特征正是传统经济学理论无法解释的主要原因所在。
  这种现象只能用“混沌理论”来解释。一个非线性系统即使呈不稳定的混沌态势,它仍会趋于某个均衡点,系统围绕该点上下波动,达到该点时,便处于稳定状态。这个点就是混沌系统的均衡点。运用到股市上,它就成了某种股票价格的均衡点;运用到网络经济中就是各公司的市场占有率。网络经济与传统经济体系的本质不同就在于它内在的数学原理是用数理混沌理论描述的。传统经济学理论只揭示了有形物品、货物的供需以及市场总是从一种状态线性地过渡到另一种状态的规律,它无法解释当代网络经济所具有的非线性混沌特征。
  综上所述,网络经济与传统经济有着明显的不同,传统的经济学理论不再完全适用于现代网络经济。

  二、网络经济的特殊定律

  网络经济与传统经济学的定律不同,它有自身的一些特殊定律。

  (一)莫尔定律(Moore’ Law)
  莫尔定律认为,网络技术改变了传统经济的变化速度(rate of change),网络经济是按照“因特网时”(internet time)的速度运转的,计算机处理能力每18个月就翻一番。由于这个定律首先是由美国因特尔公司的戈登·莫尔提出并应用的,因此被称为“莫尔定律”。
  “因特网时”是网络经济的变化速度,它是以小时为计量单位的,这已接近人类能够吸收信息并做出决策的能力的极限。通常7年相当于因特网时中的1年。在因特网时,每3~5年就是一个网络经济时段。一种产品在3~5年里就会达到主流饱和状态。为了更鲜明地理解因特网时,可以将网络经济与农业、工业、后工业等经济时代列表对比如下:

网络经济与传统经济时代的对比
时代 延续时间(年) 交互速度(英里/小时) 环球所需时间
农业经济 3~5000 3~5(人力) 3~5(年)
工业经济 3~500 3~50(马车~汽车) 0.3~0.5(月)
后工业经济 3~50 3~500(飞机) 0.03~0.05(天)
网络经济 3~5 3~5000(网络) 0.003~0.005(小时)

  显然,每个时代的长短取决于交通和通讯的速度,也就是那个时代的技术速度。根据上表,工业时代比农业时代要短10倍,后工业时代要比工业时代短10倍,而网络经济中每个时代则只有3~5年,极其短暂。
  极端的“因特网时”给网络经济的运行强加了一个非常重要的力量,那就是学习。莫尔定律是网络经济中企业和它的竞争对手必须遵循的一种业绩学习曲线(performance-learning curve)。网络经济是给信息增殖的一种经济模式,增殖能产生更多的信息,而更多的信息又能进一步增殖,这种不断循环着的特殊的信息收集过程,被称为学习。学习是运行在网络经济中的正反馈机制的核心部分,因为它以技术优势代替了物质优势。一般来说,一项新发明、新的电脑程序或新方法问世后,必然会有人对其做出改进,在原来的基础上巧妙地修改、提高或运用,从而掌握了增殖的奥秘。这促进了更多的革新和改进,于是就有了更多的学习,导致了后代产品的进一步增殖。这个发明、学习和增殖的循环会一直持续到技术枯竭或该技术被其他技术所取代。学习导致了全社会都在追求速度,学习过程和与之相适应的正反馈机制是网络经济的推动力,因此,控制学习变化速度是网络经济的一个关键因素。

  (二)达维多定律(Davidow’ Law)
  达维多定律认为,在网络经济中,进入市场的第一代产品能够自动获得50%的市场份额,因此,一家企业如果要在市场上占据主导地位,就必须第一个开发出新一代产品。与其作为第二或第三家将新产品打入市场,绝对不如第一家,尽管你的产品那时还并不完美。该定律还认为,任何企业在本产业中必须第一个淘汰自己的产品,即要自己尽快使产品更新换代,而不要让激烈的竞争把你的产品淘汰掉。这实际上是在“因特网时”中生活的一个必然结果。威廉·达维多在因特尔公司任副总裁时,就注意到了提高产品更新速度的重要性,并提出了这一定律。

  (三)新兰切斯特策略(New Lanchester’ Strategy)
  对网络经济的形成产生重大影响的第三个人是英国的F.M.兰切斯特(1868~1946),他设计了英国的第一辆汽车,写了《战时飞机:第四代武器的开端》一书,并于1916年创立了“数学理论策略”。他的思想影响了运筹学的创始人伯拉德·库柏曼。W.E.德明在60年代把上述两人的思想介绍到日本,日本科学院院士申夫田冈博士总结了该理论中的精华部分,并以此为基础针对日本人的消费状况制定了一种新的营销策略,被称之为“新兰切斯特策略”。该策略描述的是网络经济的竞争规则。新兰切斯特策略被用于商业时,就成为一整套的指导原则,指点市场部门如何在竞争中取胜。
  具体来说,新兰切斯特策略的运用可以使产品、服务或标准主流化。某个产品一旦主流化,它的地位就不大可能被动摇,锁定了一大批固定用户,并给生产该产品的公司带来巨额利润。因此,兰切斯特被许多人视为运筹学之父,在网络世界里,可以称为网络经济的建筑师,至少也可称为市场交易策略的设计大师。

  三、网络经济中的生存原则和竞争策略

  商场就是战场。网络经济中的市场营销就象打仗一样。根据以上网络经济的特征以及运行规律,企业必须采取不同于传统经济的生存原则和相应的竞争策略。

  (一)产品主流化(mainstreaming):抢夺市场份额
  主流化是网络经济生存竞争的首要原则。为了赢得最大市场份额而赠送第一代产品的做法就是主流化。主流化所追求的目标就是“锁定”(lock-in),即通过吸引客户从而占领主要市场份额的过程。一旦数以百万计的用户对该产品有了依赖感,考虑到培训费用和其他转换成本,他们就再也逃脱不了;一旦某个产品取得了主流地位,这个地位就不大可能被动摇。显然,主流化有两方面的意义:它不仅锁定了用户,同时还消除了竞争。
  免费赠送是实现主流化的具体方式,它通过把自己产品的价格降到冰点,而使其普及程度一夜之间升到沸点,从而一跃成为市场霸主。许多网络公司都是这么做的。这也就是著名的“剃须刀和刀片”原理,赠送剃须刀就是为了长期推销刀片。
  主流化的直接目标就是追求市场份额的最大化,而市场份额的多少与企业在竞争中的地位有直接的关系。研究发现,一个企业要想在网络经济中白手起家,必须先拥有26.1%的份额,再赢得41.7%的份额,最后达到73.9%的份额。这一过程包括以下几个阶段:(1)当一个企业使用高明的计谋达到26.1%的市场份额这一最低目标时,才能成为“竞争者”,即才可被看作是一个可参与竞争的企业。若低于26.1%,则它的生存能力就很弱,只能算是“不稳定的竞争者”,它的地位可能随时会被竞争者取代。一旦拥有26.1%以上的份额,就开始与其他公司相脱离,处于领导市场产品的地位。获利能力一改变,市场份额也随之改变。(2)弥补缺口来进一步赢得41.7%以上的市场份额,这样就会成为市场“领导者”。所以市场霸主的目标是猎取超出41.7%的份额,这时,该公司与它的竞争对手之间赢利能力的差距才能扩大。在网络经济中取得这一关键地位的捷径常常是兼并和收购(M&A)。(3)通过主流化以赚取73.9%的份额,从而成为“垄断者”。当然,垄断是每个雄心勃勃的公司的最终目标。但是,但再往上超过73.9%时就会停滞不前,因为其一,很难刺激出更多的商品需求量;其二,会引来与其他产业集团或专业化产品公司的竞争;其三,市场份额与赢利能力两者之间就会错位。因此,虽然拥有90%、95%或100%的市场份额,似乎是最理想的目标,但在网络经济中不应该是一个聪明企业的目标。

  (二)铸造价值链:“黄金定律”
  网络经济中,许多高科技产业已构成价值链上的分支。价值链是由基础科技公司、中等增殖公司及最终用户共同联结成的价值增殖链条。网络经济通过价值链实现价值增殖,企业从价值链的一个或多个分支中抽取资金,赚得利润。网络经济决定了任何公司若只是赢利,而不实现价值链增殖,将难以幸存。
  价值链中包含有“黄金”,企业拥有或控制的价值链上的分支越多,它所获取的“黄金”也越多,这就是“黄金定律”。任何企业意欲挖掘网络经济的潜力,就必须充分利用由一个甚至多个市场空间构成的价值链。
  网络经济下,价值链比各组成部分的总和价值要大。单枪匹马地干无济于事,所以各企业要联合起来,形成“价值链群”才能幸存。随着产品的分解,价值链不断整合。各企业应建立合作关系,发挥联合的作用,竭力从整个价值链上获取利润。

  (三)PICN原则:产品个性化
  网络经济中产品和服务必须要有个性,即质量和外观以及感觉要对人性因素具有吸引力。个性也许很难定义,但是有个性的产品就有市场。一个企业要在网络经济竞争中获胜,必须瞄准个体市场,实现产品、服务和创意的个性化,即遵循PICN原则。
  PICN是一个缩略词,由个人化(personalization)、个体化(individualization)、客户化(customization)和特定化(narrowcasting)四个词的英文首字母大写组成。这里,个人化是指产品恰恰正好符合个人的需要;客户化是指客户能根据自己的需要去剪裁某项产品;个体化是指某项产品是专门为某个特定的人的生活方式而设计的;特定化即指客户是通过单人市场发掘出来的。所有这些,都组成了PICN因素。在网络经济中,个人化代替了效率,个体化代替了大规模生产,客户化代替了客户支持,特定化代替了大规模销售。
  显然,PICN原则迫使生产超越了销售的束缚。网络经济中的生产不再是整体地、大批量地生产出普通呆板的产品,或提供僵硬、没有特色的服务,取而代之的是,它生产的产品或提供的服务事后能够改进。个人化和个体化使价值乘数达到了最大化。总之,在网络经济中,个人化、个体化和个人市场这些新观念正在深入人心,而提高效率、降低成本和节约资金这些传统观念正在悄然逝去。由于产品和服务越来越个性化了,所以心理学、社会学和人类学在网络经济中变得越来越重要。

  (四)虚拟社区和部落意识
  虚拟社区是由有着相同需要的人组成的群体,随着科技的发展越来越把世界各地的人们与世界各地的产品和服务联结起来,虚拟社区这个概念将发挥更大的作用。
  在网络经济中,企业首先得找出富有代表性的个人习惯、个人喜好和个人品味,并据此生产出符合个人需要的产品。然后企业必须找出大量的这种类型的潜在客户,把他们当成一个独特的群体,向他们出售产品。但是要想吸引住这个群体,就得迎合他们共同的人生经历、价值观念和兴趣爱好,也就是说,要创造出一种社区意识。一个成功的营销策略必须迎合他们心灵深处的那种农业时代的部落意识。网络经济中的产品和服务不仅要适合一个单个的人,同时要能引起整个部落的兴趣。事实上,虚拟社区已超越了社团的范畴,随着网络经济趋于成熟,每个人都将成为某个虚拟社区的一员。这一观念实现主流化以后,很多后工业时代的做法将被过去的农业时代的传统所代替,人们的观念必须领先一步得到更新。

  (五)企业产业化
  在网络经济中,当市场份额增加到最大值时,该产品就成了市场的主导产品,制造该产品的企业就能创立完整的产业。企业就要最大限度地把自己的产品转变为产业的标准,否则该企业就会失去垄断市场的机会。发展一个产业与壮大一个公司有天壤之别,区别在于发展一个产业得到的回报比发展一件产品的回报更为丰厚;换言之,一家公司若是转变为一个产业,其价值就转化为一个“金矿”。例如,微软公司已发展成为一个产业,而苹果公司只停留在一家公司。微软公司的产业包括了本公司,外加成千上万个第三方开发商、合作伙伴及追随者,是最成功的例子。
    综上所述,网络经济条件下,经济运行和企业内外环境均发生了奇异的变化。企业只有密切注视并适应这种变化,采取不同于传统经济的竞争策略,才能在网络经济中生存和发展壮大。



[参考文献]
1、T.G.勒维斯[美],《非摩擦经济——网络时代的经济模式》,卞正东、王宇等译,南京,江苏人民出版社,1999.3;
2、马广奇,网络时代的投资银行,《资本市场杂志》2000.3;
3、 Ma Guangqi, The Financial Trends In the Network Times, Selected Proceeding-The First China and U.S. Advanced Workshop in Electronic Commerce 2001, Edited by Li Qi, Lin Zhongxi etc., Shaanxi People’s Publishing House, 2002.10。

类别: 无分类 |  评论(0) |  浏览(12399) |  收藏
2006年05月07日 09:27:30

增长最快 互联网广告冲击传统媒体商业模式

康卡斯特公司(Comcast Corp)首席执行官布莱恩罗伯茨(Brian Roberts)最近打趣说,这家美国最大的有线电视运营商的股票可以在股市一场“公司关门大甩卖”中淘到。
自那以后的两个月里,尽管公司营收与利润有增长,康卡斯特的股票价格已跌得更深。
  康卡斯特不是个别事例。过去5年里,媒体与通讯公司的股票表现一直不及大盘,同时现在也没有明显迹象说明情况在2006年会改变。原因倒不是它们当前的表现。对康卡斯特、时代华纳(Time Warner)和新闻集团(News Corp)等公司而言,公司增长仍然强劲,许多部门的利润比以往任何时候都要高。

  相反,投资人是在担心将来,尤其是担心,互联网使用的增加、媒体和通讯的数字化传播,将侵蚀有线电视、卫星、通讯与媒体集团的业务模式。目前,传统媒体产业的广告增长已经放缓或呈下滑态势,而互联网广告则增长最快。

  “总体上,市场似乎在传达这样的讯息,即这些业务模式正在改变,市场的感觉是威胁大于机遇,”私人股本公司四方集团(Quadrangle)的执行主合伙人斯蒂文&
8226;拉特纳(Steven Rattner)说。

  公司提升股价的努力包括大规模股票回购方案和进军互联网的战略转向,但迄今为止这些努力成效不大,投资者开始要求公司采取更多行动。随着股价表现继续差于大盘,他们的呼声预期会升高。

类别: 无分类 |  评论(0) |  浏览(12336) |  收藏
2006年05月07日 09:25:27

Javascript的IE和Firefox兼容性汇编

以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox。

document.form.item 问题

现有问题:
现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行

解决方法:
改用 document.formName.elements["elementName"]

集合类对象问题

现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。

解决方法:
改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]

window.event

现有问题:
使用 window.event 无法在 MF 上运行

解决方法:
MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:

原代码(可在IE中运行):

<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>
<script language="javascript">
  function gotoSubmit() {
    alert(window.event);   // use window.event
  }
</script>

新代码(可在IE和MF中运行):

<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>
<script language="javascript">
function gotoSubmit(evt) {
  evt = evt ? evt : (window.event ? window.event : null);
  alert(evt);         // use evt
}
</script>

此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。

HTML 对象的 id 作为对象名的问题

现有问题:
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。

解决方法:
用 getElementById("idName") 代替 idName 作为对象变量使用。

用idName字符串取得对象的问题

现有问题:
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。

解决方法:
用 getElementById(idName) 代替 eval(idName)。

变量名与某 HTML 对象 id 相同的问题

现有问题:
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。

解决方法:
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

event.x 与 event.y 问题

现有问题:
在IE 中,event 对象有 x, y 属性,MF中没有。

解决方法:
在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。

如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x

其它:
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。

关于frame

现有问题:
在 IE中 可以用window.testFrame取得该frame,mf中不行

解决方法:
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
<frame src="/xx.htm" id="frameId" name="frameName" />
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象

另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容

在mf中,自己定义的属性必须getAttribute()取得

父结点的问题

在mf中没有 parentElement parement.children 而用 parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和MF对parentNode的解释不同,例如

<form>
<table>
<input/>
</table>
</form>

MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

const 问题

现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。

解决方法:
不使用 const ,以 var 代替。

body 对象

MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在

url encoding

在js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&

nodeName 和 tagName 问题

现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。

解决方法:
使用 tagName,但应检测其是否为空。

元素属性

IE下 input.type属性为只读,但是MF下可以修改

document.getElementsByName() 和 document.all[name] 的问题

现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。

类别: 无分类 |  评论(4) |  浏览(13659) |  收藏
2006年05月07日 09:24:38

平面设计常用图像文件格式详解

平面设计中我们会接触到很多图像格式,可是你真正地了解它们吗?下面我们就平面设计中常见的图像格式为大家分别做简单介绍。
  BMP格式

  BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。
随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。所以,目前BMP在单机上比较流行。

  GIF格式

  GIF是英文Graphics Interchange Format(图形交换格式)的缩写。顾名思义,这种格式是用来交换图片的。事实上也是如此,上世纪80年代,美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出了这种GIF图像格式。

  GIF格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。 最初的GIF只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术发展,可以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D动画为数不多的格式之一(称为GIF89a),而在GIF89a图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF风光十足。目前Internet上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a格式文件。

  此外,考虑到网络传输中的实际情况,GIF图像格式还增加了渐显方式,也就是说,在图像传输过程中,用户可以先看到图像的大致轮廓,然后随着传输过程的继续而逐步看清图像中的细节部分,从而适应了用户的"从朦胧到清楚"的观赏心理。目前Internet上大量采用的彩色动画文件多为这种格式的文件。

  GIF格式只能保存最大8位色深的数码图像,所以它最多只能用256色来表现物体,对于色彩复杂的物体它就力不从心了。尽管如此,这种格式仍在网络上大行其道应用,这和GIF图像文件短小、下载速度快、可用许多具有同样大小的图像文件组成动画等优势是分不开的。

  JPEG格式

  JPEG也是常见的一种图像格式,它由联合照片专家组(Joint Photographic Experts Group)开发并以命名为"ISO 10918-1",JPEG仅仅是一种俗称而已。JPEG文件的扩展名为.jpg或.jpeg,其压缩技术十分先进,它用有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像质量。由于JPEG格式的压缩算法是采用平衡像素之间的亮度色彩来压缩的,因而更有利于表现带有渐变色彩且没有清晰轮廓的图像。

  同时JPEG还是一种很灵活的格式,具有调节图像质量的功能,允许你用不同的压缩比例对这种文件压缩,比如我们最高可以把1.37MB的BMP位图文件压缩至20.3KB。当然我们完全可以在图像质量和文件尺寸之间找到平衡点。

  由于JPEG优异的品质和杰出的表现,它的应用也非常广泛,特别是在网络和光盘读物上。目前各类浏览器均支持JPEG这种图像格式,因为JPEG格式的文件尺寸较小,下载速度快,使得Web页有可能以较短的下载时间提供大量美观的图像,JPEG同时也就顺理成章地成为网络上最受欢迎的图像格式。



  当使用JPEG格式保存图像时,Photoshop给出了多种保存选项,你可以选择用不同的压缩比例对JPEG文件进行压缩,即压缩率和图像质量都是可选的。

  JPEG2000格式

  JPEG 2000同样是由JPEG 组织负责制定的,它有一个正式名称叫做"ISO 15444",与JPEG相比,它具备更高压缩率以及更多新功能的新一代静态影像压缩技术。

  JPEG2000 作为JPEG的升级版,其压缩率比JPEG高约30%左右。与JPEG不同的是,JPEG2000 同时支持有损和无损压缩,而 JPEG 只能支持有损压缩。无损压缩对保存一些重要图片是十分有用的。JPEG2000的一个极其重要的特征在于它能实现渐进传输,这一点与GIF的"渐显"有异曲同工之妙,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图象由朦胧到清晰显示,而不必是像现在的 JPEG 一样,由上到下慢慢显示。

  此外,JPEG2000还支持所谓的"感兴趣区域"特性,你可以任意指定影像上你感兴趣区域的压缩质量,还可以选择指定的部份先解压缩。 JPEG 2000 和 JPEG 相比优势明显,且向下兼容,因此取代传统的JPEG格式指日可待。

  JPEG2000可应用于传统的JPEG市场,如扫描仪、数码相机等,亦可应用于新兴领域,如网路传输、无线通讯等等。

  TIFF格式

  TIFF(Tag Image File Format)是Mac中广泛使用的图像格式,它由Aldus和微软联合开发,最初是出于跨平台存储扫描图像的需要而设计的。它的特点是图像格式复杂、存贮信息多。正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。




  该格式有压缩和非压缩二种形式,其中压缩可采用LZW无损压缩方案存储。不过,由于TIFF格式结构较为复杂,兼容性较差,因此有时你的软件可能不能正确识别TIFF文件(现在绝大部分软件都已解决了这个问题)。目前在Mac和PC机上移植TIFF文件也十分便捷,因而TIFF现在也是微机上使用最广泛的图像文件格式之一。

  PSD格式

  这是著名的Adobe公司的图像处理软件Photoshop的专用格式Photoshop Document(PSD)。PSD其实是Photoshop进行平面设计的一张"草稿图",它里面包含有各种图层、通道、遮罩等多种设计的样稿,以便于下次打开文件时可以修改上一次的设计。在Photoshop所支持的各种图像格式中,PSD的存取速度比其它格式快很多,功能也很强大。

  PNG格式

  PNG(Portable Network Graphics)是一种新兴的网络图像格式。在1994年底,由于Unysis公司宣布GIF拥有专利的压缩方法,要求开发GIF软件的作者须缴交一定费用,由此促使免费的png图像格式的诞生。
PNG一开始便结合GIF及JPG两家之长,打算一举取代这两种格式。1996年10月1日由PNG向国际网络联盟提出并得到推荐认可标准,并且大部分绘图软件和浏览器开始支持PNG图像浏览,从此PNG图像格式生机焕发。

  PNG是目前保证最不失真的格式,它汲取了GIF和JPG二者的优点,存贮形式丰富,兼有GIF和JPG的色彩模式;它的另一个特点能把图像文件压缩到极限以利于网络传输,但又能保留所有与图像品质有关的信息,因为PNG是采用无损压缩方式来减少文件的大小,这一点与牺牲图像品质以换取高压缩率的JPG有所不同;它的第三个特点是显示速度很快,只需下载1/64的图像信息就可以显示出低分辨率的预览图像;第四,PNG同样支持透明图像的制作,透明图像在制作网页图像的时候很有用,我们可以把图象背景设为透明,用网页本身的颜色信息来代替设为透明的色彩,这样可让图像和网页背景很和谐地融合在一起。

  PNG的缺点是不支持动画应用效果,如果在这方面能有所加强,简直就可以完全替代GIF和JPEG了。Macromedia公司的Fireworks软件的默认格式就是PNG。现在,越来越多的软件开始支持这一格式,而且在网络上也越来越流行。

  CDR格式

CDR格式是著名绘图软件CorelDRAW的专用图形文件格式。由于CorelDRAW是矢量图形绘制软件,所以CDR可以记录文件的属性、位置和分页等。但它在兼容度上比较差,所有CorelDraw应用程序中均能够使用,但其他图像编辑软件打不开此类文件。

  SWF格式

  利用FLASH我们可以制作出一种后缀名为SWF(Shockwave Format)的动画,这种格式的动画图像能够用比较小的体积来表现丰富的多媒体形式。在图像的传输方面,不必等到文件全部下载才能观看,而是可以边下载边看,因此特别适合网络传输,特别是在传输速率不佳的情况下,也能取得较好的效果。事实也证明了这一点,SWF如今已被大量应用于WEB网页进行多媒体演示与交互性设计。此外,SWF动画是其于矢量技术制作的,因此不管将画面放大多少倍,画面不会因此而有任何损害。综上,SWF格式作品以其高清晰度的画质和小巧的体积,受到了越来越多网页设计者的青睐,也越来越成为网页动画和网页图片设计制作的主流,目前已成为网上动画的事实标准。

  SVG格式

  SVG可以算是目前最最火热的图像文件格式了,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有互交功能,并可以随时插入到HTML中通过浏览器来观看。

  它提供了目前网络流行格式GIF和JPEG无法具备了优势:可以任意放大图形显示,但绝不会以牺牲图像质量为代价;字在SVG图像中保留可编辑和可搜寻的状态;平均来讲,SVG文件比JPEG和GIF格式的文件要小很多,因而下载也很快。

  其它非主流图像格式:

  PCX格式

  PCX格式是ZSOFT公司在开发图像处理软件Paintbrush时开发的一种格式,这是一种经过压缩的格式,占用磁盘空间较少。由于该格式出现的时间较长,并且具有压缩及全彩色的能力,所以现在仍比较流行。

  DXF格式

  DXF(Autodesk Drawing Exchange Format)是AutoCAD中的矢量文件格式,它以ASCII码方式存储文件,在表现图形的大小方面十分精确。许多软件都支持DXF格式的输入与输出。

  WMF格式

  WMF(Windows Metafile Format)是Windows中常见的一种图元文件格式,属于矢量文件格式。它具有文件短小、图案造型化的特点,整个图形常由各个独立的组成部分拼接而成,其图形往往较粗糙。

  EMF格式

  EMF(Enhanced Metafile)是微软公司为了弥补使用WMF的不足而开发的一种Windows 32位扩展图元文件格式,也属于矢量文件格式,其目的是欲使图元文件更加容易接受

  LIC(FLI/FLC)格式

  Flic格式由Autodesk公司研制而成,FLIC是FLC和FLI的统称:FLI是最初的基于320×200分辨率的动画文件格式,而FLC则采用了更高效的数据压缩技术,所以具有比FLI更高的压缩比,其分辨率也有了不少提高。

  EPS格式

  EPS(Encapsulated PostScript)是PC机用户较少见的一种格式,而苹果Mac机的用户则用得较多。它是用PostScript语言描述的一种ASCII码文件格式,主要用于排版、打印等输出工作。

  TGA格式

  TGA(Tagged Graphics)文件是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有着很大影响,是计算机生成图像向电视转换的一种首选格式。

  PICT格式

PICT格式是在Mac机的QuickDraw屏幕语言基础上开发的,属于Mac机上使用的一种本机图像格式。如果Mac机上安装了QuickTime软件,就可以使用 JPEG压缩方式压缩 PICT图像。但是应该知道QuickTime格式的JPEG压缩可能要比常规的JPEG格式保存的文件更多地破坏你的图像。正因如此,保存成JPEG的文件在大多数情况下比 PICT文件更清晰。使用PICT格式的原因是能是让那些没有图像编辑软件的人们看到你的图像。你可以在SimpleText、微软的 word和其他字处理软件中打开PICT文件。

类别: 无分类 |  评论(3) |  浏览(12846) |  收藏
2006年05月07日 09:23:22

JavaScript实用的一些技巧、特效

1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复制
3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="return false;" 防止复制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标
7. <input style="ime-mode:disabled"> 关闭输入法




8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>

9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>

11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn...

12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>

14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一页的来源
javascript:
document.referrer

16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE


17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>

18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:

1 solid #000000"></textarea>

20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>


21.让弹出窗口总是在最上面:
<body onblur="this.focus();">

22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>

23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>

24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>

25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()

26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">

27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>

28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight

30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>


32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>

33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>

35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">

36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1

onerror=auto("http://"+autourl+&...}
run()</script>

37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize


38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种

39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">

40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。

类别: 无分类 |  评论(0) |  浏览(11798) |  收藏
« 1 2345» Pages: ( 1/5 total )