 #  HashCash Web Worker Revolution 

 

  ![HashCash Web Worker Revolution](https://cdn.richeyweb.com/images/articles/hashcash-web-worker-revolution/web-worker-responsive-ui.webp)    I'm excited to announce the release of [Captcha - HashCash](/software/joomla/plugins/captcha-hashcash) version 5.5.0 – a major upgrade that finally banishes one of the last remaining pain points using a web worker: UI freezes during high-difficulty [proof-of-work](/blog/development/hashcash-free-privacy-first-captcha-for-joomla-in-2026 "HashCash: Free, Privacy-First CAPTCHA for Joomla in 2026") calculations.

If you've ever cranked up the difficulty (or enabled "punish" mode for detected [bots](/blog/development/one-sh-tty-email-that-made-me-finally-do-something-about-spam "One Sh*tty Email That Made Me Finally Do Something About Spam")) and watched your form page turn into a beach ball spinner... this update is for you. Joomla deserves a world-class CAPTCHA, and this plugin is the real deal.

## What Was the Problem?

Captcha - HashCash has always been a true [Hashcash](https://en.wikipedia.org/wiki/Hashcash)-style proof-of-work system: Your browser grinds away finding a nonce that makes the hash start with enough leading zeros. It's invisible, privacy-friendly, and brutally effective against bots.

But... all that hashing happened on the main JavaScript thread – the same thread responsible for rendering your page, handling clicks, and keeping everything snappy.

Result? At higher difficulty levels or using the GPU resistant algorithms, the page could freeze for seconds – or even minutes on slower devices. Users might think the form is broken, and mobile battery life took a hit. The recent PBKDF2 algorithm additions made this problem even more noticeable.

## Implementing a Web Worker

In version 5.5.x (culminating in 5.5.2), we completely refactored to implement multithreading - putting the heavy lifting in a separate thread:

- Proof-of-work mining now runs in a dedicated Web Worker – a separate background thread that doesn't touch the main UI thread at all.
- The worker is created lazily (only when needed) and terminated automatically once a solution is found – saving memory and CPU.
- Mining starts only once per page load (or restarts only if punish mode escalates difficulty).
- Added Link rel="preload" header for the worker script – it's fetched immediately on page load, so when mining begins, there's zero network delay.
 
## Real-World Performance Wins

- No more freezes: Even at extreme difficulty (even punish mode), your form page stays fully responsive. Users can keep typing or scrolling while the background thread grinds away.
- Faster start times: Preloading means mining begins instantly on first interaction.
- Battery-friendly: Work stops as soon as a solution is found – no lingering threads.
- Mobile bliss: Tested on low-end devices – smooth as ever.
 
## Why This Matters for Bot Protection

Bots don't care about UI freezes – they'll grind forever. But now you don't have to suffer for strong protection. Crank that difficulty, enable punish mode with confidence, and watch bots burn CPU cycles while your human visitors enjoy a seamless experience.

This upgrade keeps Captcha - HashCash as one of the most faithful modern implementations of Adam Back's original 1997 Hashcash idea – with real verifiable stamps, optional memory-hard modes, and now buttery-smooth performance.



- [      email ](mailto:?subject=HashCash+Web+Worker+Revolution&body=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fhashcash-web-worker-revolution)
- [      facebook ](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fhashcash-web-worker-revolution)
- [      x-twitter ](https://twitter.com/intent/tweet?text=HashCash+Web+Worker+Revolution%3A+https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fhashcash-web-worker-revolution)
- [      linkedin ](http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fhashcash-web-worker-revolution&title=HashCash+Web+Worker+Revolution&summary=I%27m+excited+to+announce+the+release+of+Captcha+-+H...)
- [      pinterest ](http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fhashcash-web-worker-revolution&media=https%3A%2F%2Fcdn.joomla.org%2Fimages%2Fjoomla-org-og.jpg&description=HashCash+Web+Worker+Revolution)
 


 

   [  Previous article: Ad Block Detection for Joomla Updated   Ad Block Detection for Joomla Updated ](/blog/development/ad-block-detection-for-joomla-updated) [  Next article: WebGL Backgrounds for Faster Page Loads  WebGL Backgrounds for Faster Page Loads  ](/blog/development/webgl-backgrounds-for-faster-page-loads)  

##### We Value Your Privacy

 

We use cookies to enhance your experience and for traffic analysis. By continuing to visit this site you agree to our use of cookies.

[Privacy Policy](/privacy-policy)

 Details 

###### Google Tag Manager Items

- Ad Storage
- Ad User Data
- Ad Personalization
- Analytics Storage
- Functionality Storage
- Personalization Storage
- Security Storage
 
 

 

 

 

 

 Decline Accept
```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.richeyweb.com/#organization","name":"RicheyWeb","url":"https://www.richeyweb.com/","logo":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/logo/richeyweb.svg","contentUrl":"https://www.richeyweb.com/images/logo/richeyweb.svg","width":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"@id":"https://www.richeyweb.com/#logo"},"image":{"@id":"https://www.richeyweb.com/#logo"},"sameAs":["https://x.com/ComRicheyweb","https://www.facebook.com/RicheyWebDev/","https://www.youtube.com/channel/UCxnVG8BwOvQRO7hVqNX7T2g","https://community.joomla.org/service-providers-directory/listings/115:richeyweb.html"],"description":"RicheyWeb is a custom software developer specializing in Joomla extensions.","ContactPoint":[{"@type":"ContactPoint","url":"https://www.richeyweb.com/contact-us","telephone":"903-873-8460","contactType":"Owner/Administrator","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"},{"@type":"ContactPoint","url":"https://www.richeyweb.com/bugs","telephone":"903-873-8460","contactType":"Technical Support","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"}],"knowsAbout":["Computer programming",{"@type":"Thing","name":"Computer programming","sameAs":["https://en.wikipedia.org/wiki/Computer_programming","https://www.wikidata.org/wiki/Q80006","https://g.co/kg/m/01mf_"]},"PHP",{"@type":"Thing","name":"PHP","sameAs":["https://en.wikipedia.org/wiki/PHP","https://www.wikidata.org/wiki/Q59","https://g.co/kg/m/060kv"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"arduino","Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"White hat",{"@type":"Thing","name":"White hat","sameAs":["https://en.wikipedia.org/wiki/White_hat_(computer_security)","https://www.wikidata.org/wiki/Q7995625","https://g.co/kg/m/03ns_5"]},"Search engine optimization",{"@type":"Thing","name":"Search engine optimization","sameAs":["https://en.wikipedia.org/wiki/Search_engine_optimization","https://www.wikidata.org/wiki/Q180711","https://g.co/kg/m/019qb_"]},"Search engine marketing",{"@type":"Thing","name":"Search engine marketing","sameAs":["https://en.wikipedia.org/wiki/Search_engine_marketing","https://www.wikidata.org/wiki/Q846132","https://g.co/kg/m/06mw8r"]},"Digital marketing",{"@type":"Thing","name":"Digital marketing","sameAs":["https://en.wikipedia.org/wiki/Digital_marketing","https://www.wikidata.org/wiki/Q1323528","https://g.co/kg/g/122hcnps"]},"Web hosting service",{"@type":"Thing","name":"Web hosting service","sameAs":["https://en.wikipedia.org/wiki/Web_hosting_service","https://www.wikidata.org/wiki/Q5892272","https://g.co/kg/m/014pz4"]},"Email hosting service",{"@type":"Thing","name":"Email hosting service","sameAs":["https://en.wikipedia.org/wiki/Email_hosting_service","https://www.wikidata.org/wiki/Q5368818","https://g.co/kg/m/09w60m"]},"Internet hosting service",{"@type":"Thing","name":"Internet hosting service","sameAs":["https://en.wikipedia.org/wiki/Internet_hosting_service","https://www.wikidata.org/wiki/Q1210425","https://g.co/kg/m/09w5yw"]},"Virtual hosting",{"@type":"Thing","name":"Virtual hosting","sameAs":["https://en.wikipedia.org/wiki/Virtual_hosting","https://www.wikidata.org/wiki/Q588365","https://g.co/kg/m/024mvh"]},"Web performance",{"@type":"Thing","name":"Web performance","sameAs":["https://en.wikipedia.org/wiki/Web_performance","https://www.wikidata.org/wiki/Q7978612","https://g.co/kg/m/0gfj3f1"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"General Data Protection Regulation",{"@type":"Thing","name":"General Data Protection Regulation","sameAs":["https://en.wikipedia.org/wiki/General_Data_Protection_Regulation","https://www.wikidata.org/wiki/Q1172506","https://g.co/kg/m/0pk_7xs"]},"SERP",{"@type":"Thing","name":"SERP","sameAs":["https://en.wikipedia.org/wiki/SERP","https://www.wikidata.org/wiki/Q2205811","https://g.co/kg/g/11c5szp7kc"]},"Artificial intelligence",{"@type":"Thing","name":"Artificial intelligence","sameAs":["https://en.wikipedia.org/wiki/Artificial_intelligence","https://www.wikidata.org/wiki/Q11660","https://g.co/kg/m/0mkz"]},"Prompt engineering",{"@type":"Thing","name":"Prompt engineering","sameAs":["https://en.wikipedia.org/wiki/Prompt_engineering","https://www.wikidata.org/wiki/Q108941486","https://g.co/kg/g/11p6kpgt_n"]},"E-learning",{"@type":"Thing","name":"E-learning","sameAs":["https://en.wikipedia.org/wiki/E-learning_(theory)","https://www.wikidata.org/wiki/Q182250","https://g.co/kg/g/122czm1f"]},"Sharable Content Object Reference Model",{"@type":"Thing","name":"Sharable Content Object Reference Model","sameAs":["https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model","https://www.wikidata.org/wiki/Q827811","https://g.co/kg/m/06_40"]},"Experience API",{"@type":"Thing","name":"Experience API","sameAs":["https://en.wikipedia.org/wiki/Experience_API","https://www.wikidata.org/wiki/Q7807728","https://g.co/kg/g/1yw9ktxr8"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Nginx",{"@type":"Thing","name":"Nginx","sameAs":["https://en.wikipedia.org/wiki/Nginx","https://www.wikidata.org/wiki/Q306144","https://g.co/kg/m/02qft91"]},"MySQL",{"@type":"Thing","name":"MySQL","sameAs":["https://en.wikipedia.org/wiki/MySQL","https://www.wikidata.org/wiki/Q850","https://g.co/kg/m/04y3k"]}],"areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"memberOf":["Mensa International",{"@type":"Organization","name":"Mensa International","sameAs":["https://en.wikipedia.org/wiki/Mensa_International","https://www.wikidata.org/wiki/Q184194","https://g.co/kg/m/0140pf"]},"National Rifle Association",{"@type":"Organization","name":"National Rifle Association","sameAs":["https://en.wikipedia.org/wiki/National_Rifle_Association","https://www.wikidata.org/wiki/Q863259","https://g.co/kg/m/0j6f9"]},"CompTIA",{"@type":"Organization","name":"CompTIA","sameAs":["https://en.wikipedia.org/wiki/CompTIA","https://www.wikidata.org/wiki/Q597534","https://g.co/kg/m/040shq"]},"ISFCE LLC",{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://isfce.com","https://g.co/kg/g/11wxm5r0rg"]}],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"Joomla 3 Certified Administrator","credentialCategory":"Certification","description":"Administrator Exam is the first available Joomla! certification exam","recognizedBy":{"@type":"Organization","name":"Open Source Matters, Inc.","sameAs":["https://en.wikipedia.org/wiki/Open_Source_Matters,_Inc.","https://g.co/kg/g/11f00wvjhz"]},"url":"https://certification.joomla.org/certified-user-directory/michael-richey","about":["Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/badge.webp","contentUrl":"https://www.richeyweb.com/images/contact/badge.webp","width":{"@type":"QuantitativeValue","value":300,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":86,"unitCode":"PX"},"caption":"Joomla 3 Certified Administrator"}},{"@type":"EducationalOccupationalCredential","name":"Certified Computer Examiner","credentialCategory":"Certification","description":"Internationally recognized computer forensics certifiecation","recognizedBy":{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://en.wikipedia.org/wiki/ISFCE_LLC","https://g.co/kg/g/11wxm5r0rg"]},"url":"https://isfce.com/","about":["Digital forensics",{"@type":"Thing","name":"Digital forensics","sameAs":["https://en.wikipedia.org/wiki/Digital_forensics","https://www.wikidata.org/wiki/Q3246940","https://g.co/kg/m/0cnxzfx"]},"Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"Mobile device forensics",{"@type":"Thing","name":"Mobile device forensics","sameAs":["https://en.wikipedia.org/wiki/Mobile_device_forensics","https://www.wikidata.org/wiki/Q6887097","https://g.co/kg/m/06zp3tp"]},"Network forensics",{"@type":"Thing","name":"Network forensics","sameAs":["https://en.wikipedia.org/wiki/Network_forensics","https://www.wikidata.org/wiki/Q7001032","https://g.co/kg/m/05pb280"]},"Database forensics",{"@type":"Thing","name":"Database forensics","sameAs":["https://en.wikipedia.org/wiki/Database_forensics","https://www.wikidata.org/wiki/Q5227405","https://g.co/kg/m/0cgqsy"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/isfce-cce.webp","contentUrl":"https://www.richeyweb.com/images/contact/isfce-cce.webp","width":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"caption":"Certified Computer Examiner"}}],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Web Services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Hosting"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Development"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Search Engine Optimization"}}]}},{"@type":"WebSite","@id":"https://www.richeyweb.com/#website","url":"https://www.richeyweb.com/","name":"RicheyWeb","publisher":{"@id":"https://www.richeyweb.com/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.richeyweb.com/search?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string","valueMaxLength":256,"valueMinLength":2,"valuePattern":"^[A-Za-z0-9\\s]+$"}},"creator":{"@id":"https://www.richeyweb.com/#organization"},"copyrightHolder":{"@id":"https://www.richeyweb.com/#organization"}},{"@type":"WebPage","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#webpage","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution","name":"HashCash Web Worker Revolution","description":"Discover how Captcha - HashCash v5.5.0 uses a web worker to eliminate UI freezes during high-difficulty proof-of-work, ensuring smooth bot protection.","isPartOf":{"@id":"https://www.richeyweb.com/#website"},"about":{"@id":"https://www.richeyweb.com/#organization"},"inLanguage":"en-GB"},{"@type":"Article","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/articles/hashcash-web-worker-revolution/web-worker-responsive-ui.webp","contentUrl":"https://www.richeyweb.com/images/articles/hashcash-web-worker-revolution/web-worker-responsive-ui.webp","width":{"@type":"QuantitativeValue","value":1280,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":720,"unitCode":"PX"},"caption":"HashCash Web Worker Revolution","representativeOfPage":true},"headline":"HashCash Web Worker Revolution","description":"Discover how Captcha - HashCash v5.5.0 uses a web worker to eliminate UI freezes during high-difficulty proof-of-work, ensuring smooth bot protection.","author":{"@type":"Person","name":"Michael Richey","url":"https://www.richeyweb.com/contact-us","@id":"https://www.richeyweb.com/contact-us#person"},"datePublished":"2025-12-16T00:00:00+00:00","dateModified":"2026-03-30T00:00:00+00:00","about":["Hashcash",{"@type":"Thing","name":"Hashcash","sameAs":["https://en.wikipedia.org/wiki/Hashcash","https://www.wikidata.org/wiki/Q357569","https://g.co/kg/m/02qsnf"]},"Proof of work",{"@type":"Thing","name":"Proof of work","sameAs":["https://en.wikipedia.org/wiki/Proof_of_work","https://www.wikidata.org/wiki/Q7249984","https://g.co/kg/m/05bdrw"]},"Web worker",{"@type":"Thing","name":"Web worker","sameAs":["https://en.wikipedia.org/wiki/Web_worker","https://www.wikidata.org/wiki/Q7978628","https://g.co/kg/m/09g8pbd"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"CAPTCHA",{"@type":"Thing","name":"CAPTCHA","sameAs":["https://en.wikipedia.org/wiki/CAPTCHA","https://www.wikidata.org/wiki/Q484598","https://g.co/kg/m/01hl4j"]}],"mentions":["Adam Back",{"@type":"Person","name":"Adam Back","sameAs":["https://en.wikipedia.org/wiki/Adam_Back","https://www.wikidata.org/wiki/Q348671","https://g.co/kg/m/02q93bn"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"Web Cryptography API",{"@type":"Thing","name":"Web Cryptography API","sameAs":["https://en.wikipedia.org/wiki/Web_Cryptography_API","https://www.wikidata.org/wiki/Q30688210","https://g.co/kg/g/11dy_ksq2m"]},"PBKDF2",{"@type":"Thing","name":"PBKDF2","sameAs":["https://en.wikipedia.org/wiki/PBKDF2","https://www.wikidata.org/wiki/Q3952834","https://g.co/kg/m/05c24s"]},"Secure Hash Algorithms",{"@type":"Thing","name":"Secure Hash Algorithms","sameAs":["https://en.wikipedia.org/wiki/Secure_Hash_Algorithms","https://www.wikidata.org/wiki/Q387688","https://g.co/kg/m/0vpn3kv"]},"General Data Protection Regulation",{"@type":"Thing","name":"General Data Protection Regulation","sameAs":["https://en.wikipedia.org/wiki/General_Data_Protection_Regulation","https://www.wikidata.org/wiki/Q1172506","https://g.co/kg/m/0pk_7xs"]},"Multithreading",{"@type":"Thing","name":"Multithreading","sameAs":["https://en.wikipedia.org/wiki/Multithreading_(computer_architecture)","https://www.wikidata.org/wiki/Q17027453","https://g.co/kg/m/02qgktz"]},{"@type":"Article","@id":"https://www.richeyweb.com/blog/development/one-sh-tty-email-that-made-me-finally-do-something-about-spam#article","url":"https://www.richeyweb.com/blog/development/one-sh-tty-email-that-made-me-finally-do-something-about-spam","name":"One Sh*tty Email That Made Me Finally Do Something About Spam","headline":"One Sh*tty Email That Made Me Finally Do Something About Spam","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/articles/plg_contact_validemail/validemail.webp","contentUrl":"https://www.richeyweb.com/images/articles/plg_contact_validemail/validemail.webp","width":{"@type":"QuantitativeValue","value":540,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":302,"unitCode":"PX"},"caption":"One Sh*tty Email That Made Me Finally Do Something About Spam"},"author":{"@type":"Person","name":"Michael Richey","url":"https://www.richeyweb.com/contact-us","@id":"https://www.richeyweb.com/contact-us#person"}},{"@type":"Article","@id":"https://www.richeyweb.com/blog/development/hashcash-free-privacy-first-captcha-for-joomla-in-2026#article","url":"https://www.richeyweb.com/blog/development/hashcash-free-privacy-first-captcha-for-joomla-in-2026","name":"HashCash: Free, Privacy-First CAPTCHA for Joomla in 2026","headline":"HashCash: Free, Privacy-First CAPTCHA for Joomla in 2026","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/articles/hashcash-free-privacy-first-captcha-for-joomla-in-2026/trained-monkey-captcha.webp","contentUrl":"https://www.richeyweb.com/images/articles/hashcash-free-privacy-first-captcha-for-joomla-in-2026/trained-monkey-captcha.webp","width":{"@type":"QuantitativeValue","value":1360,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":765,"unitCode":"PX"},"caption":"HashCash: Free, Privacy-First CAPTCHA for Joomla in 2026"},"author":{"@type":"Person","name":"Michael Richey","url":"https://www.richeyweb.com/contact-us","@id":"https://www.richeyweb.com/contact-us#person"}}],"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#article","isPartOf":{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#webpage"},"publisher":{"@id":"https://www.richeyweb.com/#organization"},"citation":[{"@type":"CreativeWork","@id":"https://www.richeyweb.com/software/joomla/plugins/captcha-hashcash#softwareapplication","url":"https://www.richeyweb.com/software/joomla/plugins/captcha-hashcash","name":"Captcha - HashCash"},{"@type":"CreativeWork","@id":"https://en.wikipedia.org/wiki/Hashcash#creativework","url":"https://en.wikipedia.org/wiki/Hashcash"}],"keywords":"Captcha - HashCash, version 5.5.0, web worker, UI freezes, high-difficulty proof-of-work, proof-of-work, punish mode, main JavaScript thread, GPU resistant algorithms, multi threading, Web Worker, proof-of-work mining, leading zeros, worker script, extreme difficulty, level 32 punish mode, Bot Protection, Bots, Hashcash idea","articleSection":"Development","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution","video":{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#video"},"hasPart":[{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-what-was-the-problem_2_1"},{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-implementing-a-web-worker_2_2"},{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-real-world-performance-wins_2_3"},{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-why-this-matters-for-bot-protection_2_4"},{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#video"}]},{"@type":"VideoObject","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#video","name":"WEB WORKERS made my code over 100x faster (almost ZERO blocking time)","description":"Web workers provide a way to get some sort of multi threading capabilities in JavaScript. They have limitations, but in the right circumstances they can lead to huge performance improvements. In this video, I show how I offload a ton of heavy computations to a worker thread to decrease a large amount of blocking time to almost zero.","thumbnailUrl":"https://i.ytimg.com/vi/sMa6d1dXJ-0/maxresdefault.jpg","uploadDate":"2024-12-11T00:00:00+00:00","duration":"PT380S","contentUrl":"https://www.youtube.com/watch?v=sMa6d1dXJ-0","embedUrl":"https://www.youtube.com/embed/sMa6d1dXJ-0"},{"@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex","@type":"ItemList","name":"HashCash Web Worker Revolution","numberOfItems":4,"itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"WPHeader","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-what-was-the-problem_2_1","name":"What Was the Problem?","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#toc-what-was-the-problem_2_1"}},{"@type":"ListItem","position":2,"item":{"@type":"WPHeader","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-implementing-a-web-worker_2_2","name":"Implementing a Web Worker","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#toc-implementing-a-web-worker_2_2"}},{"@type":"ListItem","position":3,"item":{"@type":"WPHeader","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-real-world-performance-wins_2_3","name":"Real-World Performance Wins","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#toc-real-world-performance-wins_2_3"}},{"@type":"ListItem","position":4,"item":{"@type":"WPHeader","@id":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#articleindex-toc-why-this-matters-for-bot-protection_2_4","name":"Why This Matters for Bot Protection","url":"https://www.richeyweb.com/blog/development/hashcash-web-worker-revolution#toc-why-this-matters-for-bot-protection_2_4"}}]}]}
```
