xml地图|网站地图|网站标签 [设为首页] [加入收藏]
开发者须知,HTML5可成为Web移动应用的解决方案
分类:web前端

开发者须知 HTML5 的15个新特性

2012/02/22 · HTML5 · HTML5

英文原文:15-html5-new-features-you-must-know,翻译:CSDN

HTML5想必大家都很熟悉了,因为太多的媒体在讨论这一技术。然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性。

一起来看下:1.新的文档类型  (New Doctype)


目前许多网页还在使用XHTML 1.0 并且要在第一行像这样
声明文档类型:

XHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";

1
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

在HTML5中,上面那种声明方式将失效。下面是HTML5中的声明方式:

XHTML

<!DOCTYPE html>

1
<!DOCTYPE html>

2.脚本和链接无需type  (No More Types for Scripts and Links)

在HTML4或XHTML中,你需要用下面的几行代码来给你的网页添加CSS和JavaScript文件。

XHTML

<link rel="stylesheet" href="path/to/stylesheet.css" type="text/css" /> <script type="text/javascript" src="path/to/script.js"></script>

1
2
<link rel="stylesheet" href="path/to/stylesheet.css" type="text/css" />
<script type="text/javascript" src="path/to/script.js"></script>

而在HTML5中,你不再需要指定类型属性。因此,代码可以简化如下:

XHTML

<link rel="stylesheet" href="path/to/stylesheet.css" /> <script src="path/to/script.js"></script>

1
2
<link rel="stylesheet" href="path/to/stylesheet.css" />
<script src="path/to/script.js"></script>

3.语义Header和Footer (The Semantic Header and Footer)

在HTML4或XHTML中,你需要用下面的代码来声明“Header”和“Footer”。

XHTML

<div id="header"> ... </div> .......... <div id="footer"> ... </div>

1
2
3
4
5
6
7
<div id="header">
...
</div>
..........
<div id="footer">
...
</div>

在HTML5中,有两个可以替代上述声明的元素,这可以使代码更简洁。

XHTML

<header> ... </header> <footer> ... </footer>

1
2
3
4
5
6
<header>
...
</header>
<footer>
...
</footer>

4.Hgroup

在HTML5中,有许多新引入的元素,hgroup就是其中之一。假设我的网站名下面紧跟着一个子标题,我可以用<h1>和<h2>标签来分别定义。然而,这种定义没有说明这两者之间的关系。而且,h2标签的使用会带来更多问题,比如该页面上还有其他标题的时候。

在HTML5中,我们可以用hgroup元素来将它们分组,这样就不会影响文件的大纲。

XHTML

<header> <hgroup> <h1> Recall Fan Page </h1> <h2> Only for people who want the memory of a lifetime. </h2> </hgroup> </header>

1
2
3
4
5
6
<header>
<hgroup>
  <h1> Recall Fan Page </h1>
  <h2> Only for people who want the memory of a lifetime. </h2>
</hgroup>
</header>

5.标记元素 (Mark Element)

你可以把它当做高亮标签。被这个标签修饰的字符串应当和用户当前的行动相关。比如说,当我在某博客中搜索“Open your Mind”时,我可以利用一些JavaScript将出现的词组用<mark>修饰一下。

XHTML

<h3> Search Results </h3> <p> They were interrupted, just after Quato said, <mark>"Open your Mind"</mark>. </p>

1
2
<h3> Search Results </h3>
<p> They were interrupted, just after Quato said, <mark>"Open your Mind"</mark>. </p>

6.图形元素 (Figure Element)

在HTML4或XHTML中,下面的这些代码被用来修饰图片的注释。

XHTML

<img src="path/to/image" alt="About image" /> <p>Image of Mars. </p>

1
2
<img src="path/to/image" alt="About image" />
<p>Image of Mars. </p>

然而,上述代码没有将文字和图片内在联系起来。因此,HTML5引入了<figure>元素。当和<figcaption>结合起来后,我们可以语义化地将注释和相应的图片联系起来。

XHTML

<figure> <img src="path/to/image" alt="About image" /> <figcaption> <p>This is an image of something interesting. </p> </figcaption> </figure>

1
2
3
4
5
6
<figure>
<img src="path/to/image" alt="About image" />
<figcaption>
  <p>This is an image of something interesting. </p>
</figcaption>
</figure>

7.重新定义<small> (Small Element redefined)

在HTML4或XHTML中,<small>元素已经存在。然而,却没有如何正确使用这一元素的完整说明。在HTML5中,<small>被用来定义小字。试想下你网站底部的版权状态,根据对此元素新的HTML5定义,<small>可以正确地诠释这些信息。

8.占位符 (Placeholder)

在HTML4或XHTML中,你需要用JavaScript来给文本框添加占位符。比如,你可以提前设置好一些信息,当用户开始输入时,文本框中的文字就消失。

而在HTML5中,新的“placeholder”就简化了这个问题。

9.必要属性 (Required Attribute)

HTML5中的新属性“required”指定了某一输入是否必需。有两种方法声明这一属性。

XHTML

<input type="text" name="someInput" required> <input type="text" name="someInput" required="required">

1
2
<input type="text" name="someInput" required>
<input type="text" name="someInput" required="required">

当文本框被指定必需时,如果空白的话表格就不能提交。下面是一个如何使用的例子。

XHTML

<form method="post" action=""> <label for="someInput"> Your Name: </label> <input type="text" id="someInput" name="someInput" placeholder="Douglas Quaid" required> <button type="submit">Go</button> </form>

1
2
3
4
5
<form method="post" action="">
<label for="someInput"> Your Name: </label>
<input type="text" id="someInput" name="someInput" placeholder="Douglas Quaid" required>
<button type="submit">Go</button>
</form>

在上面那个例子中,如果输入内容空且表格被提交,输入框将被高亮显示。

10.Autofocus 属性 (Autofocus Attribute)

同样,HTML5的解决方案消除了对JavaScript的需要。如果一个特定的输入应该是“选择”或聚焦,默认情况下,我们现在可以利用自动聚焦属性。

XHTML

<input type="text" name="someInput" placeholder="Douglas Quaid" required autofocus>

1
<input type="text" name="someInput" placeholder="Douglas Quaid" required autofocus>

11.Audio 支持 (Audio Support)

目前我们需要依靠第三方插件来渲染音频。然而在HTML5中,<audio>元素被引进来了。

XHTML

<audio autoplay="autoplay" controls="controls"> <source src="file.ogg" /> <source src="file.mp3" /> <a href="file.mp3">Download this file.</a> </audio>

1
2
3
4
5
<audio autoplay="autoplay" controls="controls">
     <source src="file.ogg" />
     <source src="file.mp3" />
     <a href="file.mp3">Download this file.</a>
</audio>

当使用<audio>元素时请记得包含两种音频格式。FireFox想要.ogg格式的文件,而Webkit浏览器则需要.mp3格式的。和往常一样,IE是不支持的,且Opera 10及以下版本只支持.wav格式。

12.Video 支持 (Video Support)

HTML5中不仅有<audio>元素,而且还有<video>。然而,和<audio>类似,HTML5中并没有指定视频解码器,它留给了浏览器来决定。虽然Safari和Internet Explorer9可以支持H.264格式的视频,Firefox和Opera是坚持开源Theora 和Vorbis格式。因此,指定HTML5的视频时,你必须提供这两种格式。

XHTML

<video controls preload> <source src="cohagenPhoneCall.ogv" type="video/ogg; codecs='vorbis, theora'" /> <source src="cohagenPhoneCall.mp4" type="video/mp4; 'codecs='avc1.42E01E, mp4a.40.2'" /> <p> Your browser is old. <a href="cohagenPhoneCall.mp4">Download this video instead.</a> </p> </video>

1
2
3
4
5
<video controls preload>
<source src="cohagenPhoneCall.ogv" type="video/ogg; codecs='vorbis, theora'" />
<source src="cohagenPhoneCall.mp4" type="video/mp4; 'codecs='avc1.42E01E, mp4a.40.2'" />
<p> Your browser is old. <a href="cohagenPhoneCall.mp4">Download this video instead.</a> </p>
</video>

13.视频预载 (Preload attribute in Videos element)

当用户访问页面时这一属性使得视频得以预载。为了实现这个功能,可以在<video>元素中加上preload=”preload”或者只是preload。

XHTML

<video preload>

1
<video preload>

14.显示控制条 (Display Controls)

如果你使用过上面的每一个提到的技术点,你可能已经注意到,使用上面的代码,视频仅仅显示的是张图片,没有控制条。为了渲染出播放控制条,我们必须在video元素内指定controls属性。

XHTML

<video preload controls>

1
<video preload controls>

15.正规表达式 (Regular Expressions)

在HTML4或XHTML中,你需要用一些正规表达式来验证特定的文本。而HTML5中新的pattern属性让我们能够在标签处直接插入一个正规表达式。

XHTML

<form action="" method="post"> <label for="username">Create a Username: </label> <input type="text" name="username" id="username" placeholder="4 <> 10" pattern="[A-Za-z]{4,10}" autofocus required> <button type="submit">Go </button> </form>

1
2
3
4
5
6
7
8
9
10
11
<form action="" method="post">
<label for="username">Create a Username: </label>
    <input type="text"
    name="username"
    id="username"
    placeholder="4 <> 10"
    pattern="[A-Za-z]{4,10}"
    autofocus
    required>
<button type="submit">Go </button>
</form>

结论

事实上,还有很多新元素和特性,上面提到的只是一些我认为网站开发中常用的,剩下的就由你们自己去摸索啦。

 

赞 1 收藏 评论

图片 1

前端性能与异常上报

2018/08/22 · 基础技术 · 性能

原文出处: counterxing   

HTML5可成为Web移动应用的解决方案,但能否胜任呢?

2011/08/11 · HTML5 · HTML5

本文转载自雷锋网。

HTML5在改变着开发商开发移动Web程序的方式。但是,其却不能成为移动业务发展的终结。如果是的话,那么就不会存在“我应该为自己的服务开发本地应用还是Web应用?”这样的发问——Web应用会赢的。在pinch/zoom(一家为全球大牌开发移动应用的开发商),一直在研究怎么执行 HTML5语言并提出了一个有趣的问题“HTML能成为解决方案,但它能否胜任呢?”

简洁的回答是可以。但不如许多开发商想象得那么容易。

Brian Fling, pinch/zoom的开发商及一本写移动程序发展的畅销书作者,尝试回答这个问题。在pinch/zoom 的博客Swipe的一个帖子里,Fling讨论了“一个HTML5移动程序的支解”及开发商需要什么来开始他们的开发,陷阱是什么及为什么HTML5如此的难?

HTML5很像HTML,只是更加的先进。Fling说“如果你懂得HTML,你就会在一小时内明白HTML5新颖的地方在哪里。”但是,他说,没有了JavasCript及CSS,HTML5几乎什么也不是。设备探测,离线数据,JavasCript工具,测试,调制及主题都是需要用已有的工具解决的问题。

图片 2

其中一个最大的挑战是开发商需要完全理解Java语言。那是从基本的代码开始往上走起。Fling说很多开发商如果没有了如 Prototype, MooTools, jQuery或是Scriptaculous这样的框架帮助,他们就不会编写Java描述语言。如果一个程序有的仅是功能及主题,这并不是很大的问题。但是程序的数据需求及支持多种设备的需求要用HTML5的代码编写的话,那就代表着如果开发商不知道要怎么用 Java描述语言,要故障检测一个Web程序会是非常困难的。

Fling把需要建立HTML5程序的Java描述语言堆分成三块–合成描述语言,核心语言及设备语言。

接下来的是CSS语言。Fling把CSS语言和车的制造,倒模,内观制造及细节考察作了类比。

“Java描述语言肯定也会影响我们的思维,但是他们是潜伏的。”Fling写道。“我们需要它,但作为一个高端设备的粉丝,我可以告诉你–这种在后台的力量不能代表使用它会是强大的体验。”

“HTML能成为解决方案,但它能否胜任呢?”Fling的回答是肯定的,但是给出了以下警告:

  • 预备其需时。要料想到它可能比你以往的其他项目更耗时间。
  • 合理预算。这可不是一个网站,会让你花费多很多。
  • 确认你有合适的人才在你的团队里。如果解决这些问题对于世界上数一数二每天都在操作的专家来说都是困难的,预备好它对你们的团队来说也会是困难的。
  • 不存在“工具”。你需要自己建立工具。
  • 要考虑你所有的可能的选择。一个对待科技非常教条的方法就是一定要花不必花的钱。在移动业务里没有正误。对你顾客所需要的要持开放态度。

 

赞 收藏 评论

图片 3

概述

对于后台开发来说,记录日志是一种非常常见的开发习惯,通常我们会使用try...catch代码块来主动捕获错误、对于每次接口调用,也会记录下每次接口调用的时间消耗,以便我们监控服务器接口性能,进行问题排查。

刚进公司时,在进行Node.js的接口开发时,我不太习惯每次排查问题都要通过跳板机登上服务器看日志,后来慢慢习惯了这种方式。

举个例子:

JavaScript

/** * 获取列表数据 * @parma req, res */ exports.getList = async function (req, res) { //获取请求参数 const openId = req.session.userinfo.openId; logger.info(`handler getList, user openId is ${openId}`); try { // 拿到列表数据 const startTime = new Date().getTime(); let res = await ListService.getListFromDB(openId); logger.info(`handler getList, ListService.getListFromDB cost time ${new Date().getTime() - startDate}`); // 对数据处理,返回给前端 // ... } catch(error) { logger.error(`handler getList is error, ${JSON.stringify(error)}`); } };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 获取列表数据
* @parma req, res
*/
exports.getList = async function (req, res) {
    //获取请求参数
    const openId = req.session.userinfo.openId;
    logger.info(`handler getList, user openId is ${openId}`);
 
    try {
        // 拿到列表数据
        const startTime = new Date().getTime();
        let res = await ListService.getListFromDB(openId);
        logger.info(`handler getList, ListService.getListFromDB cost time ${new Date().getTime() - startDate}`);
        // 对数据处理,返回给前端
        // ...
    } catch(error) {
        logger.error(`handler getList is error, ${JSON.stringify(error)}`);
    }
};

以下代码经常会出现在用Node.js的接口中,在接口中会统计查询DB所耗时间、亦或是统计RPC服务调用所耗时间,以便监测性能瓶颈,对性能做优化;又或是对异常使用try ... catch主动捕获,以便随时对问题进行回溯、还原问题的场景,进行bug的修复。

而对于前端来说呢?可以看以下的场景。

最近在进行一个需求开发时,偶尔发现webgl渲染影像失败的情况,或者说影像会出现解析失败的情况,我们可能根本不知道哪张影像会解析或渲染失败;又或如最近开发的另外一个需求,我们会做一个关于webgl渲染时间的优化和影像预加载的需求,如果缺乏性能监控,该如何统计所做的渲染优化和影像预加载优化的优化比例,如何证明自己所做的事情具有价值呢?可能是通过测试同学的黑盒测试,对优化前后的时间进行录屏,分析从进入页面到影像渲染完成到底经过了多少帧图像。这样的数据,可能既不准确、又较为片面,设想测试同学并不是真正的用户,也无法还原真实的用户他们所处的网络环境。回过头来发现,我们的项目,虽然在服务端层面做好了日志和性能统计,但在前端对异常的监控和性能的统计。对于前端的性能与异常上报的可行性探索是有必要的。

异常捕获

对于前端来说,我们需要的异常捕获无非为以下两种:

  • 接口调用情况;
  • 页面逻辑是否错误,例如,用户进入页面后页面显示白屏;

对于接口调用情况,在前端通常需要上报客户端相关参数,例如:用户OS与浏览器版本、请求参数(如页面ID);而对于页面逻辑是否错误问题,通常除了用户OS与浏览器版本外,需要的是报错的堆栈信息及具体报错位置。

异常捕获方法

全局捕获

可以通过全局监听异常来捕获,通过window.onerror或者addEventListener,看以下例子:

JavaScript

window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) { console.log('errorMessage: ' + errorMessage); // 异常信息 console.log('scriptURI: ' + scriptURI); // 异常文件路径 console.log('lineNo: ' + lineNo); // 异常行号 console.log('columnNo: ' + columnNo); // 异常列号 console.log('error: ' + error); // 异常堆栈信息 // ... // 异常上报 }; throw new Error('这是一个错误');

1
2
3
4
5
6
7
8
9
10
window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) {
  console.log('errorMessage: ' + errorMessage); // 异常信息
  console.log('scriptURI: ' + scriptURI); // 异常文件路径
  console.log('lineNo: ' + lineNo); // 异常行号
  console.log('columnNo: ' + columnNo); // 异常列号
  console.log('error: ' + error); // 异常堆栈信息
  // ...
  // 异常上报
};
throw new Error('这是一个错误');

图片 4

通过window.onerror事件,可以得到具体的异常信息、异常文件的URL、异常的行号与列号及异常的堆栈信息,再捕获异常后,统一上报至我们的日志服务器。

亦或是,通过window.addEventListener方法来进行异常上报,道理同理:

JavaScript

window.addEventListener('error', function() { console.log(error); // ... // 异常上报 }); throw new Error('这是一个错误');

1
2
3
4
5
6
window.addEventListener('error', function() {
  console.log(error);
  // ...
  // 异常上报
});
throw new Error('这是一个错误');

图片 5

try… catch

使用try... catch虽然能够较好地进行异常捕获,不至于使得页面由于一处错误挂掉,但try ... catch捕获方式显得过于臃肿,大多代码使用try ... catch包裹,影响代码可读性。

常见问题

本文由澳门新葡亰手机版发布于web前端,转载请注明出处:开发者须知,HTML5可成为Web移动应用的解决方案

上一篇:HTML也可以静态编译,JSON简介以及用法汇总 下一篇:没有了
猜你喜欢
热门排行
精彩图文