Dvorak
Dvorak

Dvorak Chen

All Posts in 2023.5


为什么我在css里使用功能类优先

本文探讨了CSS开发中从语义类优先向功能类优先的思维转变,揭示了现代前端开发中样式复用的困境与解决方案。传统语义类CSS通过类名定义语义化样式,却因HTML结构差异导致样式难以复用,最终迫使开发者频繁使用内联样式破坏代码整洁。功能类优先的写法通过直接在HTML类中应用具体样式(如`text-center`),消除了CSS文件与HTML的割裂感,使样式实现更直观可控。这种转变并非完全否定语义类的价值,而是承认在复杂布局场景下,功能类能更高效地应对元素层级带来的样式隔离问题。作者强调功能类的真正优势在于:1)消除CSS文件冗余 2)避免样式覆盖冲突 3)提升调试效率——开发者无需在HTML与CSS文件间反复跳转。文章指出,语义类仍适用于全局主题设置和稳定元素(如按钮)的样式定义,而功能类则更适合动态布局场景。这种混合策略的关键在于理解"优先"二字,即在能发挥各自优势的场景灵活切换。当开发者开始思考"如何通过功能类实现响应式布局"而非"如何让语义类复用"时,代码的可维护性将显著提升。最终引发思考:在组件化开发盛行的今天,CSS方法论的选择是否应该与项目复杂度正相关?--Qwen3

css Functional First Semantic vs Utility Tailwind CSS UI Libraries CSS Best Practices

KMP 算法

KMP算法通过优化字符串匹配过程将时间复杂度从O(mn)提升至O(m+n),其核心在于巧妙利用字符串本身的结构特征实现跳过冗余比较。传统滑动窗口算法在字符不匹配时需回退目标字符串指针,而KMP通过维护一个next数组记录模式串的最长相同前后缀长度,使不匹配时仅需调整模式串指针即可继续匹配。这种设计的关键在于将模式串的前后缀特性转化为指针移动规则——当模式串第j位与目标串当前位不匹配时,通过next[j-1]确定新的比较起始点,此过程隐含了已匹配部分的子串必然与模式串前缀重叠的数学特性。构建next数组时,双指针l和r同步移动的策略实现了O(n)时间复杂度,其本质是动态规划地利用已计算的前后缀长度信息。该算法的精妙之处在于将看似独立的字符比较问题转化为模式串自相似结构的利用,通过预处理将匹配过程的不确定性转化为确定性的指针移动规则。这种设计启发我们思考:在数据结构与算法设计中,如何通过预处理将问题域中的隐含规律显式化?当面对需要频繁比较的场景时,是否总能通过提取数据特征来优化计算效率?这些思考或许能为更广泛的算法优化提供新视角。--Qwen3

Algorithms KMP KMP Algorithm String Matching Next Array Efficient Search

浅谈 Javascript 事件循环

JavaScript的单线程执行机制通过事件循环处理任务,所有代码执行和异步回调均在主线程按顺序进行。事件循环包含宏任务队列和微任务队列,宏任务包括整体代码、setTimeout/setInterval回调等,微任务包括Promise.then/catch/finally等,每次循环优先清空微任务队列再执行宏任务。setTimeout的第二个参数表示回调进入宏任务队列的延迟时间而非立即执行时间,实际执行时机取决于事件循环状态。当执行耗时操作时(如一次性创建5万个DOM元素),会阻塞后续任务和浏览器渲染,导致页面卡顿。通过将任务拆分为多个小块(如每次创建250个元素),利用setTimeout将每个小块作为独立宏任务依次放入队列,可让浏览器在每次宏任务后清空微任务队列并触发页面渲染,实现平滑的渐进式更新。错误的优化方式如一次性用循环注册大量setTimeout宏任务,会导致队列被占满,反而延迟其他关键任务的执行。正确实现需通过递归注册setTimeout,在每次宏任务执行完毕后触发下一个任务,确保每次任务执行后浏览器获得渲染机会。这种分片处理方式能有效平衡任务执行与渲染频率,避免长时间阻塞主线程。--Qwen3

Javascript DOM Manipulation Event Loop Macrotask Queue Browser Rendering Performance Optimization

鸣谢

这是一篇以感谢为起点的文字却悄然埋下关于生命价值的思考当一个人的名字被郑重提及背后必然有值得探寻的故事Anduin Xue的健康被如此强调是否暗示着现代社会中被忽视的某种代价我们习惯用成就丈量价值却常常忘记每一份贡献都建立在生命能量的持续输出之上当感谢成为仪式化的表达时我们是否真正理解过他人背后付出的代价这篇文章像一面镜子照见所有在光鲜成果背后默默支撑的生命当我们在键盘上敲下致谢词时是否想过那些被省略的疲惫与坚持健康不是理所当然的底色而是需要被反复确认的生存根基当某个名字与健康被同时书写是否暗示着某种未说出口的警示这或许正是文字最精妙的留白它没有讲述任何故事却在空白处留下无数可能当我们凝视这份简短的致谢时是否听见了那些未被言说的岁月回响健康与成就之间的天平究竟该如何平衡这些问题的答案或许就藏在每个被我们忽略的日常选择里--Qwen3

Gratitude Anduin Xue Health Tips Wellness Journey Public Health Mindful Living