IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / Taobao.com UED Team
IT 2016-03-15 23:53:08 / 累计浏览 2,840

前后端分离的思考与实践(二)

这篇讲的是前后端分离中“模板”这个模糊地带的梳理与实践。作者从传统开发模式切入,指出当模板逻辑堆积在服务端或浏览器端时,都会导致前后端职责不清、维护困难。文章的核心方案是,在 Java 服务与浏览器之间,引入一个前端可掌控的 NodeJS 中间层,将前后端的分割线从“硬件环境”重新定义为“工作职责”。 通过这个中间层,团队得以实现模板与路由的共享。前端使用一致的模板语言(如 XTemplate)和渲染引擎(JavaScript),决定是在 NodeJS 服务端渲染,还是交给浏览器端渲染,从而针对不同场景选择最优解。例如,对于复杂交互应用,首次进入时由 NodeJS 做全页渲染以避免白屏,后续交互则在浏览器端局部刷新,始终使用同一份模板,保证了体验一致性。 文章进一步通过多个案例(如单页面应用的 SEO 解决方案、跨终端页面的统一管理),展示了这一架构如何具体解决白屏等待、路由不匹配、SEO 困难等现实痛点。其本质是利用 NodeJS 的灵活性,让前端开发更聚焦于 UI 与交互,并与后端通过服务化接口进行清晰协作,最终提升整体项目可维护性与用户体验。

本机暂存
IT 2016-03-15 23:51:42 / 累计浏览 3,620

前后端分离的思考与实践(一)

这篇讲的是如何通过引入NodeJS层来真正实现前后端职责分离,解决传统Web开发中前后端代码混杂、沟通成本高、性能优化受限等顽疾。 作者团队认为,仅靠浏览器端的SPA模式不够通用,真正的分离应该从职责划分:前端负责View和Controller,后端只负责Model与业务数据。为此,他们提出在后端服务和浏览器之间增加一层NodeJS应用。这层Node让前端能掌控Controller,自由决定服务端渲染、异步接口或BigPipe等输出方式,同时后端可以专注于业务逻辑。文章解答了常见的疑问,比如“为何多一层”:它并非多余,而是为了解锁前端的控制权,通过集中代理请求、优化通信来提升整体性能,尤其在移动端效果显著。 淘宝已在部分项目中实践该架构,初步验证了其在开发效率和性能上的收益。他们认为,技术实现并非难点,关键在于打通开发流程、积累最佳实践,使这种分离模式能稳定落地。

本机暂存
IT 2015-01-11 23:37:42 / 累计浏览 2,280

走近用户,从访谈开始

这篇讲的是,如何让业务方伙伴也能快速上手用户访谈,把这项用研核心技能变成拉近与用户距离的利器。文章开宗明义,点出访谈是用于定位问题、挖掘需求的定性方法,它要解答“是什么”和“为什么”,而非“有多少”。 作者将访谈要点提炼为几条关键法则:首先要像聊天一样提问,用生活化语言代替专业术语;其次,要聚焦用户过去和现在的真实体验,而非让他们凭空想象未知;再者,必须学会连贯追问,像“什么时间”、“什么场景”这样一步步把问题问透。 文章也直指业务方在初次尝试时容易踩的坑:提问不能过于开放模糊(比如“你觉得XX怎么样”),问题本身要避免带有倾向性(比如“这个功能好用吗”)。更重要的是,要多倾听,不随意打断用户,同时要引导用户详细描述遇到的问题本身,而不是直接跳到他们提供的解决方案上。 整篇文章就像一位经验丰富的用研在分享心法,既有方法论,也点出了实操中的具体陷阱,对于想亲自了解用户声音的业务方来说,是一份很实在的入门指引。

本机暂存
IT 2014-11-19 23:13:11 / 累计浏览 2,240

说说最近Google:safebrowsing引发页面加载阻塞的问题

这篇讲的是一个由Google SafeBrowsing机制引发的线上故障。某业务在Firefox浏览器中突然出现JS加载阻塞,导致页面功能异常,但代码变更仅有文案修改。排查发现,问题根源在于Firefox内置的Google安全浏览功能。 正常情况下,浏览器加载资源后会与本地哈希库进行碰撞检查,若疑似风险则会向Google服务器发送检测请求。但在国内网络环境下,该请求被阻塞(GFW采用了“hold连接”而非重置),导致Firefox一直等待响应,页面因此卡住。由于哈希库无法更新,即使升级浏览器或清理缓存也无济于事,同一个请求会因在等待队列中而被完全忽略。 最终,团队通过修改静态资源文件名(如JS的路径、CSS的时间戳)绕过了哈希碰撞,作为临时方案。文章不仅详细拆解了从发现问题、分析机制到定位网络环境影响的全过程,也提醒开发者需要更主动地关注浏览器底层安全机制与本地网络环境的潜在冲突。

本机暂存
IT 2014-07-15 23:06:43 / 累计浏览 2,380

Think Aloud-适合设计师的可用性方法

这篇讲的是设计领域一个经典又实用的用户研究方法——Think Aloud(出声思考)。它源于1982年IBM,并由Jakob Nielsen在可用性工程中推广,核心在于让测试用户在操作产品原型或界面时,即时地说出看到的、想到的和疑惑的内容,帮助设计师直接捕捉用户最真实的交互心智。 文章重点分析了该方法相较于其他测试的独特优势:它经济高效(仅需2-8名用户)、结果可靠、形式灵活(适用于从纸面原型到上线产品的任何阶段),并且因为过程直观,极具说服力。作者进一步拆解了具体操作流程:从准备模拟真实场景的测试界面、设计明确任务脚本,到邀请合适的用户进行训练与测试,最后从用户的即时反馈中解读设计问题。文中以电商页面的“尺码助手”功能为实例,展示了如何通过用户一边操作一边的自述,发现入口隐蔽、操作路径不符合预期等设计痛点。 总的来说,Think Aloud是帮助设计师和团队在早期阶段快速、低成本地验证设计假设、洞察用户真实反应的利器,它强调获取交互过程中即时的、主观的反馈,让优化决策更有据可依。

本机暂存
IT 2014-07-15 23:02:58 / 累计浏览 3,640

高效输出移动app产品原型

这篇讲的是如何快速高效地完成移动App产品原型设计。作者针对原型制作过程中思路不清、协作繁琐、体验不真实等痛点,提出了一套分三步走的系统方案。 核心方法在于化繁为简:首先,用“界面标题+主要内容”这种极简卡片来绘制产品流程图,确保整体逻辑正确,也便于快速讨论调整。接着,利用一套预制的Axure高保真控件库,设计师只需修改文字颜色和位置,就能迅速组装出规范的原型界面,大幅提升效率。最后,通过Flinto等工具将静态原型转化为可点击的动态演示,让团队或用户能在手机上获得真实的产品体验感受。 整套流程强调的是从宏观思路到微观执行的连贯性,通过标准化和工具化,把原型制作从耗时的设计任务,转变为可快速验证产品想法的清晰路径。

本机暂存
IT 2013-10-08 12:36:24 / 累计浏览 3,780

在iOS中使用icon font

作者在开发阿里数据iOS客户端时,面临着所有图标都采用传统背景图片方案带来的困境——为兼容普通屏与Retina屏,每个图标都需提供两种尺寸,大大增加了设计师的工作量。由此出发,文章探索了能否将Web上已广泛应用的icon font技术引入iOS开发,并给出了肯定的答案。 文章首先以KaushanScript字体为例,详细拆解了在iOS项目中添加并使用自定义字体的完整四步流程:导入字体文件、在.plist中注册、查找字体集名称、最终调用。掌握此原理后,作者以fontello图标库为例,进一步阐述了使用icon font的特殊之处:核心在于通过FontLab Studio等工具找到图标对应的unicode码(如“\U0000E802”),然后在代码中直接以该unicode字符串进行渲染。 这套方案不仅能轻松使用海量开源图标,更关键的是图标作为字体,其颜色、大小均可通过代码灵活控制,有效解决了多分辨率适配与设计成本问题。文章最后还提供了多个实用的图标字体库资源和示例代码,便于读者直接上手实践。

本机暂存
IT 2013-07-30 13:43:57 / 累计浏览 2,720

复杂产品的响应式设计【流程篇】

这篇讲的是,如何让一个拥有十多个页面的复杂产品(以“玩客”为例)真正、系统地实现全站响应式设计。文章没有停留在理念层面,而是给出了从信息架构到最终测试的完整六步协作流程。 作者首先强调响应式是“设计先行”,流程始于交互设计师明确内容策略与页面分类(如列表页、详情页、操作页)。关键思路是“移动优先”,先设计手机端框架,再拓展至平板和PC端,以此梳理出清晰的响应模式与流体栅格系统。 流程中一个创新的实践是“风格拼贴稿”。在完成PC端模块设计后,视觉和前端不是等待全部设计定稿,而是提前用控件、组件拼贴出模拟页面,统一定义风格并实现组件库代码。这极大提升了多设计师、多前端协作的效率与一致性,也便于后期维护。文章最后指出,在确定核心框架与风格后,拓展其他设备设计稿的工作量远比预想的小,并提醒需尽早与开发协商服务端响应(RESS)策略以优化性能。 整个流程为跨职能团队提供了清晰的行动路线图,证明复杂产品的响应式设计有章可循。

本机暂存
IT 2013-06-21 00:05:59 / 累计浏览 3,480

谈谈 jQuery 中的防冲突(noConflict)机制

这篇讲的是如何优雅解决多 JavaScript 框架混用时对 `$` 符号的争夺问题,核心是解读 jQuery 的 `noConflict` 机制。 当项目同时引入 jQuery 和其他库(如 KISSY、Prototype)时,大家都喜欢用 `$` 作为快捷方式,冲突在所难免。作者从这个实际痛点出发,拆解了 jQuery 的应对之策:它通过 `jQuery.noConflict` 方法,允许开发者主动释放对 `$` 甚至 `jQuery` 对象本身的控制权。 文章深入源码,揭示了其实现上的巧妙之处。jQuery 在加载时会预先将 `window.jQuery` 和 `window.$` 保存在私有变量中。调用 `noConflict` 时,正是通过对比这些备份,决定将控制权“归还”给之前的占有者。那个可选的 `deep` 参数,就决定了是只交出 `$`,还是连同 `jQuery` 本身一并交出。 这种设计不仅适用于框架混用,也为 jQuery 多版本共存提供了解决方案。文章最后还给出了一个非常实用的技巧:通过闭包包裹代码,并传入 `noConflict` 返回的 jQuery 对象,可以在局部安全地恢复 `$` 的用法,让现有插件无缝工作。整个机制体现了 jQuery 在 API 设计上对复杂运行环境的周全考量。

本机暂存
IT 2013-05-28 14:53:01 / 累计浏览 2,100

移动触屏的手指触发尺寸

这篇讲的是移动端设计中一个常被忽视却至关重要的细节:触摸目标的尺寸。文章从苹果、微软、诺基亚等平台各自不同的设计指南出发,指出现有建议(如44px、28×28px)普遍偏小,与用户手指的实际尺寸存在差距。 这种差距会导致用户体验上的明显问题:用户不得不频繁切换手指的按压部位,或用指尖精确定位,这降低了操作效率;当按钮过于密集时,误触邻近目标的概率也大大增加,尤其使用较宽的拇指操作时问题更甚。 作者引用麻省理工学院触摸实验室的研究数据,给出了更符合人体工学的参考值:成年人的食指平均宽度对应45-57像素,而拇指更宽,约72像素。以这些尺寸设计,既能保证操作的精准性,也能提供清晰的交互反馈,这与费茨定律中“目标越大,命中时间越短”的原则一致。 当然,文章也理性地指出,完全按照手指尺寸设计在屏幕有限的手机上并不现实。设计师需要根据屏幕空间与核心功能进行权衡,有时精简导航、减少目标数量,是比单纯放大按钮更可行的方案。

本机暂存
IT 2013-05-08 13:37:21 / 累计浏览 3,820

一种基于匹配回朔的 css3 选择器引擎实现

这篇讲的是如何在不支持CSS3选择器的老式IE浏览器中,实现一个高效的选择器引擎。文章深入解析了KISSY框架内对应的选择器实现方案。 作者面对的核心问题是,IE6/7/8不支持现代标准的CSS3选择器,而开发者又需要在页面中使用如“兄弟选择器”、“子元素选择器”等高级语法。解决方案分为两大步:首先利用LALR解析器生成器,将选择器字符串解析为结构化的双向链表;随后,引擎采用自右向左的查找策略,并结合“匹配回溯”算法来完成节点匹配。 实现过程中的一个巧妙之处在于“分组与回溯”机制。引擎会将选择器链表按“直接位置”关系(如+、>)进行分组,以此作为匹配和回溯的基本单元。在匹配过程中,如果遇到失败(例如对于“+”紧邻选择器,当前节点不匹配),引擎能智能地回溯到上一个分组,并重新寻找可能的匹配路径,而不是直接放弃。 文章提供了具体的代码流程图与匹配实例,并通过性能测试对比显示,该实现的效率优于知名的Sizzle库。这为处理历史遗留浏览器兼容问题提供了一个扎实且高性能的实践参考。

本机暂存
IT 2013-01-10 22:32:07 / 累计浏览 4,280

从数据中了解用户——数据在现有产品改版设计中的应用

这篇文章聚焦于如何利用数据洞察来驱动成熟产品的改版设计,作者通过一个实际案例,展示了从问题发现到设计决策的全流程。 案例背景是商家服务平台上线后信息激增,导致用户难以找到所需内容。设计师没有仅依赖直觉,而是结合了多维度数据:一是通过页面埋点监控点击数与热图,发现导航分类与用户预期存在差距;二是利用反馈问卷收集用户痛点,发现分类名称混乱、内容杂乱;三是通过正式调研问卷,用类比法和随机选项等设计,验证了用户更偏好按“功能”分类的服务导航布局。 这些数据最终明确指引了设计优化方向:首页导航从原结构改为按功能模块划分,布局与命名直接参考调研结果;同时根据问卷反馈,新增了排行榜、最新服务、经验案例等需求旺盛的模块。整个过程体现了定量与定性分析如何互补——页面数据揭示“发生了什么”,问卷调研则帮助理解“为什么”以及用户偏好。 作者强调,在产品改版中,系统性地收集并分析页面行为数据与用户反馈,能让设计决策更贴近真实需求,避免陷入主观臆断或解决个案问题。

本机暂存
IT 2013-01-10 22:30:54 / 累计浏览 4,400

从数据中了解用户——数据在新产品设计中的应用

这篇文章探讨了在新产品从0到1的设计过程中,如何超越传统的用户访谈,利用定量数据系统性地洞察用户需求。作者以早期“淘宝商家服务平台”为例,详细拆解了完整的方法论。 核心在于通过精心设计的网络问卷,收集了超5000份卖家样本的定量数据。问卷设计本身就有诸多技巧,比如将专业术语转化为日常用语、利用量表题提升效率等。数据分析并非简单看数字,而是通过描述统计和交叉分析挖掘变量间的逻辑关系,例如发现“店铺装修”和“推广营销”是卖家最急需的服务,且高低星级卖家的需求呈现差异。 这些数据结论直接塑造了产品形态:一级导航的排序优先展示了高需求服务;页面楼层的布局依据数据区分了官方工具与第三方服务的优先级;甚至页尾的入口设计也考虑了新卖家的特定需求。整个案例清晰地展示了,数据如何从客观实证的角度,为产品的定位和信息架构提供坚实依据,弥补定性访谈可能存在的个案局限。

本机暂存
IT 2013-01-10 22:24:14 / 累计浏览 3,620

定性资料分析工具Stickysorter介绍

定性研究中,资料分析往往是最费时费力的环节。面对访谈、日记法等方式收集的大量文本信息,如何高效编码、分组和呈现逻辑关系,直接决定研究结论的质量。Stickysorter这款工具正是为此设计——它以数字便签的形式,将传统的卡片分类法搬上了屏幕。 它的核心优势在于极高的可视化灵活性。用户可以随意拖拽、堆叠或平铺便签,像在白板上贴便利贴一样自由重组信息。更关键的是它的多维分组功能:用六种鲜明颜色直观标记信息属性;通过创建“分群”功能,能将多个便签归入同一逻辑组,并统一管理。每个便签还支持自定义多个输入框,比如同时记录信息点内容和用户ID,方便交叉查询。 在实际应用中,例如一次对近80名消费者的笔记本购买决策研究,研究团队就用它来完成编码框建立、个案行为梳理、人群特征提取乃至行为原因的层次划分。工具将原本杂乱的信息流,转变为可拖拽、可着色、可分组的结构化视图,让分析过程变得清晰有序。对于任何需要处理大量定性资料、并从中寻找模式与关联的研究者,这种“数字化便签墙”或许正是提升效率的关键。

本机暂存
IT 2012-12-07 23:51:46 / 累计浏览 6,780

可用性测试好助手——Morae软件的应用

这篇讲的是如何用Morae软件提升可用性测试的效率与规范性。作者从实际项目痛点出发:研究员现场记录耗时、反复回看视频定位问题、甚至录音设备故障,而需求方又难以直观参与观察过程。针对这些问题,文章详细拆解了Morae这款由TechSmith开发的工具。 Morae分为Recorder、Observer和Manager三个组件。Recorder安装在用户端,负责录制操作过程并支持设置自动化任务流程与满意度问卷;Observer让需求方能远程实时查看操作并打标记;Manager则在后期用于分析数据、生成图表报告。作者通过一个虚拟项目案例,逐步演示了测试前如何配置Recorder的研究框架、设置视频来源(如画中画拍摄用户表情),以及测试中如何利用Observer进行同步观察与关键事件标记。 文章特别展示了Marker和Survey功能的设计,能帮助团队高效捕捉问题点并收集用户主观反馈,最终将录屏、标记与问卷数据整合,快速产出结构化的可用性测试报告。对于想减少人工操作干扰、让测试流程更专业的技术团队,这是一套切实可行的落地方案。

本机暂存
IT 2012-12-07 23:32:31 / 累计浏览 3,080

如何实现一个编译器

这篇讲的是如何用 JavaScript 从零构建一个编译器。作者从解析 velocity 模板语言的实际项目出发,拆解了编译原理中最核心的词法与语法分析步骤。 文章巧妙地引入了 Jison 工具(一个 JavaScript 版的 Bison),将看似复杂的 Lex & Yacc 概念变得平易近人。作者以 velocity 的变量引用(如 `$foo.bar()`)和指令(如 `#foreach`)为例,展示了如何用词法状态(比如标志语法开始的 `mu` 状态)和语法规则来描述源字符串的结构,最终让计算机“读懂”这些字符串。 读完这篇,你会发现,写一个编译器的核心,或许并不是高深的算法,而更像是耐心地为计算机编写一本“语言说明书”。

本机暂存
IT 2012-10-26 13:07:08 / 累计浏览 6,020

Kano模型在用户调研中的应用 ———客户关系管理工具调研实例

当淘宝需要为数百万卖家的CRM工具规划新功能优先级时,传统的“满意-不满意”二元思维显得力不从心。这篇技术分享记录了淘宝UED团队如何借助Kano模型,从“功能具备程度”与“用户满意度”两个维度,对17个潜在功能进行精准分类和排序,从而辅助业务决策。 文章的核心价值在于其详尽的实操流程。从设计包含正向/反向问题的Kano问卷,到收集清洗近6000份样本数据,团队一步步拆解了模型的应用。分析聚焦于日均发货量20单以上的高价值卖家,通过二维属性归类和Better-Worse系数计算,得出了一个关键发现:被调研的功能点大多属于“魅力属性”——即没有它们用户不会抱怨,但一旦拥有,会带来显著的惊喜感和满意度提升。 这份调研报告不仅提供了一个方法论范例,更揭示了Kano模型在功能优先级排序上的直观性:必备属性是地基,期望属性是竞赛,而魅力属性则是创造差异化体验的机会点。对于需要在资源有限条件下做出产品抉择的团队而言,这套结合了定性分类与定量系数的分析框架,提供了清晰的决策地图。

本机暂存
IT 2012-10-14 22:35:25 / 累计浏览 2,440

基于有限状态机的交互组件设计与实现

这篇讲的是如何用有限状态机(FSM)这个经典模型,来解决前端交互组件中棘手的状态管理问题。作者从复杂的UI状态流转难题出发,指出在许多交互场景下,组件的状态转换往往交织着用户操作、异步响应等多种因素,很容易让代码陷入混乱。文章的核心,是将有限状态机的思路引入组件设计:明确定义组件的所有可能状态、触发状态变化的事件,以及定义清晰的“状态-事件-新状态”转换规则。 通过这种设计,原本散乱在各种回调函数中的逻辑被收拢到一张清晰的状态转换表中。作者展示了如何实现一个具体的交互组件(比如一个带加载、成功、失败状态的异步按钮),并强调了其优势:状态变得可预测,逻辑集中易于维护,也极大地方便了单元测试。文章不仅讲清楚了“什么是FSM”,更重要的是演示了“怎么用它来写出更健壮的组件代码”,将理论模型落到了实际的工程实践里。

本机暂存
IT 2012-10-14 22:19:09 / 累计浏览 3,880

构建前端 DSL

这篇讲的是如何为前端领域设计并实现一套专属的领域特定语言(DSL)。作者从前端工程师反复面临的样板代码、组件嵌套过深、配置逻辑复杂等痛点出发,指出通用编程语言在表达特定领域逻辑时的笨重。 文章的核心方案是围绕业务场景——例如构建可复用的UI组件库或声明式数据流——来设计DSL的语法和语义。作者详细拆解了关键步骤:首先确定DSL要解决的具体问题边界,然后设计直观的语法规则,最后通过解析器、编译器或解释器将其转化为可执行的JavaScript或框架代码。 文中一个巧妙之处在于,作者不仅展示了如何从零构建,还对比了使用现成工具(如PEG.js、ANTLR)与手写解析器的权衡。通过一个具体示例,文章演示了这套自定义DSL如何将原本需要数十行配置的代码,简化为几句简洁的声明,显著提升了代码的可读性和开发效率。最终,作者强调DSL的成功关键在于对领域的深刻理解与克制的设计,避免过度抽象。

本机暂存
IT 2012-09-30 15:34:50 / 累计浏览 3,580

设计师的逆袭

这篇讲的是设计师在职场中普遍感到的“苦逼”困境——频繁的需求变更和被动执行,甚至被视作产品的实现工具。作者从这种常见的被动状态出发,分析了其根源:无论哪个职业,一旦陷入被动,就容易沦为配合与修改的角色。文章指出,设计师想要摆脱这种状态,关键在于主动性的确立。通过主动沟通、理解业务目标和推动设计决策,设计师才能从“美工”转变为真正的价值创造者。这种主动性的培养,不仅关乎工作体验,更是职业成长的核心驱动力。

本机暂存