IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / WEB前端开发
IT 2016-02-09 23:10:22 / 累计浏览 5,440

Sublime Text 3最好的功能、插件和设置

这篇翻译自scotch.io的文章,为开发者精选了Sublime Text 3中最值得掌握的功能、插件与配置。它没有泛泛而谈,而是直接深入到提升编码效率的具体场景中。 文章首先聚焦于几个核心的内置功能,比如通过`ctrl+shift+p`唤出的命令面板,它几乎成了所有操作的入口;又如用`ctrl+p`实现的模糊文件查找,以及`ctrl+r`的代码符号快速跳转,这些都是告别低效鼠标操作的关键。这些快捷键组合构成了高效使用Sublime的骨架。 在此基础上,文章进一步推荐了能极大扩展编辑器能力的插件生态,并分享了相关的优化设置。作者的选材体现了从基础操作到深度定制的完整路径,旨在帮助读者系统性地挖掘这款编辑器的潜力。无论你是刚接触Sublime的新手,还是想更上一层楼的用户,都能从中找到切实可行的优化点。

本机暂存
IT 2015-06-02 13:32:28 / 累计浏览 3,380

JavaScript 中的 相等检测

这篇讲的是 JavaScript 开发者几乎都会遇到的经典困惑:相等比较。作者直接从那个让人抓狂的表格切入,将松散相等(==)和严格相等(===)的各种比较结果,用一张巨幅表格直观地呈现出来,比如 `0 == ""` 居然返回 `true`,而 `NaN == NaN` 却是 `false`。 表格的每一格都是一个具体的“坑”,清晰展示了 JavaScript 在类型转换时那些违反直觉的行为。这不仅仅是知识点的罗列,更像是一份“避坑指南”。文章通过可视化对比,点明了这些差异背后的核心:松散相等会进行隐式类型转换,而严格相等则同时比较值和类型。 对于开发者来说,理解这张表格是写出可靠、可预测代码的基础。它帮助我们在日常编码中快速决策:何时可以利用松散相等的便利,又在何时必须使用严格相等来避免隐蔽的 bug。

本机暂存
IT 2015-05-11 23:33:16 / 累计浏览 3,640

React入门:关于虚拟DOM(Virtual DOM)

这篇讲的是React中虚拟DOM(Virtual DOM)的工作原理。作者从State变化如何触发UI更新讲起,指出React并非直接操作真实DOM,而是通过构建一个JavaScript对象形式的虚拟DOM树来进行模拟。 核心在于,虚拟DOM操作不立即反映到真实页面,这让React能将多次状态更新的渲染请求批量处理。等到事件循环结束,React通过高效的diff算法比较新旧虚拟DOM,计算出最小化的变更步骤,再一次性应用到真实DOM上。这种“计算最优更新路径”再“最小化执行”的模式,比开发者手动频繁操作真实DOM要快得多且更可靠。 文章进一步解释了虚拟DOM的API与真实DOM不同,其基本单位是“组件”(Components)。组件化结构让React的diff过程更加高效。简而言之,虚拟DOM用轻量的JavaScript对象代替了昂贵的DOM操作,在频繁更新的界面场景下显著提升了性能。

本机暂存
IT 2015-01-20 23:22:01 / 累计浏览 3,400

CSS3 动画系列

这篇讲的是作者对CSS3动画核心概念的温故知新,重点厘清了新手容易混淆的两大类型:Transition(过渡)和Animation(动画)。 文章开篇从个人经历切入,指出CSS3动画从早期仅Webkit支持,到如今已成为前端必备技能。核心对比在于:两者都是实现平滑变化的“补间动画”,但控制精度不同。Transition像是一个简单的“开始-结束”开关,你只能定义起点状态、终点状态以及中间的耗时和速度曲线,适合实现类似“hover时颜色渐变”这类单一段落的变化。 而Animation则提供了更强大的分段控制能力。通过定义关键帧(Keyframes),你可以在动画序列中插入任意多个中间状态,精确安排“第一秒放大、后两秒变色并还原”这样的复杂流程。文章还特别用示意图直观地展示了这种区别。 简单说,如果只需要状态A平滑过渡到状态B,用Transition;如果要编排一段包含多个状态变化的完整“动画片”,就得请出Animation了。作者在最后也提到了,有过Flash动画经验的同学理解起来会特别快。

本机暂存
IT 2015-01-19 23:58:46 / 累计浏览 2,320

使用window.postMessage实现跨域通信

这篇讲的是如何用 `window.postMessage` 优雅地解决经典的跨域通信难题。 在 HTML5 之前,开发者们为绕过同源策略尝试过不少“偏方”,比如利用 `document.domain`、`iframe` 的 `location.hash`,甚至 Flash 和 `window.name` 的特性。这些方案各有各的限制和使用场景。 文章的核心聚焦于 `postMessage` 这个更现代、更安全的解决方案。它包括两个部分:使用 `otherWindow.postMessage(message, targetOrigin)` 方法向目标窗口发送数据,以及通过监听 `message` 事件来接收数据。文章详细解释了 `message` 和 `targetOrigin` 等参数的含义,以及事件对象中的 `data`、`origin` 等关键属性,提供了清晰的实践指南。 当然,文章也指出了现实中的兼容性考量:`postMessage` 在 IE8/9 中仅支持字符串类型的数据传输(可通过 JSON 序列化解决),而对于更老的 IE6/7,则可能需要回退到 `window.name` 等方案。 总之,对于需要在不同域名窗口或 iframe 间安全传递数据的开发者,这篇文章提供了一份从背景、方案到具体 API 和潜在坑点的实用参考。

本机暂存
IT 2015-01-19 23:55:37 / 累计浏览 14,340

HTML 5 的data-* 自定义属性

这篇讲的是HTML5如何通过 `data-*` 自定义属性,为元素规范地存储和传递私有数据。文章从 `data-*` 属性的定义切入,指出它与传统的任意自定义属性(如 `uid`)在使用上看似相似,但其核心价值在于将这类非可视数据标准化,让代码意图更清晰。 文章的重点在于对比两种存取这些数据的方法。第一种是通用的 `getAttribute` / `setAttribute` 方法,它兼容性极好,但需要写完整的属性名(如 `data-uname`),与传统方式无异。第二种则是HTML5提供的 `dataset` API,这是一种更现代、更语义化的方式。使用时,只需通过 `element.dataset` 对象即可访问,无需“data-”前缀。文章特别提醒了`dataset`的一个关键细节:如果属性名含有连字符(如 `data-date-of-birth`),在通过JS访问时会被自动转换为驼峰式命名(`dataset.dateOfBirth`)。 最终,文章清晰地给出了选择:如果追求广泛兼容或习惯传统操作,`getAttribute` 是可靠选择;若在支持HTML5的现代环境中开发,`dataset` API 提供了更优雅、更符合标准的数据交互方式。

本机暂存
IT 2015-01-19 23:37:38 / 累计浏览 5,180

Underscore.js-精巧而强大实用功能库

这篇讲的是JavaScript实用工具库Underscore.js如何为开发者解决日常编码中的基础却繁琐的问题。作者从其他语言转向JavaScript时遇到的典型困惑出发——比如如何实现HashMap、对象继承、通用迭代器和快速排序——引出了这个精巧的库。它并非替代原生API,而是像JDK之于Java,提供了80多个稳健的底层函数支持。 文章重点展示了其集合(数组与对象)处理的核心能力。通过清晰的Node.js环境代码示例,逐一演示了`_.each`进行循环、`_.map`转换数组、`_.reduce`聚合计算以及`_.filter`条件过滤等操作。这些函数在现代浏览器中会智能地采用原生实现,兼顾了性能与兼容性。文章也涵盖了函数绑定、模板字符串等实用功能。 总的来说,这篇文章并非泛泛介绍,而是通过具体可运行的代码片段,让读者直观感受到Underscore.js如何将JavaScript中那些需要自己反复“造轮子”的基础操作,变得标准化且高效。对于希望提升编码效率、夯实基础库认知的前端开发者而言,这些经过提炼的实用技巧具有直接的参考价值。

本机暂存
IT 2015-01-11 23:41:02 / 累计浏览 2,860

Github 的 CSS 风格指南

这篇讲的是GitHub内部如何“写”CSS。它并非基础教程,而是一套从实战中淬炼出的系统性工程规范,直接解决了前端开发中代码混乱、维护困难的痛点。 文章清晰定义了从微观编码到宏观架构的每一层细节。微观上,它明确了如双空格缩进、属性冒号后加空格、优先使用`//`注释等具体规则,确保代码风格统一可读。更关键的是架构层面,它倡导使用SCSS,并给出了清晰的目录组织范例(components, globals, sections等),强调`$variable`与`@mixin`的集中管理。 在CSS特异性控制上,指南给出了极具操作性的原则:谨慎使用ID选择器,优先使用类名,倾向直接后代选择器(`>`)以降低复杂性。对于字体大小等单位选择、`js-`与`is-`类名的命名区分,也都有明确约定。整套体系的目标是提升代码的一致性、可维护性与团队协作效率,对于任何希望规范化CSS项目的团队都具有很高的参考价值。

本机暂存
IT 2015-01-11 23:39:59 / 累计浏览 2,940

消除疑问:CSS动画 VS JavaScript

这篇讲的是CSS动画和JavaScript动画之间的选择,并非像很多人想的那样简单。作者从自己作为动画爱好者的亲身体验出发,深入研究后发现,被广泛推崇的CSS动画其实存在一些缺陷。 文章首先指出了CSS的一个明显短板:它的`transform`属性将缩放、旋转和位移捆绑在一起,无法用不同的时间和缓动函数独立控制,这在复杂动画序列中是个实际问题。 更关键的是,作者拆解了“CSS动画性能更好”这一普遍认知。文章详细分析了“硬件加速”的两个层面:一是GPU层的创建,但这并非CSS专利,JavaScript通过`translate3d`等3D变换同样可以触发;二是将计算转移到不同线程,但这个过程本身有开销,且只对与文档流无关的属性有效,实际收益可能被高估。文中还通过压力测试对比显示,现代JavaScript动画库(如GSAP)的性能可以远超jQuery,并不逊色于基于CSS的方案。 最终,文章澄清了一个核心观点:CSS动画并非在所有情况下都是“更干净”或性能更优的选择。理解它们各自的局限和性能本质,才能根据项目需求——是简单的整体变换,还是需要复杂独立控制的序列——做出更合理的技术决策。

本机暂存
IT 2015-01-11 23:30:59 / 累计浏览 3,840

jQuery选择器对应的DOM API ——选择元素

这篇技术指南直接拆解了常见的jQuery选择器写法,并展示它们在原生DOM API中的对应实现。作者的出发点很明确:在许多简单场景下,我们完全可以直接使用原生JavaScript,而无需依赖jQuery。文章并非完全否定jQuery,而是通过并列对比的方式,让开发者看清两者的功能重合点与差异。 例如,通过ID选取元素,jQuery的`$('#id')`在原生API中可以用兼容性更广的`document.getElementById()`,或者更现代的`document.querySelector()`来实现。文章详细覆盖了通过CSS类名、标签名、属性以及伪类选择等十余种高频场景,清晰地指出了在每种情况下如何用原生代码替代jQuery选择器。 这种对比的价值在于,它帮助前端开发者(尤其是习惯于jQuery的开发者)建立起对原生DOM查询方法的系统认知。理解这些对应关系,不仅能减少对库的依赖,也能在性能敏感或需要轻量级解决方案的项目中,提供更直接高效的选择。对于希望夯实基础、提升代码掌控力的开发者来说,这是一份非常实用的对照参考。

本机暂存
IT 2015-01-11 23:23:12 / 累计浏览 4,840

移动前端不得不了解的html5 head 头标签

这篇讲的是移动端开发中容易被忽视但至关重要的HTML head头标签最佳实践。文章从移动端工作的重要性切入,系统梳理了从基础到进阶的各类头部声明。 它首先明确了``和``这些基础标签的写法。随后,重点解析了`lang`属性更标准的写法(如`zh-cmn-Hans`)及其意义。文章还针对国内复杂的浏览器环境,给出了具体的解决方案:比如使用``让360浏览器切换到极速内核,以及添加``来禁止百度转码。 这些内容并非纸上谈兵,而是来自一线开发者的经验总结(如一丝和百度FEX的整理),直指实际项目中会遇到的兼容性和体验问题。对于移动前端开发者来说,这相当于一份即拿即用的头部标签配置清单,能帮助规避很多隐蔽的坑。

本机暂存
IT 2014-12-10 23:07:04 / 累计浏览 4,060

JavaScript实现的抛物线运动效果

这篇讲的是如何用JavaScript实现购物车常见的抛物线飞入动画效果。作者从天猫购物车的交互体验得到启发,参考了张鑫旭的抛物线运动原理,但觉得现有代码结构可以优化,于是重新实现了一版更简洁易用的方案。 核心实现基于抛物线数学公式,通过动态计算元素在每一帧的left和top偏移来模拟运动轨迹。作者的巧妙之处在于将整个过程封装成了一个可配置的`Parabola`对象,开发者只需通过参数设置目标偏移量(`offset`)、运动时长(`duration`)和曲线弧度(`curvature`),就能快速获得想要的运动效果。文章还提供了运动前后的回调函数接口,方便在动画结束时触发后续逻辑。 文末附有完整的在线Demo和清晰的参数说明表格,方便读者直接上手测试和理解每个选项的作用。这种从实际需求出发、重构成更符合个人习惯代码的思路,对前端开发者如何学习和改进现有方案也有不错的参考价值。

本机暂存
IT 2014-12-03 23:51:47 / 累计浏览 2,460

JavaScript中双叹号(!!)作用

这篇讲的是 JavaScript 中一个常见但常被误解的操作符:双叹号(!!)。作者从日常编码中“var b = !!a;”这样的片段出发,解释了它的核心作用——将任何表达式强制转换为布尔值(true 或 false)。 文章不仅解释了 !! 如何通过两次逻辑取反来实现转换(第一次转为布尔值取反,第二次再反转回来),更深入地剖析了 JavaScript 的布尔转换规则。它对比了显式转换(如 parseInt、toString)和隐式转换(利用算术运算符或连接符),并明确了哪些值会被视为 false(如 false、undefined、null、0、""),哪些为 true。 通过 undefined 和 null 的具体示例,文章展示了 !! 的实用价值:它能清晰地将“未定义”或“空”状态归为 false,而将实际有值(哪怕是对象)的变量归为 true,为后续的条件判断提供了稳定、明确的依据。这本质上是对 JavaScript 弱类型特性的一种优雅应对。理解了这一点,开发者就能更自信地使用这种简写语法,编写出更简洁可靠的布尔判断逻辑。

本机暂存
IT 2014-11-27 12:53:35 / 累计浏览 2,120

window resize和scroll事件的基本优化

这篇讲的是前端开发中一个常见的性能陷阱。文章从同事在项目中实际遇到的“翻车”现场切入:在低版本IE里,频繁触发的`resize`和`scroll`事件会导致页面卡死。问题的根源在于这两个事件触发频率极高,每次都同步执行复杂计算或DOM操作,会瞬间耗尽浏览器的性能资源。 作者的核心优化思路是“节流”:通过一个定时器,确保在设定的时间窗口(如400毫秒)内,无论事件被触发多少次,实际的处理函数只执行一次。代码示例清晰展示了如何用`setTimeout`和`clearTimeout`来实现这个简单的“节流阀”,这个方案对`resize`和`scroll`事件同样有效。 对于需要监听这些高频事件的场景,尤其是需要兼容老版本IE的项目,这个低成本、高收益的基础优化方法能有效避免页面假死,值得借鉴。

本机暂存
IT 2014-11-26 23:16:49 / 累计浏览 1,740

Javascript中的delete操作符

这篇文章深入剖析了JavaScript中`delete`操作符的行为,特别是它与变量、对象属性之间微妙而关键的互动关系。作者从一个核心矛盾出发:看似等价的全局变量和对象属性,在`delete`面前却表现迥异。 核心差异在于,通过`var`声明的变量和函数声明都带有`dontdelete`特性,因此它们无法被`delete`操作符移除。相比之下,直接在对象上创建的属性(无论是自定义的还是来自原型链的)则可以被轻松删除。文章通过一系列精准的代码示例展示了这种区别,例如`delete global`对`var global`无效,但`delete obj`却能移除一个未用`var`声明的全局变量(它本质上是`window`对象的属性)。 此外,文章还细致地探讨了`delete`操作符的几个边界情况:它无法删除原型(prototype)中定义的属性或对象自带的属性(如`length`);在`eval`执行的代码中,通过`var`声明的变量反而失去了`dontdelete`保护,可以被删除;而`delete`的返回值(`true`/`false`)更多反映了操作是否成功,而非属性是否真的存在。理解这些细节,对于避免JavaScript中关于删除操作的常见陷阱至关重要。

本机暂存
IT 2014-11-25 23:04:58 / 累计浏览 2,040

浏览器图片渲染优化

页面加载时内容会“跳动”,这篇技术博客解释了其中一个常见原因:图片尺寸未被提前声明。文章指出,浏览器需要下载并解析图片才能确定其尺寸,这个过程会导致反复的布局计算和重绘,严重影响渲染效率。 核心解决方案其实很简单:为所有 标签显式指定 width 和 height 属性。这样浏览器能在下载图片前就为其预留出空间,从而消除不必要的回流(reflow),让页面渲染更流畅。文章详细对比了指定尺寸与不指定尺寸的区别:前者能让浏览器在下载图片前就渲染页面,消除布局偏移;后者则会导致浏览器反复计算布局,拖慢速度。 作者也提到了使用该属性可能带来的小问题——禁用图片时可能出现空框,但整体上仍强烈推荐使用,因为性能提升的收益远大于此。此外,文章给出了两个关键实践建议:一是不要用 HTML 或 CSS 强行缩放图片(比如把 60x60 的图强制显示为 30x30),应该在图像处理软件中预先调整好尺寸;二是建议为图片本身或其直接父容器指定尺寸,这样才能有效生效。 尽管存在显示上的小权衡,但养成在代码中为图片预定义尺寸的习惯,是前端性能优化中一项非常值得投入的基础工作。

本机暂存
IT 2014-11-22 23:20:57 / 累计浏览 2,540

jQuery的编码标准和最佳实践

想用好jQuery,光会调用API可不够,编码习惯同样重要。这篇文章从实际项目角度出发,系统梳理了从加载到编码的全套最佳实践。 它首先指出,通过CDN加载jQuery并配合本地回退脚本,能兼顾性能与可靠性,同时强调使用裸协议URL和将脚本放置于页面底部以优化加载。在版本选择上,文章给出了清晰的建议:需兼容旧版IE则选择1.x系列,否则推荐使用最新版本,并务必指定完整版本号以避免意外。 变量管理方面,建议为jQuery对象添加$前缀以清晰区分,并及时缓存选择器结果以提升性能。选择器的优化是另一个重点,文章通过对比指出,优先使用ID选择器速度最快,使用类选择器时避免指定元素类型,在父级ID下查找子元素则推荐使用.find()方法,这些都能有效利用底层原生方法,绕过较慢的Sizzle引擎。 此外,文章还提醒了在多框架并存时避免$符号冲突的解决方案。这些实践总结起来,核心目标就是写出更健壮、高性能且易于维护的jQuery代码。

本机暂存
IT 2014-11-19 23:30:42 / 累计浏览 1,900

跨平台移动框架iMAG开发入门

这篇讲的是iMAG这个跨平台移动开发框架的入门上手。文章开宗明义,指出iMAG的核心优势在于“原生跨平台”——它采用XML加JavaScript的方式,将符合规范的代码解释成Android或iOS的本地原生控件来执行,因此拥有与原生应用一致的性能和用户体验。这一点将它明确区别于PhoneGap、JQuery Mobile这类Web技术封装的框架,更适合对性能要求较高的场景。 作者随后介绍了iMAG极为简洁的开发环境。开发者无需在本地搭建环境,只需在官网注册账号,安装手机客户端并使用在线工具,就能实时编辑XML并在手机上刷新查看效果,上手门槛极低。 文章通过一个“Hello World”示例,清晰展示了iMAG的XML结构。例如,使用封装页面,和<content>划分区域,而<list>控件则负责内容布局。这种结构会解释成各自平台的原生组件,比如Android上的TextView或iOS上的UILabel。文末还初步梳理了iMAG的控件体系,将其分为内容、表单和布局三类。总体来说,这篇文章为想快速构建高性能跨平台应用的前端或移动端开发者,提供了一个轻量且高效的新选项。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="6957" data-title="跨平台移动框架iMAG开发入门" data-url="/it/article/6957" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <article class="br-card br-plain-card br-plain-card--no-thumb"> <div> <div class="br-meta"> <span class="br-source-dot">IT</span> <span>2014-10-15 22:50:19</span> <span class="br-dot">/</span> <span>累计浏览 2,280</span> </div> <h2 class="br-card-title"><a href="https://blogread.cn/it/article/6927">javascript运算符</a></h2> <p class="br-summary">这篇讲的是JavaScript里运算符的“脾气”。它不只是简单列举了+、-、==、===这些符号,而是深入拆解了它们背后的规则和容易踩坑的地方。 文章把运算符按算术、比较、逻辑、赋值等用途分门别类,然后着重讲了几个关键点:比如“+”号面对字符串时,就从“加法”变成了“拼接”;而“==”和“===”的区别,直接关系到比较时会不会自动做类型转换。这些细节在日常编码里稍不注意就会埋雷。 它还特别点出了运算符的结合性顺序——比如“++”放在变量前后的不同效果,这在实际循环或表达式中非常实用。同时,对于除法可能产生浮点数、模运算对非数字的处理等边缘情况,也都给出了明确的规则说明。 整体来说,这篇文章适合想理清JavaScript基础语法、避免低级错误的开发者。它把枯燥的语法点结合实际执行行为来讲,读起来能帮你建立起对这些运算符更清晰、更可靠的心理模型。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="6927" data-title="javascript运算符" data-url="/it/article/6927" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <article class="br-card br-plain-card br-plain-card--no-thumb"> <div> <div class="br-meta"> <span class="br-source-dot">IT</span> <span>2014-09-17 13:59:47</span> <span class="br-dot">/</span> <span>累计浏览 1,720</span> </div> <h2 class="br-card-title"><a href="https://blogread.cn/it/article/6920">如何捕获和分析 JavaScript Error</a></h2> <p class="br-summary">这篇文章从现代 Single Page App 的痛点切入:用户操作状态复杂,简单的“刷新页面”已无法作为错误处理的万能药,因此系统性地捕获与分析前端错误变得至关重要。 它详细对比了两种核心捕获方式:try-catch 用于已知会抛出异常的 API 调用或回调,确保代码局部容错;而 window.onerror 则是兜底方案,用于捕获未预料到的全局错误。文章进一步剖析了跨浏览器环境下的属性丢失难题——window.onerror 有限的参数会导致关键信息(如列号、堆栈)缺失,作者探讨了通过序列化 message 或利用现代浏览器提供的第五个参数(Error 对象)来解决。 针对跨域脚本抛出的 “Script error.” 这一普遍难题,文章提供了基于 CORS 的注入方案来绕过安全限制,并深入到一个非常实际的工程细节:通过插入空行的“行号反查”技巧,解决内联代码导致的行号冲突问题,使得错误定位依然准确。 整体来看,作者从基础方法讲到浏览器兼容性深水区,再到跨域场景的工程化应对,为前端开发者提供了一份清晰、可落地的错误监控实施指南,而不仅仅是罗列 API。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="6920" data-title="如何捕获和分析 JavaScript Error" data-url="/it/article/6920" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <nav class="br-pagination" aria-label="pagination"> <ul class="pagination pagination-sm"><li><a href="/it/channel/230/1">1</a></li><li class="active"><a >2</a></li><li><a href="/it/channel/230/3">3</a></li><li><a href="/it/channel/230/4">4</a></li><li><a href="/it/channel/230/5">5</a></li><li><a href="/it/channel/230/6">6</a></li><li><a href="/it/channel/230/7">7</a></li></ul> </nav> </section> <aside class="br-stack br-sidebar" aria-label="IT sidebar"> <section class="br-side-card br-channel-card"> <div class="br-channel-eyebrow">博主信息</div> <h2>WEB前端开发</h2> <div class="br-channel-metas"> <p class="br-channel-meta">共 122 篇文章</p> </div> <div class="br-channel-info br-channel-info-stacked"> <a href="http://www.css88.com/" target="_blank" rel="nofollow noopener"> <span class="br-channel-icon" aria-hidden="true">🔗</span> <span class="br-channel-link-text"> <span class="br-channel-link-label">访问博客</span> <span class="br-channel-host">http://www.css88.com/</span> </span> </a> <a href="https://weibo.com/n/愚人码头" target="_blank" rel="nofollow noopener"> <span class="br-channel-icon" aria-hidden="true">@</span> <span class="br-channel-link-text"> <span class="br-channel-link-label">微博</span> <span class="br-channel-host">@愚人码头</span> </span> </a> </div> </section> <section class="br-side-card"> <h2>近 3 天十大热文</h2> <ol class="br-rank-list"> <li><span class="br-rank">1</span><a href="https://blogread.cn/it/article/6319?f=hot3">Chrome和goagent的配置方法,你懂<small>近 3 天 96 浏览</small></a></li> <li><span class="br-rank">2</span><a href="https://blogread.cn/it/article/8694?f=hot3">AI Coding Agent 时代,我自己<small>近 3 天 79 浏览</small></a></li> <li><span class="br-rank">3</span><a href="https://blogread.cn/it/article/8688?f=hot3">01 引言:软件工程范式的五十年之变<small>近 3 天 78 浏览</small></a></li> <li><span class="br-rank">4</span><a href="https://blogread.cn/it/article/8695?f=hot3">从”内容治理”到”行为治理”:中国智能体治理<small>近 3 天 73 浏览</small></a></li> <li><span class="br-rank">5</span><a href="https://blogread.cn/it/article/8693?f=hot3">如何写好设计文档?<small>近 3 天 73 浏览</small></a></li> <li><span class="br-rank">6</span><a href="https://blogread.cn/it/article/4088?f=hot3">浅谈MySQL索引背后的数据结构及算法<small>近 3 天 71 浏览</small></a></li> <li><span class="br-rank">7</span><a href="https://blogread.cn/it/article/8690?f=hot3">美团海报生成 AIGC 技术创新与实践<small>近 3 天 66 浏览</small></a></li> <li><span class="br-rank">8</span><a href="https://blogread.cn/it/article/4015?f=hot3">程序员技术练级攻略<small>近 3 天 59 浏览</small></a></li> <li><span class="br-rank">9</span><a href="https://blogread.cn/it/article/8671?f=hot3">Loop Engineering 实践:我把<small>近 3 天 56 浏览</small></a></li> <li><span class="br-rank">10</span><a href="https://blogread.cn/it/article/8692?f=hot3">全是好东西!HTML command属性和J<small>近 3 天 55 浏览</small></a></li> </ol> </section> <div class="br-ad-slot br-ad-sidebar"> <div id="_u7013829"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u7013829", container: "_u7013829", async: true }); </script> </div> </aside> </main> <footer class="br-shell" style="padding-top:12px;padding-bottom:20px;color:var(--br-muted);font-size:13px;"> <div style="text-align:center;line-height:1.9;"> © 2009 - 2026 by blogread.cn  ·  微博:<a href="https://weibo.com/blogread" target="_blank" style="color:var(--br-accent)">@IT技术博客大学习</a>  ·  <span class="news-footer-trust-links"><a href="/about.html">关于</a> · <a href="/contact.html">联系</a> · <a href="/privacy.html">隐私</a> · <a href="/disclaimer.html">内容来源声明</a></span>  ·  <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备15002552号-1</a> </div> </footer> <!-- Bootstrap 5 bundle (含 Popper); 不再依赖 jQuery。 --> <script src="/plugins/bootstrap-5.3.8/js/bootstrap.bundle.min.js"></script> <script src="/assets/frontend-modern/reader-actions.js"></script> </body> </html>