IT技术博客大学习 共学习 共进步
首页 / 苏洋
IT 2017-10-15 10:01:28 / 累计浏览 1,420

个人博客技术演进的流水账

这篇文章从个人博客的“搬家史”出发,串起了一个Web前端技术演进的缩影。 作者最初受困于商业博客平台的种种限制——域名不可控、内容易丢失、样式不自由,为了“把数据和控制权握在自己手里”,走上了自建博客之路。文章以这个起点展开,以博客系统的技术栈变迁为线索,梳理了Web开发的几个关键时期:从前后端不分的“SHTML+SSI”时代,到ASP/PHP动态脚本主导、MySQL普及的“前后端初分”时期;再到jQuery大行其道、前端资源开始分离,以及MV*框架、模块化构建工具与Node.js全栈模式兴起的高速迭代时代。 文中提及了SaBlog、WordPress、Ghost等具有代表性的博客系统,并剖析了它们在各自阶段如何体现当时的主流技术架构与痛点。作者的流水账,实际上记录了前端如何从一个“后台附属”逐渐走向工程化、复杂化并分担更多职责的过程。文章结尾留下的疑问,也为思考当下技术选型提供了一个历史参照。

IT 2017-10-15 10:00:29 / 累计浏览 1,980

Chrome runtime 不稳定(GC)导致插件绑定事件失败

作者在重构Chrome插件时遇到了一个令人头疼的间歇性问题:插件完成加载后,在初始化绑定`chrome.webRequest`等事件时会概率性失败,控制台抛出`Cannot read property ‘onBeforeSendHeaders’ of undefined`的错误,导致后续逻辑完全中断。尤其是在调试页面时,错误源还会在`extensions::guestViewEvents`和`extensions::runtime`等内部脚本之间反复切换,让人难以定位。 经过排查,问题的根源在于Chrome扩展运行时的不稳定,这很可能与V8引擎的垃圾回收(GC)机制有关。在GC发生时,某些在初始化期间依赖的底层对象或接口可能被意外回收或未就绪,从而导致访问失败。 针对这个棘手的环境问题,作者尝试了包括简化代码、调整生命周期钩子(如onload、DOMContentLoaded)执行顺序等常见方法,但均未奏效。最终,他采用了一个务实但有效的容错方案:在初始化代码外包裹`try-catch`,一旦捕获到异常,就立即触发`location.reload()`进行页面自动重载。由于故障本身是概率性的,通过这种快速的自动恢复机制,可以很大程度上规避初始化失败导致的功能完全不可用。虽然这并非从根源上解决了运行时不稳定的问题,但在这种特定场景下,却是一个能够保障插件可用性的巧妙“妥协”。