diff --git a/conf/default.conf.php b/conf/default.conf.php index 229c9e4335..581b062938 100644 --- a/conf/default.conf.php +++ b/conf/default.conf.php @@ -349,4 +349,13 @@ return array( // unlikely that you need to modify this. 'celerity.resource-hash' => 'd9455ea150622ee044f7931dabfa52aa', + // In a development environment, it is desirable to force static resources + // (CSS and JS) to be read from disk on every request, so that edits to them + // appear when you reload the page even if you haven't updated the resource + // maps. This setting ensures requests will be verified against the state on + // disk. Generally, you should leave this off in production (caching behavior + // and performance improve with it off) but turn it on in development. (These + // settings are the defaults.) + 'celerity.force-disk-reads' => false, + ); diff --git a/conf/development.conf.php b/conf/development.conf.php index 51a1c1a6f0..3e2e8d0b55 100644 --- a/conf/development.conf.php +++ b/conf/development.conf.php @@ -19,5 +19,6 @@ return array( 'darkconsole.enabled' => true, + 'celerity.force-disk-reads' => true, ) + phabricator_read_config_file('default'); diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index c511556d8e..a81a9261b0 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -390,7 +390,7 @@ celerity_register_resource_map(array( ), 'javelin-behavior-differential-show-more' => array( - 'uri' => '/res/7a844635/rsrc/js/application/differential/behavior-show-more.js', + 'uri' => '/res/9cbf1c9c/rsrc/js/application/differential/behavior-show-more.js', 'type' => 'js', 'requires' => array( @@ -867,7 +867,7 @@ celerity_register_resource_map(array( ), 'phabricator-shaped-request' => array( - 'uri' => '/res/1f0ef02b/rsrc/js/application/core/ShapedRequest.js', + 'uri' => '/res/7b1522d3/rsrc/js/application/core/ShapedRequest.js', 'type' => 'js', 'requires' => array( @@ -1005,7 +1005,7 @@ celerity_register_resource_map(array( 'uri' => '/res/pkg/ac70e6b7/core.pkg.css', 'type' => 'css', ), - 'b17926e1' => + 'c5d10dfe' => array ( 'name' => 'differential.pkg.js', 'symbols' => @@ -1016,7 +1016,7 @@ celerity_register_resource_map(array( 3 => 'javelin-behavior-differential-show-more', 4 => 'javelin-behavior-differential-diff-radios', ), - 'uri' => '/res/pkg/b17926e1/differential.pkg.js', + 'uri' => '/res/pkg/c5d10dfe/differential.pkg.js', 'type' => 'js', ), ), @@ -1042,11 +1042,11 @@ celerity_register_resource_map(array( 'diffusion-commit-view-css' => '03ef179e', 'javelin-behavior' => '7d23deb1', 'javelin-behavior-aphront-basic-tokenizer' => '33f413ef', - 'javelin-behavior-differential-diff-radios' => 'b17926e1', - 'javelin-behavior-differential-edit-inline-comments' => 'b17926e1', - 'javelin-behavior-differential-feedback-preview' => 'b17926e1', - 'javelin-behavior-differential-populate' => 'b17926e1', - 'javelin-behavior-differential-show-more' => 'b17926e1', + 'javelin-behavior-differential-diff-radios' => 'c5d10dfe', + 'javelin-behavior-differential-edit-inline-comments' => 'c5d10dfe', + 'javelin-behavior-differential-feedback-preview' => 'c5d10dfe', + 'javelin-behavior-differential-populate' => 'c5d10dfe', + 'javelin-behavior-differential-show-more' => 'c5d10dfe', 'javelin-behavior-workflow' => '122a6b6d', 'javelin-dom' => '7d23deb1', 'javelin-event' => '7d23deb1', diff --git a/src/infrastructure/celerity/controller/CelerityResourceController.php b/src/infrastructure/celerity/controller/CelerityResourceController.php index fb5a1ca35e..2b09c7899e 100644 --- a/src/infrastructure/celerity/controller/CelerityResourceController.php +++ b/src/infrastructure/celerity/controller/CelerityResourceController.php @@ -38,7 +38,8 @@ class CelerityResourceController extends AphrontController { throw new Exception("Only CSS and JS resources may be served."); } - if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { + if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && + !PhabricatorEnv::getEnvConfig('celerity.force-disk-reads')) { // Return a "304 Not Modified". We don't care about the value of this // field since we never change what resource is served by a given URI. return $this->makeResponseCacheable(new Aphront304Response()); diff --git a/webroot/rsrc/js/application/core/ShapedRequest.js b/webroot/rsrc/js/application/core/ShapedRequest.js index 5decf2b387..d993e6680a 100644 --- a/webroot/rsrc/js/application/core/ShapedRequest.js +++ b/webroot/rsrc/js/application/core/ShapedRequest.js @@ -51,9 +51,11 @@ JX.install('PhabricatorShapedRequest', { var request = new JX.Request(this._uri, JX.bind(this, function(r) { this._callback(r); - this._min = new Date().getTime() + this._rateLimit; + this._min = new Date().getTime() + this.getRateLimit(); this._defer && this._defer.stop(); - this._defer = JX.defer(JX.bind(this, this.trigger), this._rateLimit); + this._defer = JX.defer( + JX.bind(this, this.trigger), + this.getRateLimit()); })); request.listen('finally', JX.bind(this, function() { this._request = null; @@ -62,7 +64,9 @@ JX.install('PhabricatorShapedRequest', { request.setTimeout(this.getFrequency()); request.send(); } else { - this._defer = JX.defer(JX.bind(this, this.trigger), this._frequency); + this._defer = JX.defer( + JX.bind(this, this.trigger), + this.getFrequency()); } }, @@ -82,7 +86,7 @@ JX.install('PhabricatorShapedRequest', { }, properties : { - rateLimit : 250, - frequency : 750 + rateLimit : 500, + frequency : 1000 } });