This document discusses asynchronous templating in Node. It describes the history of blocking templating in PHP and Ruby on Rails. It introduces Asynchronous JavaScript (AJS), a new templating library for Node that allows templates to continue rendering while waiting for asynchronous callbacks. AJS works by parsing templates to an AST, adding hooks around callbacks, recompiling optimized JavaScript, and executing in a VM. It aims to provide a familiar syntax while being fully non-blocking.
Bottleneck in Elixir Application - Alexey Osipenko Elixir Club
This document appears to be a presentation in a foreign language (not English) about performance bottlenecks in Elixir applications. It introduces the presenter, Alexey, and mentions that while Elixir has advantages over JavaScript for asynchronous programming, high loads can still cause performance problems. It concludes by thanking the audience and providing Alexey's contact information.
This document provides an introduction to Node.js and Mongoose. It discusses that Node.js is a JavaScript runtime built on Chrome's V8 engine for building fast and scalable network applications. It then summarizes key aspects of Node.js like its architecture, core modules, use of packages, and creating simple modules. It also introduces Express as a web framework and Mongoose as an ORM for MongoDB, summarizing their basic usage and schemas.
Project Loom aims to bring asynchronous programming to Java with virtual threads. Virtual threads allow blocking code to run asynchronously by scheduling continuations across lightweight threads. This avoids the "blue world" problem of rewriting synchronous code for asynchronous systems. It also enables scaling applications by utilizing non-blocking I/O without changing existing code or libraries. While virtual threads are not yet production-ready, Project Loom has the potential to improve scalability for Java applications without a major paradigm shift.
JavaScript is moving fast. Last year’s best practices are quickly becoming today’s anti-patterns as we experience fundamental shifts in the language. With so many outdated learning resources out there, it's hard to know if we're doing things right.
In this talk, Hunter Loftis will introduce us to the new rules of modern JavaScript. Whether you're a new developer trying to learn modern best practices or a veteran looking to break old habits, 2017 is your opportunity to level up!
MySQL::Replication (Melbourne Perl Mongers 2011-07)Alfie John
This document discusses MySQL replication, its limitations, and introduces MySQL::Replication as an alternative. MySQL::Replication uses a client/server model that is more fault tolerant and easy to recover from failures compared to MySQL's built-in replication. It also introduces relay caching to reduce bandwidth usage and server loads. The author is working to publish MySQL::Replication on CPAN.
The SPDY Protocol is likely going to be the successor of http. This short talk summarizes the most important points and includes a demo on how to migrate a Wordpress blog on httpd.
The presentation is an overview of Node.js on how to use it in developing web apps. It also describes the pros and cons it has along with why it got so much adaption in quick time.
Bottleneck in Elixir Application - Alexey Osipenko Elixir Club
This document appears to be a presentation in a foreign language (not English) about performance bottlenecks in Elixir applications. It introduces the presenter, Alexey, and mentions that while Elixir has advantages over JavaScript for asynchronous programming, high loads can still cause performance problems. It concludes by thanking the audience and providing Alexey's contact information.
This document provides an introduction to Node.js and Mongoose. It discusses that Node.js is a JavaScript runtime built on Chrome's V8 engine for building fast and scalable network applications. It then summarizes key aspects of Node.js like its architecture, core modules, use of packages, and creating simple modules. It also introduces Express as a web framework and Mongoose as an ORM for MongoDB, summarizing their basic usage and schemas.
Project Loom aims to bring asynchronous programming to Java with virtual threads. Virtual threads allow blocking code to run asynchronously by scheduling continuations across lightweight threads. This avoids the "blue world" problem of rewriting synchronous code for asynchronous systems. It also enables scaling applications by utilizing non-blocking I/O without changing existing code or libraries. While virtual threads are not yet production-ready, Project Loom has the potential to improve scalability for Java applications without a major paradigm shift.
JavaScript is moving fast. Last year’s best practices are quickly becoming today’s anti-patterns as we experience fundamental shifts in the language. With so many outdated learning resources out there, it's hard to know if we're doing things right.
In this talk, Hunter Loftis will introduce us to the new rules of modern JavaScript. Whether you're a new developer trying to learn modern best practices or a veteran looking to break old habits, 2017 is your opportunity to level up!
MySQL::Replication (Melbourne Perl Mongers 2011-07)Alfie John
This document discusses MySQL replication, its limitations, and introduces MySQL::Replication as an alternative. MySQL::Replication uses a client/server model that is more fault tolerant and easy to recover from failures compared to MySQL's built-in replication. It also introduces relay caching to reduce bandwidth usage and server loads. The author is working to publish MySQL::Replication on CPAN.
The SPDY Protocol is likely going to be the successor of http. This short talk summarizes the most important points and includes a demo on how to migrate a Wordpress blog on httpd.
The presentation is an overview of Node.js on how to use it in developing web apps. It also describes the pros and cons it has along with why it got so much adaption in quick time.
A brief overview of server side JavaScript usage focused on NodeJS.
Presented on DotNetters Tech Summit - 2015 RUET
Presenter: Md. Sohel Rana
Event Url: https://www.facebook.com/events/512834685530439/
ConvergeSE: We Will All Be Game DevelopersHunter Loftis
This document discusses how principles from game development can be applied to improve user interfaces. It provides three key ideas: 1) Minimize and isolate state by deriving state from minimal state variables and using pure functions; 2) Use immediate-mode rendering that is deterministic; 3) Separate rendering from simulation by using a time accumulator to allow variable frame rates. Examples are provided to demonstrate these concepts, such as using a time accumulator to allow for variable frame rates in the simulation. The document suggests that as app interfaces become more like games, these game development principles can help create simpler and more optimized user interfaces.
Node.js: Whats the Big Deal? Presented and JS Meetup ChicagoAziz Ali
Presentation on Node.js. Whats the big deal with Node.js.
Talk about Event Driven, Non-Blocking, and Single Threaded Nature of Node.js
I also show the opportunity that Node.js opens up to make ALL kinds of apps on any platform including desktop applications.
The document provides tips for optimizing a web application stack for performance and scalability. It recommends using Nginx for load balancing and reverse proxy, MongoDB for the database with appropriate indexing, PHP-FPM or Perl with non-blocking I/O for processing, and caching with Redis. It also suggests monitoring tools and techniques like sharding or replication for scaling the application.
Node.js is an event-driven, non-blocking web application platform built on Chrome's V8 JavaScript engine that allows servers to handle many concurrent users, making it scalable. Express.js is the most popular web application framework for Node.js, providing routing and view abstractions. When porting blocking Java code to asynchronous Node.js, callbacks must be used to ensure operations complete before returning data. The async module helps run asynchronous operations sequentially within callbacks.
This document discusses strategies for using Node.js alongside Java/Spring applications. It introduces J2V8, which allows running Node.js modules and the V8 JavaScript engine in Java. Examples are given for isomorphic React rendering using Nashorn or Node.js. The document also covers using Nashorn or script templating engines like EJS directly in Spring MVC. Performance benchmarks show J2V8 templating is faster than traditional Java approaches like JSP or Thymeleaf. Source code examples demonstrate setting up J2V8 with Spring Boot for building isomorphic web applications that leverage both Java and JavaScript.
Smalltalk in the pocket - Building applications for the iPhoneEsteban Lorenzano
Bring Smalltalk into new technologies is always a hard but exciting job. In this talk we take another step from those already made, and we walk one of the possible approaches to build iPhone applications using Pharo.
Gentle introduction to asynchronous programming on .NET stack. Async-await construct of .Net languages (e.g. C#), its benefits, threads, thread-pool, task, asp.net request handling etc.
Xtext beyond the defaults - how to tackle performance problemsHolger Schill
Nearly every Eclipse user is aware what Xtext is and what it is useful for. It is always a pleasure to see in which kind of areas it is used.
One reason is clearly, that it is really easy to build a first working example in no time. The grammar alone is sufficient and the rest is done by a code generator. Xtext will generate stub classes, that are ready to fill in individual logic for different areas.
By doing that most of the things just work, because Xtext comes with a lot of defaults that suits in most of the cases.
But as projects get bigger and the amount of models grow, the defaults might not scale and you might need to tweak your language to make working smooth again.
Here it becomes more complicated and you need to understand what’s going on under the covers.
In this session I will go through typical problems and solutions, that we have seen in customer projects. Sometimes it’s a tradeoff to tackle those problems, but it’s important to understand the implications.
For some typical examples I will go into details and explain what’s going on under the covers.
After the session attendees should have an idea how to tweak their own languages and why it might be worth the effort to migrate to a newer version of Xtext.
Hippo get together presentation solr integrationHippo
The document discusses integrating Solr into Hippo for search capabilities. It outlines problems with the current search architecture, objectives of improving search by integrating Solr, and how ContentBeans can be indexed using annotations to integrate them with Solr search results. Key points include fixing current problems, making search customizable, scalable, and document-oriented through Solr integration and indexing ContentBeans.
The document discusses using work queues with Gearman and CodeIgniter. It begins with an introduction to work queues, describing them as sequences of stored data or programs awaiting processing. It then discusses the client worker pattern for processing asynchronous jobs, some limitations of this approach, and how Gearman can help address those limitations by facilitating work distribution across languages and servers. The document provides instructions for installing and configuring Gearman to add work queue functionality.
Queues can provide parallel processing, cross language scripting and more! The talk was focused on Gearman but the principles apply to any alternative.
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...Natasha Rooney
My slides from my talk "Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks for Cache”" from Over the Air 2013 held in September in Bletchley Park. We had a good run-through of offline APIs in web, the mysteries of App Cache, and updates on the current status of ServiceWorker.
Ups and downs of enterprise Java app in a research settingCsaba Toth
This document discusses the author's experiences using various technologies like EJB, Spring, Hibernate, GWT, JBoss, and others in a research environment. It outlines some of the ups and downs of each technology, including limitations of EJB for long-running computations, challenges stretching the limits of Hibernate's ORM capabilities, and difficulties migrating applications between versions of JBoss. The author also shares experiences developing the UI with GWT and ExtJS and issues that can arise from bugs in translated JavaScript code. Several figures are referenced but omitted due to prior publication.
Site Performance - From Pinto to FerrariJoseph Scott
This document discusses ways to improve website performance from slow "Pinto" levels to faster "Ferrari" levels. It recommends using an opcode cache like APC to speed up PHP, optimizing databases with technologies like Memcached, using caching plugins in WordPress, and considering architectures with load balancing and replication. The goal is to identify bottlenecks and apply techniques that reduce page load times through an understanding of how websites and underlying technologies work.
ABRIDGED VERSION - Joys & frustrations of putting 34,000 lines of Haskell in...Saurabh Nanda
Slides for our talk given at Functional Conf 2017. Shared our experience of putting 34,000 lines of Haskell code in production at Vacation Labs. Please ping me on https://twitter.com/saurabhnanda if you'd like help with deploying Haskell in an industrial setting.
This document discusses using Hadoop and Elasticsearch for real-time analytics. It provides an overview of Elasticsearch, including how it is document-oriented, schema-free, distributed and fast. It also demonstrates indexing, retrieving, updating and deleting documents from Elasticsearch. The demo portion involves extracting data from a SQL database using Hive, transforming it with Hadoop/Hive, and loading it into Elasticsearch to run queries. Lessons learned focus on concurrency, filtering, field data caching and JVM memory usage.
The importance of search for modern applications is evident and nowadays it is higher than ever. A lot of projects use search forms as a primary interface for communication with a user. Though implementation of an intelligent search functionality is still a challenge and we need a good set of tools.
In this presentation, I will talk through the high-level architecture and benefits of Elasticsearch with some examples. Aside from that, we will also take a look at its existing competitors, their similarities, and differences.
This document discusses various techniques for debugging custom Ansible modules including using verbose logging levels, the Boto debug setting, Python logging, the q debugging library, and the Python debugger pdb. It provides an example of debugging a custom ec2_describe module and outputs from using these debugging methods.
A brief overview of server side JavaScript usage focused on NodeJS.
Presented on DotNetters Tech Summit - 2015 RUET
Presenter: Md. Sohel Rana
Event Url: https://www.facebook.com/events/512834685530439/
ConvergeSE: We Will All Be Game DevelopersHunter Loftis
This document discusses how principles from game development can be applied to improve user interfaces. It provides three key ideas: 1) Minimize and isolate state by deriving state from minimal state variables and using pure functions; 2) Use immediate-mode rendering that is deterministic; 3) Separate rendering from simulation by using a time accumulator to allow variable frame rates. Examples are provided to demonstrate these concepts, such as using a time accumulator to allow for variable frame rates in the simulation. The document suggests that as app interfaces become more like games, these game development principles can help create simpler and more optimized user interfaces.
Node.js: Whats the Big Deal? Presented and JS Meetup ChicagoAziz Ali
Presentation on Node.js. Whats the big deal with Node.js.
Talk about Event Driven, Non-Blocking, and Single Threaded Nature of Node.js
I also show the opportunity that Node.js opens up to make ALL kinds of apps on any platform including desktop applications.
The document provides tips for optimizing a web application stack for performance and scalability. It recommends using Nginx for load balancing and reverse proxy, MongoDB for the database with appropriate indexing, PHP-FPM or Perl with non-blocking I/O for processing, and caching with Redis. It also suggests monitoring tools and techniques like sharding or replication for scaling the application.
Node.js is an event-driven, non-blocking web application platform built on Chrome's V8 JavaScript engine that allows servers to handle many concurrent users, making it scalable. Express.js is the most popular web application framework for Node.js, providing routing and view abstractions. When porting blocking Java code to asynchronous Node.js, callbacks must be used to ensure operations complete before returning data. The async module helps run asynchronous operations sequentially within callbacks.
This document discusses strategies for using Node.js alongside Java/Spring applications. It introduces J2V8, which allows running Node.js modules and the V8 JavaScript engine in Java. Examples are given for isomorphic React rendering using Nashorn or Node.js. The document also covers using Nashorn or script templating engines like EJS directly in Spring MVC. Performance benchmarks show J2V8 templating is faster than traditional Java approaches like JSP or Thymeleaf. Source code examples demonstrate setting up J2V8 with Spring Boot for building isomorphic web applications that leverage both Java and JavaScript.
Smalltalk in the pocket - Building applications for the iPhoneEsteban Lorenzano
Bring Smalltalk into new technologies is always a hard but exciting job. In this talk we take another step from those already made, and we walk one of the possible approaches to build iPhone applications using Pharo.
Gentle introduction to asynchronous programming on .NET stack. Async-await construct of .Net languages (e.g. C#), its benefits, threads, thread-pool, task, asp.net request handling etc.
Xtext beyond the defaults - how to tackle performance problemsHolger Schill
Nearly every Eclipse user is aware what Xtext is and what it is useful for. It is always a pleasure to see in which kind of areas it is used.
One reason is clearly, that it is really easy to build a first working example in no time. The grammar alone is sufficient and the rest is done by a code generator. Xtext will generate stub classes, that are ready to fill in individual logic for different areas.
By doing that most of the things just work, because Xtext comes with a lot of defaults that suits in most of the cases.
But as projects get bigger and the amount of models grow, the defaults might not scale and you might need to tweak your language to make working smooth again.
Here it becomes more complicated and you need to understand what’s going on under the covers.
In this session I will go through typical problems and solutions, that we have seen in customer projects. Sometimes it’s a tradeoff to tackle those problems, but it’s important to understand the implications.
For some typical examples I will go into details and explain what’s going on under the covers.
After the session attendees should have an idea how to tweak their own languages and why it might be worth the effort to migrate to a newer version of Xtext.
Hippo get together presentation solr integrationHippo
The document discusses integrating Solr into Hippo for search capabilities. It outlines problems with the current search architecture, objectives of improving search by integrating Solr, and how ContentBeans can be indexed using annotations to integrate them with Solr search results. Key points include fixing current problems, making search customizable, scalable, and document-oriented through Solr integration and indexing ContentBeans.
The document discusses using work queues with Gearman and CodeIgniter. It begins with an introduction to work queues, describing them as sequences of stored data or programs awaiting processing. It then discusses the client worker pattern for processing asynchronous jobs, some limitations of this approach, and how Gearman can help address those limitations by facilitating work distribution across languages and servers. The document provides instructions for installing and configuring Gearman to add work queue functionality.
Queues can provide parallel processing, cross language scripting and more! The talk was focused on Gearman but the principles apply to any alternative.
Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks ...Natasha Rooney
My slides from my talk "Updates on Offline: “My AppCache won’t come back” and “ServiceWorker Tricks for Cache”" from Over the Air 2013 held in September in Bletchley Park. We had a good run-through of offline APIs in web, the mysteries of App Cache, and updates on the current status of ServiceWorker.
Ups and downs of enterprise Java app in a research settingCsaba Toth
This document discusses the author's experiences using various technologies like EJB, Spring, Hibernate, GWT, JBoss, and others in a research environment. It outlines some of the ups and downs of each technology, including limitations of EJB for long-running computations, challenges stretching the limits of Hibernate's ORM capabilities, and difficulties migrating applications between versions of JBoss. The author also shares experiences developing the UI with GWT and ExtJS and issues that can arise from bugs in translated JavaScript code. Several figures are referenced but omitted due to prior publication.
Site Performance - From Pinto to FerrariJoseph Scott
This document discusses ways to improve website performance from slow "Pinto" levels to faster "Ferrari" levels. It recommends using an opcode cache like APC to speed up PHP, optimizing databases with technologies like Memcached, using caching plugins in WordPress, and considering architectures with load balancing and replication. The goal is to identify bottlenecks and apply techniques that reduce page load times through an understanding of how websites and underlying technologies work.
ABRIDGED VERSION - Joys & frustrations of putting 34,000 lines of Haskell in...Saurabh Nanda
Slides for our talk given at Functional Conf 2017. Shared our experience of putting 34,000 lines of Haskell code in production at Vacation Labs. Please ping me on https://twitter.com/saurabhnanda if you'd like help with deploying Haskell in an industrial setting.
This document discusses using Hadoop and Elasticsearch for real-time analytics. It provides an overview of Elasticsearch, including how it is document-oriented, schema-free, distributed and fast. It also demonstrates indexing, retrieving, updating and deleting documents from Elasticsearch. The demo portion involves extracting data from a SQL database using Hive, transforming it with Hadoop/Hive, and loading it into Elasticsearch to run queries. Lessons learned focus on concurrency, filtering, field data caching and JVM memory usage.
The importance of search for modern applications is evident and nowadays it is higher than ever. A lot of projects use search forms as a primary interface for communication with a user. Though implementation of an intelligent search functionality is still a challenge and we need a good set of tools.
In this presentation, I will talk through the high-level architecture and benefits of Elasticsearch with some examples. Aside from that, we will also take a look at its existing competitors, their similarities, and differences.
This document discusses various techniques for debugging custom Ansible modules including using verbose logging levels, the Boto debug setting, Python logging, the q debugging library, and the Python debugger pdb. It provides an example of debugging a custom ec2_describe module and outputs from using these debugging methods.
1. There is no such thing as inherently thread-safe Ruby code as different Ruby implementations have different thread semantics.
2. Writing thread-safe code requires avoiding shared mutable state, and if needed, using concurrency primitives like Mutex and ConditionVariable to synchronize access to shared state.
3. Thoroughly testing concurrency involves testing with different Ruby implementations, a large number of threads, and synchronization patterns for precision.
Need for Async: Hot pursuit for scalable applicationsKonrad Malawski
This document discusses asynchronous processing and how it relates to scalability and performance. It begins with an introduction on why asynchronous processing is important for highly parallel systems. It then covers topics like asynchronous I/O, scheduling, latency measurement, concurrent data structures, and techniques for distributed systems like backup requests and combined requests. The overall message is that asynchronous programming allows more efficient use of resources through approaches like non-blocking I/O, and that understanding these principles is key to building scalable applications.
Johan Edstrom discussed scaling applications by making them more asynchronous and distributed. He covered several Apache projects like Camel, Karaf, ActiveMQ, Cassandra and CXF that can help achieve this. Specifically, he showed how to:
1. Use Camel and OSGi to build asynchronous microservices that communicate via an enterprise integration pattern like a message queue.
2. Store data in Cassandra for asynchronous and high-performance access across data centers.
3. Expose APIs asynchronously using CXF and handle requests with non-blocking techniques like futures.
4. Offload business logic to an asynchronous process running on a distributed cache like HazelCast for shared data and parallel processing across nodes
This document discusses HDInsight interactive query architecture and performance. It summarizes that:
1. HDInsight uses LLAP (Low Latency Analytical Processing) clusters to serve queries directly from Azure blob storage and data lake store for fast performance on text data.
2. Testing showed LLAP had high query concurrency and interactive query speed compared to Spark SQL and Presto.
3. The document also outlines HDInsight's logging architecture where the OMS agent collects logs and metrics from HDInsight clusters and sends them to Log Analytics for analysis.
28. What we need —
1. Familiar, standard syntax
2. Nothing extra to learn or think about
29. What we need —
1. Familiar, standard syntax
2. Nothing extra to learn or think about
3. Completely non-blocking, able to
continue rendering while waiting for
callbacks
30. What we need —
1. Familiar, standard syntax
2. Nothing extra to learn or think about
3. Completely non-blocking, able to
continue rendering while waiting for
callbacks
4. Fast
36. How AJS works —
1. Parse source to an abstract syntax
tree (AST)
37. How AJS works —
1. Parse source to an abstract syntax
tree (AST)
2. Add “futures” hooks around callbacks
38. How AJS works —
1. Parse source to an abstract syntax
tree (AST)
2. Add “futures” hooks around callbacks
3. Recompile and cache optimized JS
39. How AJS works —
1. Parse source to an abstract syntax
tree (AST)
2. Add “futures” hooks around callbacks
3. Recompile and cache optimized JS
4. Execute code inside a VM that
manages and handles async callbacks
41. How callbacks are handled —
1. At the exact spot a callback is passed to
its async function, we create a “future”
buffer.
42. How callbacks are handled —
1. At the exact spot a callback is passed to
its async function, we create a “future”
buffer.
2. We continue executing the template,
flushing everything up until a callback that
we’re still waiting on.
43. How callbacks are handled —
1. At the exact spot a callback is passed to
its async function, we create a “future”
buffer.
2. We continue executing the template,
flushing everything up until a callback that
we’re still waiting on.
3. When each callback returns, we fill in its
buffer and continue flushing down the page
as we can.
44. JS Compatibility —
Should be mostly complete, can
correctly compile embedded jQuery
and underscore.js source already.
(no they aren’t templates, but they are complex JS)
47. What about
performance? —
Parses ~40-50,000 lines/sec uncached.
Good, not great (should improve).
But AJS can render while Node
waits on your DB calls, and page
loads will feel faster because
<head> resources aren’t blocked.
49. Current limitations —
1. Since callbacks are detected and at runtime,
callbacks can’t be nested. There may be
some ways around this, but we may not want
to encourage it...
50. Current limitations —
1. Since callbacks are detected and at runtime,
callbacks can’t be nested. There may be
some ways around this, but we may not want
to encourage it...
2. There’s no layout nesting built into the
middleware.
51. Current limitations —
1. Since callbacks are detected and at runtime,
callbacks can’t be nested. There may be
some ways around this, but we may not want
to encourage it...
2. There’s no layout nesting built into the
middleware.
3. Others...
53. How to get it —
1 - npm install ajs
2 - github.com/kainosnoema/ajs
Submit issues, fork and improve!
Editor's Notes
\n
\n
We haven&#x2019;t progressed since the days of inline PHP, in fact we&#x2019;ve regressed\n Node&#x2019;s non-blocking architecture is being handicapped by archaic templating conventions\n We need something completely new (at least under the hood)\n
We haven&#x2019;t progressed since the days of inline PHP, in fact we&#x2019;ve regressed\n Node&#x2019;s non-blocking architecture is being handicapped by archaic templating conventions\n We need something completely new (at least under the hood)\n
\n
\n
\n
\n
From the end user&#x2019;s perspective, we&#x2019;re finally back the experience we had with inline PHP.\nRegardless, we&#x2019;re stuck with Ruby&#x2019;s blocking IO calls. \n
From the end user&#x2019;s perspective, we&#x2019;re finally back the experience we had with inline PHP.\nRegardless, we&#x2019;re stuck with Ruby&#x2019;s blocking IO calls. \n
From the end user&#x2019;s perspective, we&#x2019;re finally back the experience we had with inline PHP.\nRegardless, we&#x2019;re stuck with Ruby&#x2019;s blocking IO calls. \n
Somehow we have this assumption that whatever we write in Node will be non-blocking.\nUnfortunately this isn&#x2019;t true on a per-request level... if you have a blocking function, Node blocks.\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
The uncached performance is only relevant on the first page load.\nAfter that performance is MUCH better, and will only improve.\n
The uncached performance is only relevant on the first page load.\nAfter that performance is MUCH better, and will only improve.\n
2. Thought of this last night actually...\n
2. Thought of this last night actually...\n
2. Thought of this last night actually...\n
Obviously Ryan was joking around, but in threory AJS could be used as\nan asynchronous &#x201C;PHP&#x201D; by simply serving up AJS files, mapping URIs\nto a directory structure. Not that you&#x2019;d want to.\n