构建现代化网站的 20 个技巧

英文原文:20 tips for building modern sites

参与翻译:


在过去几年中,我们与web开发者花了很多时间交流,听得最多的一件事情就是创建一个能很好的跨越各种类型浏览器版本与各种设备的网站有多么难。我们为jQuery项目写代码的时候一直有这个问题。因此我们整理了20条编码模式与经验,它们是从出席无休止的会议和读了几百篇专稿中摘取出来的。我们希望能在你建站的时候给你节省一些时间(和麻烦)。

跨浏览器基础

网站不需要在所有浏览器里渲染得一样

一件普遍被开发者所关心的事情是确保他们的网站在所有浏览器中渲染得一样,包括非现代的一些。那一般并不需要。更好的路线是考虑逐渐增强你的网站,对非现代浏览器的用户提供一个可靠的工作基线,而给用现代浏览器的用户提供一个更丰富的UI。

从固体模版开始以简化开发

许多的技巧已经创建进项目模版如HTML5 Boilerplate 以节省你一些时间。这些准则对以现代浏览器为目标的项目和需要旧浏览器(一直回退到IE6)支持的项目工作得一样好。

关注稳定的标准

当一个新又酷的特性出现的时候很容易令人兴奋,但其中的一些可能仍然在为技术参数实验、仍然在开发中。重要的是要记得,在规范发展的早期是很容易变化的,这有可能影响你的网站的稳定性和你的用户的体验。通过关注稳定的标准,你可以确保你的用户能获得他们期望的体验,你的网站会更易维护。

用IE兼容检测工具帮助你的网站迁移到基于标准的代码

标准是IE10的一个核心部分,帮助开发者迁移他们的代码以便能发挥这项长处,这对IE工程项目组来说无比重要。这就是为什么他们创造了IE兼容检测工具,它能实时分析你的网站,准确的找到通常问题的类型并给出解决方法。通过在你的代码中包括一个简单的JavaScript脚本文件,在你的页面你就能得到可视化的结果。它也可以被集成进Fidder HTTP 分析工具

谨慎使用polyfills和shims(模拟标准API)

如果你必须在不同浏览器实现系统的体验,polyfills和shims提供了代码和标签,可以帮助模拟标准的API和功能。需要谨记的是,确保你引入的代码适合你的需要,并且可以在日后维护。

开发时多浏览器测试

尽管相对以前,现代浏览器已经接近统一标准,但还是有不同。偶尔的多浏览器测试避免不会在最后一刻发现大问题——甚至已经上线了。确保查看所有浏览器调试器比如IE的F12 Dev Tools,检查有没有警告或错误信息。一些老浏览器比如IE7没有内建调试器,可以用Firebug Lite调试。或者使用跨浏览器解决方案如BrowserStack

用工具参与创建过程来检测错误和缩小文件大小

有好一批创建工具如 HTML validatorsCSS validatorsUglify,  JSHint, 或者 GruntJS ,他们能找到潜在的问题,增强项目代码的标准,减少文件的大小提升性能。如果你的IDE或者代码编辑器支持它们,这些步骤就不会成为绊脚石。例如,Visual Studio提供了在创建过程中运行外部工具和合并/压缩脚本文件的能力。

HTML

总是使用标准模式避免怪癖模式

直接用<!DOCTYPE html>吧!现代化网站不需要怪癖模式,不需要考虑90年代中期为了兼容现代化的浏览器比如IE6和FireFox 2.大多数现今的网页在怪癖模式下要么文档声明无效,要么出现无关文本。很容易导致布局异常,而且很难调试。

理解有限向后兼容的HTML标签

新HTML5标签比如<section>,<header>和<footer>改善标签的语义化,但需要特殊的辅助脚本让IE6,7和8认识他们。页面在太旧的浏览器或者禁止脚本时无法使用HTML5标签,那么使用<div>标签是对这些情况比较靠谱的解决方法。

将CSS在HTML文件顶部引入

在文档body中引入CSS会导致页面全空,直到CSS加载后才显示。CSS文件应该放在HTML文档的head中,让浏览器尽早地读取他们。

将JS在HTML文件底部引入

浏览器会先检索、解析和执行加载的脚本,然后渲染剩余的页面内容,以防脚本创建新元素。脚本在底部后,浏览器可以一直渲染页面直到脚本加载完全,以便用户尽快加载页面显示出来。

避免HTML中脚本标签

不同于引入脚本,脚本标签需要浏览器停止渲染(处理脚本),阻碍后续资源文件的分析和下载。这导致页面初始加载减慢,甚至留下可怕的“空白页”体验。而且脚本分散在内联标签里很难维护

不要在HTML元素中使用内联脚本事件

例如<button onclick="validate()">Validate</button>。这种做法违反了标签、表示和行为之间的清爽原则。而且,如果相关的脚本实在文档底部加载,用户可能先点击了页面触发事件从而尝试调用脚本程序,但是其实脚本还没加载——引发错误!

CSS

熟悉和使用CSS级联规则

简单的id和class选择器是好用的,但是这也意味着标签混乱,到处是无法重用的的id和class。应该用标签,子元素标签,同列标签和,小部分的id和class标签组合,使css更简单和通用。避免使用“!imporant”。

面向未来的使用前缀特定属性

新草案制定时,一些浏览器厂商会通过添加前缀以实现可能支持的标准。为了确保CSS标签以后可用,带前缀的和标准的属性名称都用上最好。这篇文章还提供了一个JavaScript解决方法。

用优雅的CSS处理兼容性,而不是hack

CSS hack随着浏览器的更新,显得不可靠。解决方法是为html或body标签添加特定浏览器的class,并在css规则中使用。条件注释也可以在特定浏览器版本时使用需要的CSS文件。

JavaScript

总是将功能探测优先于浏览器(navigator.userAgent)探测。

判断是否存在一个特定功能(或错误)时,'userAgent'字符串是一个糟糕的指标。更严重的是,解析userAgent的代码是错误的。例如,一个浏览器探测库期待主版本号是一个一位数字,所以会把Firefox 15报告为Firefox 1,把IE 10报告为IE 1!更可靠的是直接探测功能或问题,并用它作为代码分支决策的标准。我们推荐Modernizr,它是实现功能探测的最简单方法。

尽可能在Ready后立刻执行脚本

技术上如jQuery的$(document).ready()使脚本在HTML页面加载完后立即执行,也是脚本可以安全执行的最早时刻。然而复杂的脚本会让页面显得迟缓,并阻止用户立刻操作页面。所以,一些比如tooltip(提示框),dialog(对话框)在需要显示时初始化,不造成页面卡顿。

如果Ajax关系用户交互,越早请求越好

Ajax请求会花费很长时间,而且不需要等待HTML页面渲染就可以发起请求。所以,把$(document).ready()放在Ajax请求完成回调函数中更好。

延迟加载非必要的脚本(如Facebook Like,Google +1,Twitter)。

所有人都希望他们的网页在社交网络上流行,但是社交网络的脚本往往很大,可能会引起用户响应迟缓。请求这些脚本等待页面加载完毕,可以使页面响应更快。更妙的是,重新考虑这些按钮是否有必要,以及它们是否改善了你的页面整体体验。


采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
《基于SSM架构的学籍数据管理平台技术解析》 在当代数字化教育背景下,数据管理平台已成为教育机构运营的核心支撑。本系统以SSM技术组合为基础架构,构建了一套完整的学籍信息处理体系,通过系统化的技术方案实现教育数据的规范化管理与智能分析。以下从架构设计、技术实现与功能模块三个维度展开说明。 一、系统架构设计 该平台采用分层式架构设计,充分体现模块化与可维护性特征。Spring框架作为核心容器,通过依赖注入机制实现组件解耦;SpringMVC架构负责前端请求的路由与响应处理;MyBatis数据层框架则封装了数据库交互过程,通过映射配置简化SQL操作。三层架构协同工作,形成高内聚低耦合的技术体系。 二、技术实现要点 1. Spring容器:基于控制反转原则管理业务对象生命周期,结合面向切面编程实现事务控制与日志管理 2. SpringMVC模块:采用模型-视图-控制器设计范式,规范Web层开发流程,支持RESTful接口设计 3. MyBatis组件:通过XML配置实现对象关系映射,提供动态SQL生成机制,显著减少冗余编码 三、核心功能模块 1. 学籍信息维护:实现学员基本资料的增删改查操作,涵盖学籍编号、个人信息、所属院系等关键字段 2. 学业成绩管理:支持课程分数录入与批量处理,提供多维度统计分析功能 3. 教学组织管理:建立班级体系与学员关联关系,实现分级数据管理 4. 权限控制机制:基于角色访问控制模型,划分管理员、教职工、学员三级操作权限 5. 系统审计功能:完整记录用户操作轨迹,构建安全追踪体系 四、系统开发方法论 在项目生命周期中,采用结构化开发流程。前期通过需求调研确定系统边界,中期完成数据库范式设计与接口规范制定,后期采用迭代开发模式配合自动化测试,确保系统交付质量。 五、技术演进展望 当前系统虽未集成智能算法,但为未来升级预留了扩展接口。可预见的技术演进方向包括:基于学习行为数据的智能预警、个性化学习路径推荐等深度应用场景。 综上所述,该平台通过SSM技术体系实现了教育管理数据的标准化处理,既展示了现代软件开发范式的实践价值,也为教育信息化建设提供了可复用的技术方案。这种系统化的问题解决思路,充分体现了软件工程方法在教育领域的应用潜力。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值