想念 jQuery

jQuery刚推出时我拒绝使用它,因为觉得额外代码对网站负担太重。如今想来都觉得后怕。

 💬 63 条评论 |  javascript | 

共有 63 条讨论

  1. 我真的很想有天尝试WebAssembly

    1. 我尝试WebAssembly时发现它特别适合处理大量数值变量,因为能用整数等占用更少内存的数据类型。但涉及字符串时,直接用JavaScript反而更简单。或许两者结合才是上策。

  2. 目前还在开发中。Dioxus的亚秒级响应试图让开发体验接近普通TypeScript Web框架,但尚未完全实现。不过两者性能相当接近(不计UTF-8转UTF-16的开销),如果你足够喜欢Rust这门语言,或许会享受开发过程,但它可能还不适合生产环境。

  3. 它存在若干缺点,但最大的问题在于:你必须在实际代码之外额外部署整个WebAssembly标准库实现,还得加上运行所需的JavaScript。这本质上就是现代版的Java小程序(实际上更糟糕,因为Java小程序至少会使用用户电脑已安装的Java环境)。

  4. “更好”是指性能?还是易用性?:) 另外方便的话,能否透露你在应用中将Wasm部署在哪个环节?我正尝试理解Wasm的适用场景。

    祝你愉快 🙂

    1. 性能更优,因为它更贴近硬件且抽象层更少。易用性取决于具体场景——对我而言计算物理模拟时较为复杂,但运行起来相当简单:我用Emscripten编译wasm,代码用C++编写。

      若你的应用需要webgl和/或webgpu,它就是绝佳选择

  5. 听着,我曾经很喜欢jQuery。它在那个时代确实是款好工具。但如今VanillaJS才是正道。

    1. 我记得有个阶段,所有人都痛恨jQuery,争相从项目中移除jQuery依赖,只用原生JavaScript替代。

    2. 这完全取决于你构建什么。

      对于需要基本交互和表单验证的网站,当然可以。

      但如果是Web应用,我可不想重新实现并维护那些成熟框架里已有的功能。

        1. 这选择真奇怪。你为何要举微库的例子,而不是 React、Angular、Vue、Next、D3、TypeScript、Express、Webpack、Vite、Axios、Jest 或 date-fns 之类?

          is-odd 可能十行代码就能实现,但组件框架或与其良好集成的路由库可没这么简单。

          1. 正因这个微库完美诠释了JS生态的弊病。它不仅真实存在且被npm收录,更拥有数百万次安装量。当然,重复造轮子确实是另一大罪过。但请重读你自己的评论,数数你列举了多少功能完全重叠的框架。

            1. 针对相同或相似的整体用例存在多种解决方案,这并非JS独有现象。

              JavaScript不像Java或C#那样拥有单一核心所有者,因此绝大多数技术都由社区开发。某些场景需要不同方案(React、Angular、Vue),而随着标准新增特性,整体更优的解决方案也会应运而生(Momentjs→date-fns,以及lodash和jQuery事实上被淘汰的趋势)。

              框架与最佳实践每月更迭的现象,在十年前ES6标准问世、语言应用迎来爆发期时确实存在,但人们至今仍固守这种认知。

              is-odd包的批评或许有其道理,但被过度夸大了。

          2. 兄弟,我认为若他们真要构建需要可复用性与快速扩展的大型应用… 我认为路由库就是典型例子——谁愿意每次都从头重构?试着自己从零构建它,确保能在任何复杂Web应用场景下运行,你就会明白。

            兄弟,我同意你的观点,这取决于你构建什么项目。

          3. 提到这个真是个奇怪的选择

            因为这恰恰是JS“不愿重构和维护已有功能”理念演变成疯狂的绝佳例证。随便看个小项目的package-lock.json文件,动辄上万行。那个检测奇数的小包每周下载量高达50万次,靠。而这堆无用垃圾居然还依赖着is-number库…JS生态系统简直烂透了。

    3. 你能想象用纯净的vanilla js、html和css构建功能复杂的现代网页应用吗?想复用页面组件就得反复重写HTML代码,每个功能都要对应一堆意大利面式的JS文件。听着简直像噩梦

      1. 听起来你当年根本没真正开发过大型JavaScript应用。纯JavaScript完全可以组织成封装良好的“类”,拆分成可复用的独立文件。

        当然你也可以直接把一堆垃圾代码塞进HTML的script标签里草草了事——这大概就是大多数人的做法。

      2. 我完全做得到。因为维护自己按规范编写的代码——尤其是保持一致性的代码——远比追查依赖模块的意外行为轻松得多。这种优势在长期开发中,轻松抵消了前期投入的额外精力。

        前提是你确实建立了良好的代码规范和开发策略。你应该有这些吧?

  6. 说得对。一个小应用程序,文件夹突然比项目本身还重。

    1. 代码微不足道,文件夹却像个行李箱

  7. 如今我们使用jQuery的90%理由都体现在DOM API上…若想仅凭jQuery构建Web应用,尽管放手去做。重新认识我们当初为何要开发框架吧。

    1. 他们只想让技术停滞。他们执着于jQuery,只因熟悉它,它勉强能完成任务,且不愿学习新事物。他们漠视框架诞生的初衷,甚至认为这根本是个笑话。

      1. 我们想终结的不是技术本身。我们反对的是JavaScript的疯狂。别敢用“技术”这个高尚词汇来形容这堆糟糕的代码。

      2. 自从jsx出现后浏览器已经进步了

    1. 这就是我用次日达空运所有node_modules的原因,延迟虽然垃圾但都能瞬间加载

    2. 如今99%的node_modules都是构建和代码检查测试库。如果停止这些操作,node_modules绝对能控制在合理大小!

    3. 那些想当自己供应链载体的人啊

    4. 其实不少东西最终还是会被纳入最终版本。虽非全部,但数量可观

      1. 不过打包质量取决于开发者——笑到最后的才是赢家

    5. 没人。制造梗图的人根本不写Web应用。这只对那些懒得做原生应用的Electron开发者有意义。

  8. 其他语言就不同吗?区别仅在于npm将依赖项保存在本地,所以你能看到它们。但maven、pip、nuget等工具同样会下载依赖项,而庞大的框架在任何系统中都必然占用等量的磁盘空间。

    1. Maven/Gradle占空间少,因为jar包是压缩的。

      1. 说的是Maven。Gradle是构建工具而非依赖库(Maven恰好兼具两者功能)。

            1. Kotlin > C# > Java,有异议尽管来辩

            2. Kotlin确实更优,你说得对。有天想试试

          1. 作为构建工具:是
            作为工件仓库:否

    2. 典型Python应用的依赖树比JS小3..5倍。

  9. jQuery刚推出时我拒绝使用它,因为觉得额外代码对网站负担太重。如今想来都觉得后怕。

    1. 希望你明白这有多荒谬。当年网络连接不仅慢得多,而且如果你真打算把整个node_modules文件夹发给客户,最好先好好研究一下构建管道。通常99%的依赖关系树属于开发依赖项,这些本就不该出现在生产环境中。况且如今用现代框架构建的生产应用体量,往往比当年jQuery应用还要小(因为jQuery不支持树摇动优化)。

      1. 整个子版块充斥着自视甚高的后端开发者。

        1. 倒也不尽然,多数是学生和年轻人。这个版块本质上就是个“哈哈js类型强制真搞笑”的漫长梗库。

  10. 谁能帮我创建一个JavaScript标准库,直接打包到浏览器和运行时框架里?

    选取最常用的1000个包,稍加整理,就能成为标准库。

      1. 这正是那位用户的要求。去创建一个吧。

  11. npm <=6 版本的 Node 模块应减少依赖其他 Node 模块的数量。务必实现。

  12. 为什么整个评论区都在讨论 jQuery?这梗图根本没提到它啊?

    编辑:忽略,没看标题

  13. 当然啦,既然能把所有代码塞进一个文件发给客户端,谁还需要拆分呢。

  14. 笑死但说得对😭 文件夹里塞太多文件和子文件夹了

  15. 我有个Rails应用,用几个Node包来拼接压缩CSS。node_modules居然4G!搞什么鬼?!

  16. 若讨论不使用Node模块的Web应用,构建大规模Web应用时需考量代码复用性、渲染性能及开发效率。

  17. 听我说伙计们,我们将打造一个比jQuery更优秀的全新框架,让JavaScript重焕辉煌。

  18. 我敢打赌,对程序员来说这很有趣

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

你也许感兴趣的: