网站性能最佳体验-JavaScript和CSS

 更新时间:2016年10月10日 08:44  点击:1738

JavaScript和CSS
在第一部分和第二部分中我们分别介绍了改善网站性能中页面内容和服务器的几条守则,除此之外,JavaScript和CSS也是我们页面中经常用到的内容,对它们的优化也提高网站性能的重要方面:
CSS:
1.       把样式表置于顶部
2.       避免使用CSS表达式(Expression)
3.       使用外部JavaScript和CSS
4.       削减JavaScript和CSS
5.       用<link>代替@import
6.       避免使用滤镜
JavaScript
1.       把脚本置于页面底部
2.       使用外部JavaScript和CSS
3.       削减JavaScript和CSS
4.       剔除重复脚本
5.       减少DOM访问
6.       开发智能事件处理程序

17、把样式表置于顶部
      在研究Yahoo!的性能表现时,我们发现把样式表放到文档的<head />内部似乎会加快页面的下载速度。这是因为把样式表放到<head />内会使页面有步骤的加载显示。
      注重性能的前端服务器往往希望页面有秩序地加载。同时,我们也希望浏览器把已经接收到内容尽可能显示出来。这对于拥有较多内容的页面和网速较慢的用户来说特别重要。向用户返回可视化的反馈,比如进程指针,已经有了较好的研究并形成了正式文档。在我们的研究中HTML页面就是进程指针。当浏览器有序地加载文件头、导航栏、顶部的logo等对于等待页面加载的用户来说都可以作为可视化的反馈。这从整体上改善了用户体验。
      把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。
      HTML规范清楚指出样式表要放包含在页面的<head />区域内:“和<a />不同,<link />只能出现在文档的<head />区域内,尽管它可以多次使用它”。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文档<head />内加载你的样式表。

18、避免使用CSS表达式(Expression)
      CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:
      background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用,因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。
      表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。
      一个减少CSS表达式计算次数的方法就是使用一次性的表达式,它在第一次运行时将结果赋给指定的样式属性,并用这个属性来代替CSS表达式。如果样式属性必须在页面周期内动态地改变,使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。

19、使用外部JavaScript和CSS
      很多性能规则都是关于如何处理外部文件的。但是,在你采取这些措施前你可能会问到一个更基本的问题:JavaScript和CSS是应该放在外部文件中呢还是把它们放在页面本身之内呢?
      在实际应用中使用外部文件可以提高页面速度,因为JavaScript和CSS文件都能在浏览器中产生缓存。内置在HTML文档中的JavaScript和CSS则会在每次请求中随HTML文档重新下载。这虽然减少了HTTP请求的次数,却增加了HTML文档的大小。从另一方面来说,如果外部文件中的JavaScript和CSS被浏览器缓存,在没有增加HTTP请求次数的同时可以减少HTML文档的大小。
      关键问题是,外部JavaScript和CSS文件缓存的频率和请求HTML文档的次数有关。虽然有一定的难度,但是仍然有一些指标可以一测量它。如果一个会话中用户会浏览你网站中的多个页面,并且这些页面中会重复使用相同的脚本和样式表,缓存外部文件就会带来更大的益处。
      许多网站没有功能建立这些指标。对于这些网站来说,最好的坚决方法就是把JavaScript和CSS作为外部文件引用。比较适合使用内置代码的例外就是网站的主页,如Yahoo!主页和My Yahoo!。主页在一次会话中拥有较少(可能只有一次)的浏览量,你可以发现内置JavaScript和CSS对于终端用户来说会加快响应时 间。
      对于拥有较大浏览量的首页来说,有一种技术可以平衡内置代码带来的HTTP请求减少与通过使用外部文件进行缓存带来的好处。其中一个就是在首页中内置JavaScript和CSS,但是在页面下载完成后动态下载外部文件,在子页面中使用到这些文件时,它们已经缓存到浏览器了。

20、削减JavaScript和CSS
      精简是指从去除代码不必要的字符减少文件大小从而节省下载时间。消减代码时,所有的注释、不需要的空白字符(空格、换行、tab缩进)等都要去掉。在JavaScript中,由于需要下载的文件体积变小了从而节省了响应时间。精简JavaScript中目前用到的最广泛的两个工具是JSMin和YUI Compressor。YUI Compressor还可用于精简CSS。
      混淆是另外一种可用于源代码优化的方法。这种方法要比精简复杂一些并且在混淆的过程更易产生问题。在对美国前10大网站的调查中发现,精简也可以缩小原来代码体积的21%,而混淆可以达到25%。尽管混淆法可以更好地缩减代码,但是对于JavaScript来说精简的风险更小。
      除消减外部的脚本和样式表文件外,<script>和<style>代码块也可以并且应该进行消减。即使你用Gzip压缩过脚本和样式表,精简这些文件仍然可以节省5%以上的空间。由于JavaScript和CSS的功能和体积的增加,消减代码将会获得益处。

21、用<link>代替@import
      前面的最佳实现中提到CSS应该放置在顶端以利于有序加载呈现。
      在IE中,页面底部@import和使用<link>作用是一样的,因此最好不要使用它。

22、避免使用滤镜
      IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。
      完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

23、把脚本置于页面底部
      脚本带来的问题就是它阻止了页面的平行下载。HTTP/1.1 规范建议,浏览器每个主机名的并行下载内容不超过两个。如果你的图片放在多个主机名上,你可以在每个并行下载中同时下载2个以上的文件。但是当下载脚本时,浏览器就不会同时下载其它文件了,即便是主机名不相同。
      在某些情况下把脚本移到页面底部可能不太容易。比如说,如果脚本中使用了document.write来插入页面内容,它就不能被往下移动了。这里可能还会有作用域的问题。很多情况下,都会遇到这方面的问题。
      一个经常用到的替代方法就是使用延迟脚本。DEFER属性表明脚本中没有包含document.write,它告诉浏览器继续显示。不幸的是,Firefox并不支持DEFER属性。在Internet Explorer中,脚本可能会被延迟但效果也不会像我们所期望的那样。如果脚本可以被延迟,那么它就可以移到页面的底部。这会让你的页面加载的快一点。

24、剔除重复脚本
      在同一个页面中重复引用JavaScript文件会影响页面的性能。你可能会认为这种情况并不多见。对于美国前10大网站的调查显示其中有两家存在重复引用脚本的情况。有两种主要因素导致一个脚本被重复引用的奇怪现象发生:团队规模和脚本数量。如果真的存在这种情况,重复脚本会引起不必要的HTTP请求和无用的JavaScript运算,这降低了网站性能。
      在Internet Explorer中会产生不必要的HTTP请求,而在Firefox却不会。在Internet Explorer中,如果一个脚本被引用两次而且它又不可缓存,它就会在页面加载过程中产生两次HTTP请求。即时脚本可以缓存,当用户重载页面时也会产生额外的HTTP请求。
      除增加额外的HTTP请求外,多次运算脚本也会浪费时间。在Internet Explorer和Firefox中不管脚本是否可缓存,它们都存在重复运算JavaScript的问题。
      一个避免偶尔发生的两次引用同一脚本的方法是在模板中使用脚本管理模块引用脚本。在HTML页面中使用<script />标签引用脚本的最常见方法就是:
      <script type="text/javascript" src="menu_1.0.17.js"></script>
在PHP中可以通过创建名为insertScript的方法来替代:
      <?php insertScript("menu.js") ?>
为了防止多次重复引用脚本,这个方法中还应该使用其它机制来处理脚本,如检查所属目录和为脚本文件名中增加版本号以用于Expire文件头等。

25、减少DOM访问
      使用JavaScript访问DOM元素比较慢,因此为了获得更多的应该页面,应该做到:
•       缓存已经访问过的有关元素
•       线下更新完节点之后再将它们添加到文档树中
•       避免使用JavaScript来修改页面布局
      有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”。

26、开发智能事件处理程序
      有时候我们会感觉到页面反应迟钝,这是因为DOM树元素中附加了过多的事件句柄并且些事件句病被频繁地触发。这就是为什么说使用event delegation(事件代理)是一种好方法了。如果你在一个div中有10个按钮,你只需要在div上附加一次事件句柄就可以了,而不用去为每一个按钮增加一个句柄。事件冒泡时你可以捕捉到事件并判断出是哪个事件发出的。
      你同样也不用为了操作DOM树而等待onload事件的发生。你需要做的就是等待树结构中你要访问的元素出现。你也不用等待所有图像都加载完毕。
      你可能会希望用DOMContentLoaded事件来代替onload,但是在所有浏览器都支持它之前你可使用YUI 事件应用程序中的onAvailable方法。

1、尽量减少HTTP请求次数
      终端用户响应的时间中,有80%用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash等。通过减少页面中的元素可以减少HTTP请求的次数。这是提高网页速度的关键步骤。
      减少页面组件的方法其实就是简化页面设计。那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术。

合并文件是通过把所有的脚本放到一个文件中来减少HTTP请求的方法,如可以简单地把所有的CSS文件都放入一个样式表中。当脚本或者样式表在不同页面中使用时需要做不同的修改,这可能会相对麻烦点,但即便如此也要把这个方法作为改善页面性能的重要一步。

CSS Sprites是减少图像请求的有效方法。把所有的背景图像都放到一个图片文件中,然后通过CSS的background-image和background-position属性来显示图片的不同部分;

图片地图是把多张图片整合到一张图片中。虽然文件的总体大小不会改变,但是可以减少HTTP请求次数。图片地图只有在图片的所有组成部分在页面中是紧挨在一起的时候才能使用,如导航栏。确定图片的坐标和可能会比较繁琐且容易出错,同时使用图片地图导航也不具有可读性,因此不推荐这种方法;

内联图像是使用data:URL scheme的方法把图像数据加载页面中。这可能会增加页面的大小。把内联图像放到样式表(可缓存)中可以减少HTTP请求同时又避免增加页面文件的大小。但是内联图像现在还没有得到主流浏览器的支持。

     减少页面的HTTP请求次数是你首先要做的一步。这是改进首次访问用户等待时间的最重要的方法。如同Tenni Theurer的他的博客Browser Cahe Usage - Exposed!中所说,HTTP请求在无缓存情况下占去了40%到60%的响应时间。让那些初次访问你网站的人获得更加快速的体验吧!

2、减少DNS查找次数
        域名系统(DNS)提供了域名和IP的对应关系,就像电话本中人名和他们的电话号码的关系一样。当你在浏览器地址栏中输入www.example.com时,DNS解析服务器就会返回这个域名对应的IP地址。DNS解析的过程同样也是需要时间的。一般情况下返回给定域名对应的IP地址会花费20到120毫秒的时间。而且在这个过程中浏览器什么都不会做直到DNS查找完毕。

       缓存DNS查找可以改善页面性能。这种缓存需要一个特定的缓存服务器,这种服务器一般属于用户的ISP提供商或者本地局域网控制,但是它同样会在用户使用的计算机上产生缓存。DNS信息会保留在操作系统的DNS缓存中(微软Windows系统中DNS Client Service)。大多数浏览器有独立于操作系统以外的自己的缓存。由于浏览器有自己的缓存记录,因此在一次请求中它不会受到操作系统的影响。

      Internet Explorer默认情况下对DNS查找记录的缓存时间为30分钟,它在注册表中的键值为DnsCacheTimeout。Firefox对DNS的查找记录缓存时间为1分钟,它在配置文件中的选项为network.dnsCacheExpiration(Fasterfox把这个选项改为了1小时)。

      当客户端中的DNS缓存都为空时(浏览器和操作系统都为空),DNS查找的次数和页面中主机名的数量相同。这其中包括页面中URL、图片、脚本文件、样式表、Flash对象等包含的主机名。减少主机名的数量可以减少DNS查找次数。

      减少主机名的数量还可以减少页面中并行下载的数量。减少DNS查找次数可以节省响应时间,但是减少并行下载却会增加响应时间。我的指导原则是把这些页面中的内容分割成至少两部分但不超过四部分。这种结果就是在减少DNS查找次数和保持较高程度并行下载两者之间的权衡了。

3、避免跳转
跳转是使用301和302代码实现的。下面是一个响应代码为301的HTTP头:
      HTTP/1.1 301 Moved Permanently
      Location: http://example.com/newuri
      Content-Type: text/html
      浏览器会把用户指向到Location中指定的URL。头文件中的所有信息在一次跳转中都是必需的,内容部分可以为空。不管他们的名称,301和302响应都不会被缓存除非增加一个额外的头选项,如Expires或者Cache-Control来指定它缓存。<meat />元素的刷新标签和JavaScript也可以实现URL的跳转,但是如果你必须要跳转的时候,最好的方法就是使用标准的3XXHTTP状态代码,这主要是为了确保“后退”按钮可以正确地使用。

      但是要记住跳转会降低用户体验。在用户和HTML文档中间增加一个跳转,会拖延页面中所有元素的显示,因为在HTML文件被加载前任何文件(图像、Flash等)都不会被下载。

      有一种经常被网页开发者忽略却往往十分浪费响应时间的跳转现象。这种现象发生在当URL本该有斜杠(/)却被忽略掉时。例如,当我们要访问http://astrology.yahoo.com/astrology 时,实际上返回的是一个包含301代码的跳转,它指向的是http://astrology.yahoo.com/astrology/  (注意末尾的斜杠)。在Apache服务器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash来避免。

      连接新网站和旧网站是跳转功能经常被用到的另一种情况。这种情况下往往要连接网站的不同内容然后根据用户的不同类型(如浏览器类型、用户账号所属类型)来进行跳转。使用跳转来实现两个网站的切换十分简单,需要的代码量也不多。尽管使用这种方法对于开发者来说可以降低复杂程度,但是它同样降低用户体验。一个可替代方法就是如果两者在同一台服务器上时使用Alias和mod_rewrite和实现。如果是因为域名的不同而采用跳转,那么可以通过使用Alias或者mod_rewirte建立CNAME(保存一个域名和另外一个域名之间关系的DNS记录)来替代。

4、可缓存的AJAX
      Ajax经常被提及的一个好处就是由于其从后台服务器传输信息的异步性而为用户带来的反馈的即时性。但是,使用Ajax并不能保证用户不会在等待异步的JavaScript和XML响应上花费时间。在很多应用中,用户是否需要等待响应取决于Ajax如何来使用。例如,在一个基于Web的Email客户端中,用户必须等待Ajax返回符合他们条件的邮件查询结果。记住一点,“异步”并不异味着“即时”,这很重要。

      为了提高性能,优化Ajax响应是很重要的。提高Ajxa性能的措施中最重要的方法就是使响应具有可缓存性,具体的讨论可以查看Add an Expires or a Cache-Control Header。其它的几条规则也同样适用于Ajax:
    Gizp压缩文件
    减少DNS查找次数
    精简JavaScript
    避免跳转
    配置ETags

     让我们来看一个例子:一个Web2.0的Email客户端会使用Ajax来自动完成对用户地址薄的下载。如果用户在上次使用过Email web应用程序后没有对地址薄作任何的修改,而且Ajax响应通过Expire或者Cacke-Control头来实现缓存,那么就可以直接从上一次的缓存中读取地址薄了。必须告知浏览器是使用缓存中的地址薄还是发送一个新的请求。这可以通过为读取地址薄的Ajax URL增加一个含有上次编辑时间的时间戳来实现,例如,&t=11900241612等。如果地址薄在上次下载后没有被编辑过,时间戳就不变,则从浏览器的缓存中加载从而减少了一次HTTP请求过程。如果用户修改过地址薄,时间戳就会用来确定新的URL和缓存响应并不匹配,浏览器就会重要请求更新地址薄。
        即使你的Ajxa响应是动态生成的,哪怕它只适用于一个用户,那么它也应该被缓存起来。这样做可以使你的Web2.0应用程序更加快捷。

5、推迟加载内容
        你可以仔细看一下你的网页,问问自己“哪些内容是页面呈现时所必需首先加载的?哪些内容和结构可以稍后再加载?
        把整个过程按照onload事件分隔成两部分,JavaScript是一个理想的选择。例如,如果你有用于实现拖放和动画的JavaScript,那么它就以等待稍后加载,因为页面上的拖放元素是在初始化呈现之后才发生的。其它的例如隐藏部分的内容(用户操作之后才显现的内容)和处于折叠部分的图像也可以推迟加载
        工具可以节省你的工作量:YUI Image Loader可以帮你推迟加载折叠部分的图片,YUI Get utility是包含JS和 CSS的便捷方法。比如你可以打开Firebug的Net选项卡看一下Yahoo的首页。
        当性能目标和其它网站开发实践一致时就会相得益彰。这种情况下,通过程序提高网站性能的方法告诉我们,在支持JavaScript的情况下,可以先去除用户体验,不过这要保证你的网站在没有JavaScript也可以正常运行。在确定页面运行正常后,再加载脚本来实现如拖放和动画等更加花哨的效果。

6、预加载
        预加载和后加载看起来似乎恰恰相反,但实际上预加载是为了实现另外一种目标。预加载是在浏览器空闲时请求将来可能会用到的页面内容(如图像、样式表和脚本)。使用这种方法,当用户要访问下一个页面时,页面中的内容大部分已经加载到缓存中了,因此可以大大改善访问速度。

下面提供了几种预加载方法:
无条件加载:触发onload事件时,直接加载额外的页面内容。以Google.com为例,你可以看一下它的spirit image图像是怎样在onload中加载的。这个spirit image图像在google.com主页中是不需要的,但是却可以在搜索结果页面中用到它。
有条件加载:根据用户的操作来有根据地判断用户下面可能去往的页面并相应的预加载页面内容。在search.yahoo.com中你可以看到如何在你输入内容时加载额外的页面内容。
有预期的加载:载入重新设计过的页面时使用预加载。这种情况经常出现在页面经过重新设计后用户抱怨“新的页面看起来很酷,但是却比以前慢”。问题可能出在用户对于你的旧站点建立了完整的缓存,而对于新站点却没有任何缓存内容。因此你可以在访问新站之前就加载一部内容来避免这种结果的出现。在你的旧站中利用浏览器的空余时间加载新站中用到的图像的和脚本来提高访问速度。

7、减少DOM元素数量
        一个复杂的页面意味着需要下载更多数据,同时也意味着JavaScript遍历DOM的效率越慢。比如当你增加一个事件句柄时在500和5000个DOM元素中循环效果肯定是不一样的。
       大量的DOM元素的存在意味着页面中有可以不用移除内容只需要替换元素标签就可以精简的部分。你在页面布局中使用表格了吗?你有没有仅仅为了布局而引入更多的<div>元素呢?也许会存在一个适合或者在语意是更贴切的标签可以供你使用。
        YUI CSS utilities可以给你的布局带来巨大帮助:grids.css可以帮你实现整体布局,font.css和reset.css可以帮助你移除浏览器默认格式。它提供了一个重新审视你页面中标签的机会,比如只有在语意上有意义时才使用<div>,而不是因为它具有换行效果才使用它。
      DOM元素数量很容易计算出来,只需要在Firebug的控制台内输入:
document.getElementsByTagName('*').length
        那么多少个DOM元素算是多呢?这可以对照有很好标记使用的类似页面。比如Yahoo!主页是一个内容非常多的页面,但是它只使用了700个元素(HTML标签)。

8、根据域名划分页面内容
      把页面内容划分成若干部分可以使你最大限度地实现平行下载。由于DNS查找带来的影响你首先要确保你使用的域名数量在2个到4个之间。例如,你可以把用到的HTML内容和动态内容放在www.example.org上,而把页面各种组件(图片、脚本、CSS)分别存放在statics1.example.org和statics.example.org上。
你可在Tenni Theurer和Patty Chi合写的文章Maximizing Parallel Downloads in the Carpool Lane找到更多相关信息。

9、使iframe的数量最小
      ifrmae元素可以在父文档中插入一个新的HTML文档。了解iframe的工作理然后才能更加有效地使用它,这一点很重要。
<iframe>优点:
•       解决加载缓慢的第三方内容如图标和广告等的加载问题
•       Security sandbox
•       并行加载脚本
<iframe>的缺点:
•       即时内容为空,加载也需要时间
•       会阻止页面加载
•       没有语意

10、不要出现404错误
      HTTP请求时间消耗是很大的,因此使用HTTP请求来获得一个没有用处的响应(例如404没有找到页面)是完全没有必要的,它只会降低用户体验而不会有一点好处。
      有些站点把404错误响应页面改为“你是不是要找***”,这虽然改进了用户体验但是同样也会浪费服务器资源(如数据库等)。最糟糕的情况是指向外部JavaScript的链接出现问题并返回404代码。首先,这种加载会破坏并行加载;其次浏览器会把试图在返回的404响应内容中找到可能有用的部分当作JavaScript代码来执行。

微软对搜索引擎市场这块蛋糕早已虎视眈眈垂涎三尺,看到谷歌、雅虎、百度等其他搜索日益成熟壮大,的确心急如焚,05年微软推出了MSN搜索,06年改成“Windows Live搜索”,都不是很成功,08年微软提出以446亿美元现金加股票的价格收购雅虎,最后不了了之,最终痛定思痛选择了自主研发搜索引擎,也就是我们今时今日看到的Bing,中文名称定为“必应”,与微软全球搜索品牌Bing同步,追求“快乐搜索,有问必应”的快乐搜索体验目标。

  微软的搜索引擎市场一路走来,真可谓孜孜不倦锲而不舍,道路肯定是曲折了,前途是不是光明的,就只有让我拭目以待了!财大气粗的微软为Bing的推广投入近1亿美元巨资,不难想见其在搜索引擎分一杯羹的决心了,我们站长的喜怒哀乐,当然和搜索引擎藕断丝连,今天简单分析一下必应和百度google的一些差别,希望抛砖引玉,期待更多高手专家深入分析,给我们站长进一步优化好网站提供参考和帮助。

  外观排版:

  √ 第一眼看到新版必应(bing.com)大家都难免被其精美的背景所吸引,不像百度google都是最简单的白色背景,而是一幅精美照片,并且定期更换,后来在背景图上还增加了四个链接,关于该背景图内容的,鼠标滑过会出现提示,比较有新鲜感,点击这些链接的话,就会跳到相关搜索结果了。在页面底部还有三个连接,分别是:“今日图片故事”、“喜欢这张图片吗?”、“走进历史看今天”,这可能是必应追求的快乐搜索的体现之一吧,当然,个人认为搜索引擎还是简洁一点好,简单一样可以快乐。

  √ 首页没有高级搜索链接,必须搜索之后,才能看到“高级”字样,百度和google首页都直接显示“高级”字样的搜索链接。

  √ 高级搜索时候,不像百度和google都跳转到新页面,必应是在原搜索页面上增加一个三项搜索设置:搜索条件、站点(域)、语言

  √ 必应是在网页左侧出现“相关搜索”,而百度、google都是出现在在搜索结果的底部

  √ 必应左侧搜索结果中,赞助商广告和google类似,有左侧和右侧之分,赞助商链接最多显示两条,右侧赞助商链接最多可以显示10个

  √ 必应在搜索结果网页右侧显示“相关网站”,比如搜索“新浪”,搜索结果右侧会出现相关网站:搜狐 腾讯网 网易 新华网,一旦当右侧出现相关网站的时候,必应还会出现排版错误:最底部的“© 2009 Microsoft | 隐私声明 | 使用条款 | 广告 | 帮助 | 反馈”会移到页面中间。在火狐Firefox中显示正常,倒是在自己的IE7中显示有问题,有那么一点墙里种花墙外香的感觉。

  √ 必应默认搜索结果显示5页,百度和google主流搜索引擎都是10页,在点击到第五页的时候,会自动出现9页结果,这一点谢科个人感觉有点吃咸鱼蘸酱油-多此一举。

  √ 根据搜索的关键词不同,必应搜索结果左侧页面自动出现有“资讯”“视频”相关搜索链接,这个类似百度是在搜索框上方,“新闻 网页 贴吧 知道 MP3 图片 视频”的快捷搜索链接,没有百度方便,google则在网页左上角,类似百度。

  搜索结果:

  √ 必应和google一样,都没有显示快照的更新时间,只是直接显示一个“缓存页”链接

  √ 和google一样,没有在搜索结果中搜索,百度有“在结果中找”的按钮

  √ 必应的智能纠错,有点先斩后奏的感觉。比如搜索关键词“无限鼠标”会自动显示“无线鼠标”类似结果,但搜索框下面会有提示让用户选择:“包括 无线鼠标 的搜索结果”、“仅显示 无限鼠标 的搜索结果”百度google都会有提示:您是不是要找:“无线鼠标”。

  √ 必应收录结果比百度google少很多,共 552 条,比如以落伍为例:site:im286.com,百度收录了一百多万,google收录了两百多万,而必应只收录了20万。同样:site:www.sina.com.cn,百度google都有几千条结果,必应只有五百多条。

  √ 与色字相关内容讳莫如深,即使搜索像“丝袜”、“”这样不是很雅观的内容,百度google都是有结果的,必应则是一片空白,并明确提示:搜索“丝袜”可能会返回色情内容。要获得搜索结果,请更改搜索文字。联系到传闻必应测试时候被指没有做好屏蔽,什么都能搜出来,而受到gov处罚,也就不难理解了,但感觉有点矫枉过正因噎废食了

网站盈利模式的设计,新手站长最好在网站建立之初就设计好,因为只有你知道网站怎么赚钱,向哪个方向前进,才会少走弯路,节省大量浪费。

  当有了一个盈利模式的规划,那么其他的规划就可以围绕着这个中心来完成,比如,那些是最有价值的目标用户群,怎么吸引他们,怎么留住他们,围绕他们的需求开展哪些业务,网站用什么方式推广给他们,用什么模式来开展业务,预期投入与利润是多少?

  因为,有一点很模糊,以后的运营都会模糊。以前的竞争不够激烈,所以,那个时候的环境允许了很多网站去探索、去尝试、去走弯路,包括腾讯,还有几大门户网站,大多走了很多弯路,才找到盈利模式。

  网站如同人,仅靠输血维持生命的人是不健康的,同样,不能自我“造血”的网站就是不健康的网站。

  网站盈利状况是网站运营状况的最重要指标,网站盈利模式设计是网站运营机制设计的根本一环,网站盈利模式创新就是互联网创新的排头兵,盈利模式雷同而缺乏创新是危险的;比如同类领先网站采用流量+广告盈利模式,而你做为后来者,同样采用流量+广告盈利,那么,在盈利模式上,你就输在了起跑线上。

  举个简单的例子:[WIKI]web2.0的先进理念为什么不能移入到盈利模式的设计中来?让网站盈利不仅仅是网站的关注重点,而成为每位用户关注的重点和动力,基于这个理念来设计盈利模式,那么,还会有很多创新的模式出来。

一个网站如果想赚钱并不是件容易的事,首先我们要准备好、做好了,才能会有收获。我们做到了,也许回报自然就会来了。天道酬勤嘛!不要急于求成,做网站也是要有坚持的信念、耐得住寂寞的心态。但是当我们收获的时候你会感觉那些时间和精力都没有白费

 

一、做网站的目的:

  网站,我们已经并不陌生了,面对五花八门的网站,我们总是眼花缭乱的。总有看不尽的内容和新奇的东东。总想,我自己有这样一个网站该有多好。但是,如果要做一个自己的网站,那首先要明确做网站的目的,是爱好、想赚钱、想出名……,也许这些问题没有想过,只想做个好玩,那趁早放弃这种想法,做网站并不是件轻松的事,不光要投入很多的时间和精力(有多少做网站的都凌晨才睡,为了提供最新的信息和内容),还要投入资金(虽然不多,但是那也是钱啊,买个域名和空间得需要钱吧,按市场价格,这两项加起来也要400-600元不等),还有程序的技术攻克(虽然现在有很多免费的免费程序,但最好懂些代码,求人不如求己),所以一定要考虑更多、更多的问题,要不那浪费的只能是自己的时间和精力。

  二、主要针对的行业:

  当我们着手做一个网站的时候,首先想到这个网站是做什么的,是娱乐的、行业的、学习的、收藏的、下载的、免费资源的等。首先要明确网站的性质和行业,这样才有利于以后网站的发展,要不然以后再改,很浪费时间和精力、金钱。虽然有些网站经过不断的摸索最后才能确立方向和目标,但是开始有个思路、方向,对于以后的路更健康的走,会起到很重要的作用。

  三、网站内容规划:

  网站框架已经搭起来了,不要急于先添加内容。我们先要明确几个问题,我们该如何规划好自己的内容,吸引更多的读者和用户?开始的时候可以多看(看些大的网站,看看别人的布局和规划,研究一下,为什么要这样做,这样做的道理),多了解(了解行业的信息和相关资讯,这样有利于以后网站的主体内容方向)。切忌不要把网站页面弄的五花八门,什么都有,一应俱全;要体现专业,尽量少放或不放与网站无关的内容和图片,这样会影响网站给用户的感觉。页面简洁、布局合理、功能互通。

  四、是否有充分的资源:

  如果我们做的是行业性或专业性网站,那么要考虑主要的内容来源,是自己做还是靠收集,从什么地方收集,自己是否有可利用的资源,比如朋友、同事、亲戚、同行业人士等。有这个行业的资源,那么对于未来网站的发展会起到至关重要的作用。这也许就是你网站致胜的法宝。一定要利用好这些资源。

  五、主要服务人群:

  我们做的网站主要是给谁看的?这个问题也比较关键,费了很大劲做好了网站,没有人来,或是来的都是过路客,怎么办?那我们要找问题的根源,我们网站提供的是什么内容,有哪些人会来看,要深深的研究一下,如果我们做的是房产网,那青少年可能就对这个不敢兴趣,上班族或是要买房子的、卖房子的人才是我们的服务的主要人群。

  六、网站的营销推广策略:

  一个网站的成功,与营销推广是分不开的。只有好的营销和推广方案,才能使网站快速的前进,否则只有原地踏步;由于我们刚建站可能还请不起专业的营销公司来做推广,又不想花费太多的金钱在这方面,那我们可以自己动手来慢慢的解决这个问题,现在也有很多的免费推广渠道,只要坚持做、多花点时间在这上面,效果还是有的。比如:论坛发帖、博客新闻、SNS朋友互传啊(开心网、人人网、校内网)、qq空间、飞信空间、MSN空间、广告互换、链接交换、活动参与、论坛签名等等,还有些免费发布新闻的网站,我们可以写些软性文章宣传网站;关于宣传的方法还有很多,这在平时的实际操作中会体会到。

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • 关于JavaScript中name的意义冲突示例介绍

    在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • javascript自定义的addClass()方法

    复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
  • JavaScript中的this关键字使用方法总结

    在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
  • 详解javascript数组去重问题

    首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
  • javascript的事件触发器介绍的实现

    事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • ActiveX控件与Javascript之间的交互示例

    1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
  • 详解JavaScript操作HTML DOM的基本方式

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
  • JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
  • 跟我学习javascript的最新标准ES6

    虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • 浅谈TypeScript 索引签名的理解

    这篇文章主要给大家分享的是TypeScript 索引签名的理解,索引签名由方括号中的索引名称及其类型组成,后面是冒号和值类型:{ [indexName: KeyType]: ValueType }, KeyType 可以是一个 string、number 或 symbol,而ValueType 可以是任何类型,下面就俩简单了解一下吧...2021-10-15
  • JavaScript学习笔记整理_setTimeout的应用

    下面小编就为大家带来一篇JavaScript学习笔记整理_setTimeout的应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-03
  • JavaScript操作URL的相关内容集锦

    ---恢复内容开始---1.location.href.....(1)self.loction.href="http://www.cnblogs.com/url" window.location.href="http://www.cnblogs.com/url" 以上两个用法相同均为在当前页面打开URL页面 (2)this.locati...2015-10-30
  • javascript实现tab切换的四种方法

    tab切换在网页中很常见,故最近总结了4种实现方法。 首先,写出tab的框架,加上最简单的样式,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style> *{ pa...2015-11-08