{"action":"created","comment":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/comments/53179191","id":53179191,"diff_hunk":"@@ -150,15 +150,24 @@ class @Problem\n     $.postWithPrefix \"#{url}/input_ajax\", data, callback\n \n \n-  render: (content) ->\n-    if content\n+  # Like render(), but for use when we already have our content up front and\n+  # don't need to load it from across the network. If content is supplied (e.g.\n+  # it was in a data- attribute or the caller wants to replace the content),\n+  # then we use that. Otherwise, we assume that the proper content has already\n+  # been loaded into @el by the server side rendering.\n+  preRender: (content) ->\n       @el.attr({'aria-busy': 'true', 'aria-live': 'off', 'aria-atomic': 'false'})\n-      @el.html(content)\n+      if content\n+        @el.html(content)\n       JavascriptLoader.executeModuleScripts @el, () =>\n         @setupInputTypes()\n         @bind()\n         @queueing()\n       @el.attr('aria-busy', 'false')\n+\n+  render: (content) ->\n+    if content\n+      @preRender(content)","path":"common/lib/xmodule/xmodule/js/src/capa/display.coffee","position":33,"original_position":33,"commit_id":"41668c74e1136cdb710aebf34c37fefcbd0fb4a2","original_commit_id":"41668c74e1136cdb710aebf34c37fefcbd0fb4a2","user":{"login":"tobz","id":222615,"avatar_url":"https://avatars.githubusercontent.com/u/222615?v=3","gravatar_id":"","url":"https://api.github.com/users/tobz","html_url":"https://github.com/tobz","followers_url":"https://api.github.com/users/tobz/followers","following_url":"https://api.github.com/users/tobz/following{/other_user}","gists_url":"https://api.github.com/users/tobz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobz/subscriptions","organizations_url":"https://api.github.com/users/tobz/orgs","repos_url":"https://api.github.com/users/tobz/repos","events_url":"https://api.github.com/users/tobz/events{/privacy}","received_events_url":"https://api.github.com/users/tobz/received_events","type":"User","site_admin":false},"body":"This a little confusing to me.\r\n\r\nIt looks like `preRender` is duplicating what `render` does, partially.  It seems like `render` ought to have the same signature, but `preRender` should be the check where if there's no content passed in, it does the AJAX call which then goes to `render`.\r\n\r\nMaybe I'm not understanding what `@forceUpdate` does, though.\r\n\r\nDoes my comment make sense?  A code example may explain it better.","created_at":"2016-02-17T15:26:26Z","updated_at":"2016-02-17T15:26:26Z","html_url":"https://github.com/edx/edx-platform/pull/11492#discussion_r53179191","pull_request_url":"https://api.github.com/repos/edx/edx-platform/pulls/11492","_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments/53179191"},"html":{"href":"https://github.com/edx/edx-platform/pull/11492#discussion_r53179191"},"pull_request":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11492"}}},"pull_request":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/11492","id":58821787,"html_url":"https://github.com/edx/edx-platform/pull/11492","diff_url":"https://github.com/edx/edx-platform/pull/11492.diff","patch_url":"https://github.com/edx/edx-platform/pull/11492.patch","issue_url":"https://api.github.com/repos/edx/edx-platform/issues/11492","number":11492,"state":"open","locked":false,"title":"Move rendering of capa problems inline","user":{"login":"ormsbee","id":41625,"avatar_url":"https://avatars.githubusercontent.com/u/41625?v=3","gravatar_id":"","url":"https://api.github.com/users/ormsbee","html_url":"https://github.com/ormsbee","followers_url":"https://api.github.com/users/ormsbee/followers","following_url":"https://api.github.com/users/ormsbee/following{/other_user}","gists_url":"https://api.github.com/users/ormsbee/gists{/gist_id}","starred_url":"https://api.github.com/users/ormsbee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ormsbee/subscriptions","organizations_url":"https://api.github.com/users/ormsbee/orgs","repos_url":"https://api.github.com/users/ormsbee/repos","events_url":"https://api.github.com/users/ormsbee/events{/privacy}","received_events_url":"https://api.github.com/users/ormsbee/received_events","type":"User","site_admin":false},"body":"### Motivation\r\n\r\nWe want to speed up end user page load times in courseware by eliminating the extra HTTP roundtrips necessary to render a view with capa problems in them. We already take most of the hit for data access for capa problems when we display a sequence, but capa problems currently only render blank stubs as part of their `student_view()`. Each problem then individually calls across then network with an AJAX call (`problem_get`) to fill in their real content.\r\n\r\n### Approach\r\n\r\nThis is actually a really small PR, and just pushes content into the div from the start rather than calling over the network. There's a tiny bit of refactoring of the render code, and a separate commit that adds caching to edxmako middleware in order to offset the extra server load caused by this change.\r\n\r\n### Risks\r\n\r\nNeed to verify impact on:\r\n\r\n* [ ] Analytics/Events\r\n* [ ] Rendering performance for students\r\n  * [x] Large numbers of capa problems\r\n  * [ ] All types of capa problems\r\n* [ ] Rendering performance for staff\r\n  * [ ] Large numbers of capa problems\r\n  * [ ] All types of capa problems\r\n\r\n","created_at":"2016-02-09T22:50:34Z","updated_at":"2016-02-17T15:26:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5ab64cce13175897100398ae1b859b6471553148","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/edx/edx-platform/pulls/11492/commits","review_comments_url":"https://api.github.com/repos/edx/edx-platform/pulls/11492/comments","review_comment_url":"https://api.github.com/repos/edx/edx-platform/pulls/comments{/number}","comments_url":"https://api.github.com/repos/edx/edx-platform/issues/11492/comments","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/41668c74e1136cdb710aebf34c37fefcbd0fb4a2","head":{"label":"edx:ormsbee/inline_capa","ref":"ormsbee/inline_capa","sha":"41668c74e1136cdb710aebf34c37fefcbd0fb4a2","user":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"repo":{"id":10391073,"name":"edx-platform","full_name":"edx/edx-platform","owner":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/edx/edx-platform","description":"The Open edX platform, the software that powers edX!","fork":false,"url":"https://api.github.com/repos/edx/edx-platform","forks_url":"https://api.github.com/repos/edx/edx-platform/forks","keys_url":"https://api.github.com/repos/edx/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edx/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edx/edx-platform/teams","hooks_url":"https://api.github.com/repos/edx/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/edx/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/edx/edx-platform/events","assignees_url":"https://api.github.com/repos/edx/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/edx/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/edx/edx-platform/tags","blobs_url":"https://api.github.com/repos/edx/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edx/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edx/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/edx/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/edx/edx-platform/languages","stargazers_url":"https://api.github.com/repos/edx/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/edx/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/edx/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/edx/edx-platform/subscription","commits_url":"https://api.github.com/repos/edx/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/edx/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/edx/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/edx/edx-platform/issues/comments{/number}","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/edx/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edx/edx-platform/merges","archive_url":"https://api.github.com/repos/edx/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edx/edx-platform/downloads","issues_url":"https://api.github.com/repos/edx/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/edx/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/edx/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/edx/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edx/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/edx/edx-platform/releases{/id}","deployments_url":"https://api.github.com/repos/edx/edx-platform/deployments","created_at":"2013-05-30T20:20:38Z","updated_at":"2016-02-17T05:23:24Z","pushed_at":"2016-02-17T15:21:54Z","git_url":"git://github.com/edx/edx-platform.git","ssh_url":"git@github.com:edx/edx-platform.git","clone_url":"https://github.com/edx/edx-platform.git","svn_url":"https://github.com/edx/edx-platform","homepage":"http://open.edx.org/","size":686842,"stargazers_count":2395,"watchers_count":2395,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1459,"mirror_url":null,"open_issues_count":146,"forks":1459,"open_issues":146,"watchers":2395,"default_branch":"master"}},"base":{"label":"edx:master","ref":"master","sha":"35eb5a16291a2037d9a88ebfc9a119bcc04e028d","user":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"repo":{"id":10391073,"name":"edx-platform","full_name":"edx/edx-platform","owner":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/edx/edx-platform","description":"The Open edX platform, the software that powers edX!","fork":false,"url":"https://api.github.com/repos/edx/edx-platform","forks_url":"https://api.github.com/repos/edx/edx-platform/forks","keys_url":"https://api.github.com/repos/edx/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edx/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edx/edx-platform/teams","hooks_url":"https://api.github.com/repos/edx/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/edx/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/edx/edx-platform/events","assignees_url":"https://api.github.com/repos/edx/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/edx/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/edx/edx-platform/tags","blobs_url":"https://api.github.com/repos/edx/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edx/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edx/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/edx/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/edx/edx-platform/languages","stargazers_url":"https://api.github.com/repos/edx/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/edx/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/edx/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/edx/edx-platform/subscription","commits_url":"https://api.github.com/repos/edx/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/edx/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/edx/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/edx/edx-platform/issues/comments{/number}","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/edx/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edx/edx-platform/merges","archive_url":"https://api.github.com/repos/edx/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edx/edx-platform/downloads","issues_url":"https://api.github.com/repos/edx/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/edx/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/edx/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/edx/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edx/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/edx/edx-platform/releases{/id}","deployments_url":"https://api.github.com/repos/edx/edx-platform/deployments","created_at":"2013-05-30T20:20:38Z","updated_at":"2016-02-17T05:23:24Z","pushed_at":"2016-02-17T15:21:54Z","git_url":"git://github.com/edx/edx-platform.git","ssh_url":"git@github.com:edx/edx-platform.git","clone_url":"https://github.com/edx/edx-platform.git","svn_url":"https://github.com/edx/edx-platform","homepage":"http://open.edx.org/","size":686842,"stargazers_count":2395,"watchers_count":2395,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1459,"mirror_url":null,"open_issues_count":146,"forks":1459,"open_issues":146,"watchers":2395,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11492"},"html":{"href":"https://github.com/edx/edx-platform/pull/11492"},"issue":{"href":"https://api.github.com/repos/edx/edx-platform/issues/11492"},"comments":{"href":"https://api.github.com/repos/edx/edx-platform/issues/11492/comments"},"review_comments":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11492/comments"},"review_comment":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11492/commits"},"statuses":{"href":"https://api.github.com/repos/edx/edx-platform/statuses/41668c74e1136cdb710aebf34c37fefcbd0fb4a2"}}}}